; Orange programmer module v2.4 ; (c) 1999-2003 Alex Plusov ; I2C chips with invert wp ; CHIP=BAW574252 128x8 SOCKET=1 ;"I2C" PING=SCL,0 PING=SDA,1 PINO=WP, 2 PINO=A0, 3 PINO=A1, 4 PINO=A2, 5 CDELAY = 5 ; one set delay [_START] SDA=1,SCL=1,SDA=0,SCL=0 ; Start 10 [_STOP] SCL=0,SDA=0,SCL=1,SDA=1 ; Stop 01 [INIT] A0=0,A1=0,A2=0 WP=0 R0=0xA0 ; write I2C address const R1=0xA1 ; read I2C address const SCL=0,SDA=1 LOOP=(7,0) {SCL=1,SCL=0} ; out dummy P=1000 [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 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] WP=1,P=500 [_WRITEB] _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=R2[I],SCL=1,SCL=0} ; out 8 bits data from R2 SDA=0,SDA=1,SCL=1,SDA?0 ; 0 - ack check? SCL=0,SDA=0 _STOP P=15000 [WRITE] R2=0xFF,_WRITEB ; erase as write FF R2=DATA,_WRITEB R2=DATA,_WRITEB R2=DATA,_WRITEB