====== AN32003 - EEPROM 연결 (93C46) ====== 93C46 은 대표적인 저가격, 소용량 EEPROM입니다. (93C46은 1K, 93C56 은 2K, 두칩은 스팩은 같고, 용량만 차이가 있습니다.) 24LCxx시리즈는 I2C 접속으로 되어있는반면, 93Cxx는 SPI접속으로 되어 있습니다. {{ :cublocapp:an32003:93c46pinmap.png?nolink |}} 큐블록의 shirtout, shiftin 명령어를 이용해서 93c46을 억세스할 수 있습니다. [[http://http://www.atmel.com/Images/doc5140.pdf|93C46 데이터 시트]] ===== 결선 ===== 93c46 iocs = P16 \\ 93c46 iosk = P17 \\ 93c46 iodo = P18 \\ 93c46 iodi = P19 \\ {{ :cublocapp:an32003:cubloc_93c46.png?nolink |}} {{ :cublocapp:an32003:i93c46.png?nolink |}} ===== 소스 프로그램 ===== {{ :cublocapp:an32003:an32003.zip |}} Const Device = CB280 Dim dtin As Byte,dtout As Byte Dim dtadr As Integer Const iocs = 16 Const iosk = 17 Const iodo = 18 Const iodi = 19 Ramclear Low iocs Low iodo Low iosk Wait 100 ' 93C46 : 8bit Mode ' EWEN 코멘드 전송, Erase/Write 허가, 파워온후 반드시 해야됨. High iocs Shiftout iosk,iodo,1,&h260,10 Low iocs Wait 100 ' 같은번지에 쓰고, 읽기 dtout = &h5a Do High iocs Shiftout iosk,iodo,1,&h280 + dtadr,10 ' 어드레스 Shiftout iosk,iodo,1,dtout,8 ' 데이터 WRITE Low iocs Wait 500 High iocs Shiftout iosk,iodo,1,&h300 + dtadr,10 ' 어드레스 dtin = Shiftin(iosk,iodi,1,8) ' 데이터 READ Low iocs Wait 500 Debug "Adr : ",Hex dtadr , " Write ", Hex dtout, " and Read ", Hex dtin,Cr Incr dtadr Incr dtout Loop ===== 원리 설명 ===== {{ :cublocapp:an32003:i93c46_scope.png?nolink |}} Data In 핀과 Clock핀을 스코프로 찍어본 것입니다. 노란색이 clock핀입니다. 데이터 북에서 가장중요한 표가 아래 코멘드 테이블입니다. 위 예제는 ORG핀을 GND와 묶었기 때문에 8비트 (빨간박스부분)으로 동작합니다. {{ :cublocapp:an32003:93c46table.png?nolink |}} 부연설명을 하자면, 93CXX는 3 비트의 코멘드와 7비트의 어드레스를 먼저 보내야 합니다. 그래서 위 소스를 보면 총 10비트를 보내고 있습니다. Write할때는 93CXX의 DI (입력)으로 데이터를 넣어주면 됩니다. 반대로 읽어낼때는 93CXX의 DO(출력)에서 데이터를 읽어오면 됩니다. 93CXX는 파워온시 쓰기금지 상태이기 때문에 반드시, EWEN 명령어를 먼저 실행시켜주어야, 그 뒤로부터 쓰기가 가능해 집니다. 이 코멘드를 날리지 않으면, 읽기만 가능한 상태입니다. 한가지 더 93CXX에 쓰기 명령을 날린 후에는 반드시 5mS 정도는 대기 상태로 두어야 Write가 안정적으로 수행됩니다. [[cublocapp:index|한단계 뒤로가기]]