; Orange programmer module v3.4 ; (c) 2001 Alex Plusov, Alexander Shendrygin ; CHIP=SDA2546,512x8 Siemens I2C ; CHIP=SDA2586,1024x8 Siemens I2C ; Use external power! ; Real GND - First Pin - For Orange-2 set pin1 to GND!!! ; Tested SDA2546 by Alexander Shendrygin ; Tested SDA2586 by Rusty SOCKET=1 ;"I2C" PING=SCL,0 PING=SDA,1 PINO=TP3, 2 PING=GND0,3 PINO=CS,4 PINO=TP1,5 CDELAY=4 ; one cycle time [_START] SDA=1,SCL=1,SDA=0,SCL=0 ; Start 10 [_STOP] SDA=0,SCL=1,SDA=1,SCL=0 ; Stop 01 [_CSBYTE] R0=0xA LOOP=(3,0) {SDA=R0[I],SCL=1,SCL=0} ; out 4 bits DeviceAdr SDA=ADR[9],SCL=1,SCL=0 ; bit 5 = ADR[9] (for 2586 only) SDA=ADR[8],SCL=1,SCL=0 ; bit 6 = ADR[8] SDA=0,SCL=1,SCL=0 ; bit 7 = SC=0 [INIT] TP3=0,GND0=0,CS=0,TP1=0,P=20 ;GND0=0,CS=0,TP1=0,TP3=0,P=20 [READ] _START _CSBYTE SDA=0,SCL=1,SCL=0 ; bit 8 = 0 Write Mode SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out DeviceAdr, Hi(Adr), Mode LOOP=(7,0) {SDA=ADR[I],SCL=1,SCL=0} ; out 8 bits Lo(Adr) SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out Lo(Adr) _START _CSBYTE SDA=1,SCL=1,SCL=0 ; bit 8 = 1 Read Mode SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out DeviceSelect LOOP=(7,0) {SCL=1,DATA[I]=SDA,SCL=0} ; read byte Data SDA=1,SCL=1,SCL=0 ; out master NO_ACKN _STOP [WRITEINIT] ; read from address 00 to Switch-On Mode (Write Enable) _START R0=0xA0 LOOP=(7,0) {SDA=R0[I],SCL=1,SCL=0} ; out 8 bits 0xA0 SDA=0,SDA=1,SCL=1,SDA?0 ; ack check SCL=0,SDA=0 LOOP=(7,0) {SDA=0,SCL=1,SCL=0} ; out 8 bits (ADR=0) SDA=0,SDA=1,SCL=1,SDA?0 ; ack check SCL=0,SDA=0 _START R1=0xA1 LOOP=(7,0){SDA=R1[I],SCL=1,SCL=0} ; out 8 bits 0xA1 SDA=0,SDA=1,SCL=1,SDA?0 ; ack check SCL=0 SDA=1 ;SDA Hi-Z LOOP=(7,0){SCL=1,P=10,SCL=0} ;read byte emulation SDA=1,SCL=1,SCL=0,SDA=0 ;master not asked _STOP P=20 [WRITE] _START _CSBYTE SDA=0,SCL=1,SCL=0 ; out 1 bit, 0=Write Mode SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out DeviceAdr, Hi(Adr), Mode LOOP=(7,0) {SDA=ADR[I],SCL=1,SCL=0} ; out 8 bits Lo(Adr) SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out Lo(Adr) LOOP=(7,0) {SDA=DATA[I],SCL=1,SCL=0} ; out byte Data SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out Data _STOP P=20000 ; delay: (Write Time)