93C46 은 대표적인 저가격, 소용량 EEPROM입니다. (93C46은 1K, 93C56 은 2K, 두칩은 스팩은 같고, 용량만 차이가 있습니다.)
24LCxx시리즈는 I2C 접속으로 되어있는반면, 93Cxx는 SPI접속으로 되어 있습니다.
큐블록의 shirtout, shiftin 명령어를 이용해서 93c46을 억세스할 수 있습니다.
93c46 iocs = P16
93c46 iosk = P17
93c46 iodo = P18
93c46 iodi = P19
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
Data In 핀과 Clock핀을 스코프로 찍어본 것입니다. 노란색이 clock핀입니다.
데이터 북에서 가장중요한 표가 아래 코멘드 테이블입니다. 위 예제는 ORG핀을 GND와 묶었기 때문에 8비트 (빨간박스부분)으로 동작합니다.
부연설명을 하자면, 93CXX는 3 비트의 코멘드와 7비트의 어드레스를 먼저 보내야 합니다. 그래서 위 소스를 보면 총 10비트를 보내고 있습니다. Write할때는 93CXX의 DI (입력)으로 데이터를 넣어주면 됩니다. 반대로 읽어낼때는 93CXX의 DO(출력)에서 데이터를 읽어오면 됩니다.
93CXX는 파워온시 쓰기금지 상태이기 때문에 반드시, EWEN 명령어를 먼저 실행시켜주어야, 그 뒤로부터 쓰기가 가능해 집니다. 이 코멘드를 날리지 않으면, 읽기만 가능한 상태입니다.
한가지 더 93CXX에 쓰기 명령을 날린 후에는 반드시 5mS 정도는 대기 상태로 두어야 Write가 안정적으로 수행됩니다.