; Orange programmer module V1.5 ; (c) 1999-2003 CnCLab ; CHIP=24LC41,512x8 ; 24LC41 512+ 128 dual port EEPROM ; primary tested ; Orange1 - not supported. ;Chip Programmer: ;1 DSCL P3, ;2 DWP P5, ;3 Vss Gnd, ;4 MSDA P1, ;5 MSCL P0 ;6 MWP P2, ;7 VCC Vcc ;8 DSDA P4, SOCKET=0 ; INFO="24LC41 Adapter" ALLPINS=8 PING=MSCL,0,5 PING=MSDA,1,4 PINO=MWP, 2,6 PING=DSCL,3,1 PING=DSDA,4,8 PINO=DWP, 5,2 CDELAY=4 ; one cycle time [_START] MSDA=1,MSCL=1,MSDA=0,MSCL=0 ; Start 10 [_STOP] MSCL=0,MSDA=0,MSCL=1,MSDA=1 ; Stop 01 [_PWAIT] ; polling wait R0=0 R1=0xA0 LOOP=(0,60){ _START LOOP=(7,0) {MSDA=R1[I],MSCL=1,MSCL=0} ; out 8 bits MSDA=1,MSCL=1,R0[0]=MSDA ; ack store MSCL=0,MSDA=0 _STOP R0?0{BREAK} P=500 } [INIT] MWP=0 [READ] _START R0=0xA LOOP=(3,0) {MSDA=R0[I],MSCL=1,MSCL=0} ; out 4 bits DeviceAdr LOOP=(10,8){MSDA=ADR[I],MSCL=1,MSCL=0} ; out 3 bits Hi(Adr) MSDA=0,MSCL=1,MSCL=0 ; out 1 bit, 0=Write Mode MSDA=1,MSCL=1,MSDA?0,MSCL=0 ; ACKN check ; end out DeviceAdr, Hi(Adr), Mode LOOP=(7,0) {MSDA=ADR[I],MSCL=1,MSCL=0} ; out 8 bits Lo(Adr) MSDA=1,MSCL=1,MSDA?0,MSCL=0 ; ACKN check ; end out Lo(Adr) _START R0=0xA LOOP=(3,0) {MSDA=R0[I],MSCL=1,MSCL=0} ; out 4 bits DeviceAdr LOOP=(10,8) {MSDA=ADR[I],MSCL=1,MSCL=0} ; out 3 bits Hi(Adr) MSDA=1,MSCL=1,MSCL=0 ; out 1 bit, 1=Read Mode MSDA=1,MSCL=1,MSDA?0,MSCL=0 ; ACKN check ; end out DeviceSelect LOOP=(7,0) {MSCL=1,DATA[I]=MSDA,MSCL=0} ; read byte Data MSDA=1,MSCL=1,MSCL=0 ; out master NO_ACKN _STOP [WRITE] _START R0=0xA LOOP=(3,0) {MSDA=R0[I],MSCL=1,MSCL=0} ; out 4 bits DeviceAdr LOOP=(10,8) {MSDA=ADR[I],MSCL=1,MSCL=0} ; out 3 bits Hi(Adr) MSDA=0,MSCL=1,MSCL=0 ; out 1 bit, 0=Write Mode MSDA=1,MSCL=1,MSDA?0,MSCL=0 ; ACKN check ; end out DeviceAdr, Hi(Adr), Mode LOOP=(7,0) {MSDA=ADR[I],MSCL=1,MSCL=0} ; out 8 bits Lo(Adr) MSDA=1,MSCL=1,MSDA?0,MSCL=0 ; ACKN check ; end out Lo(Adr) LOOP=(7,0) {MSDA=DATA[I],MSCL=1,MSCL=0} ; out byte Data MSDA=1,MSCL=1,MSDA?0,MSCL=0 ; ACKN check ; end out Data _STOP P=10000 ; delay: (Write Time) ;_PWAIT