; Orange programmer module v2.4 ; (c) 1999-2004 CnCLab ; CHIP=BAW658049,256x8,BAW658049.HPL SOCKET=1 ;"I2C" PING=SCL,0 PING=SDA,1 PINO=PT, 2 PINO=A0, 3 PINO=A1, 4 PINO=A2, 5 CDELAY=4 ; one cycle time [_START] SDA=1,SCL=1,SDA=0,SCL=0 ; Start 10 [_STOP] SCL=0,SDA=0,SCL=1,SDA=1 ; Stop 01 [INIT] $VERIFY=2 ;after write PT=0 A0=0,A1=0,A2=0 [READ] _START R0=0xA0 LOOP=(7,0) {SDA=R0[I],SCL=1,SCL=0} ; out 8 bits 0xA0 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 R0=0xA1 LOOP=(7,0) {SDA=R0[I],SCL=1,SCL=0} ; out 8 bits 0xA0 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 [_READB] _START R0=0xA0 LOOP=(7,0) {SDA=R0[I],SCL=1,SCL=0} ; out 8 bits 0xA0 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 R0=0xA1 LOOP=(7,0) {SDA=R0[I],SCL=1,SCL=0} ; out 8 bits 0xA0 SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out DeviceSelect LOOP=(7,0) {SCL=1,R8[I]=SDA,SCL=0} ; read byte Data SDA=1,SCL=1,SCL=0 ; out master NO_ACKN _STOP [_WRITEB] _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=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 from R2 SDA=0,SDA=1,SCL=1,SDA?0 ; 0 - ack check? SCL=0,SDA=0 _STOP LOOP=(0,4000) {PT=1,PT=0} ; CLOCK TIMING (min 257 loops) ~ 40 ms [WRITE] PT=1 _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=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 from R2 SDA=0,SDA=1,SCL=1,SDA?0 ; 0 - ack check? SCL=0,SDA=0 _STOP SCL=0,SDA=1 ;LOOP=(0,2000) {PT=1,P=10,PT=0,P=10} ; CLOCK TIMING (min 257 loops) ~ 40 ms LOOP=(0,4000) {PT=1,PT=0} ; CLOCK TIMING (min 257 loops) ~ 40 ms ; if not use RC circuit to pin 7: ;_READB ;R7=DATA,R8?!R7{ ;VCC=0,P=6000 ; reset chip ;VCC=1,P=12000 ;} PT=1