; Orange programmer module v3.2 ; (c) 1999-2001 Alex Plusov ; CHIP=SDA2516 (128x8),SDA2526 (256x8) Siemens I2C ; Use external power! ; Real GND - First Pin - For Orange-2 set pin1 to GND!!! ; TESTED - OK! SOCKET=1 ;"I2C" PING=SCL,0 PING=SDA,1 PINO=TP, 2 PING=GND0,3 ;GND PINO=CS1,4 PINO=CS2,5 CDELAY = 5 ; one set delay [_START] SDA=1,SCL=1,SDA=0,SCL=0 ; Start 10 [_STOP] SDA=0,SCL=1,SDA=1,SCL=0 ; Stop 01 [INIT] TP=0,GND0=0,CS1=0,CS2=0,P=20 ;GND0=0,CS1=0,CS2=0,TP=0,P=20 R0=0xA0 ; write I2C address const R1=0xA1 ; read I2C address const [READ] _START 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=ADR[I],SCL=1,SCL=0} ; out 8 bits SDA=0,SDA=1,SCL=1,SDA?0 ; ack check SCL=0,SDA=0 _START 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,DATA[I]=SDA,SCL=0} ;read byte SDA=1,SCL=1,SCL=0,SDA=0 ;master not asked _STOP [WRITEINIT] _START 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 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 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=ADR[I],SCL=1,SCL=0} ; out 8 bits address SDA=0,SDA=1,SCL=1,SDA?0 ; ack check SCL=0,SDA=0 LOOP=(7,0){SDA=DATA[I],SCL=1,SCL=0} ; out 8 bits data SDA=0,SDA=1,SCL=1,SDA?0 ; 0 - ack check? SCL=0,SDA=0 SCL=0,SCL=1,SDA=1 ;stop P=25000