; Orange programmer module v2.1 ; (c) 2002-2003 CnCLab ; CHIP=MCM2814,256x8 Motorola ; tested ok INFO="FREE PIN7!" SOCKET=1 ;"I2C" PING=SCL,0 PING=SDA,1 PINO=EXTT, 2 PINO=CS0, 3 PINO=CS1, 4 PINO=MODE, 5 TESTMASK=11101100 CDELAY = 4 ; one set delay [INIT] EXTT=1 ; don't connect this pin! CS0=0,CS1=0 MODE=0 ; M-BUS mode P=4000 R0=0xA0 ; write I2C address const R1=0xA1 ; read I2C address const [_START] SDA=1,SCL=1,SDA=0,SCL=0 ; Start 10 [_STOP] SCL=0,SDA=0,SCL=1,SDA=1 ; Stop 01 [_READB] _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,R2[I]=SDA,SCL=0} ;read byte SDA=1,SCL=1,SCL=0,SDA=0 ;master not asked _STOP [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] _READB ; dummy read need for write! P=1000 [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 _STOP P=25000 ;PRINT=("PRG") [_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 SDA=0,SDA=1,SCL=1,SDA?0 ; 0 - ack check? SCL=0 _STOP P=25000 [ClearProtect] ADR=0,_READB ; dummy read need for write! P=10000 ADR=0xFF,R2=0x00 DATA=R2 _WRITEB