; Orange programmer module v2.5 FASTSPI ; (c) 2009-2015 CnCLab ; Macronix SERIAL SPI ROM ; Tested MX23L3254.hpl SOCKET=4 ;"SPI" ALLPINS=16 OPTIONS=f CDELAY=0.1 ; one set delay PINO=SCK,0,16 PINO=SI,1,15 PINO=CS,2,7 ;PINO=WP,3 PINO=HOLD,4,1 PINI=SO,1,8 ;Power pins: PINO=VCC,254,2 PINO=GND,255,10 BUSO=SPIOUT,0xD4 BUSO=SPIOUT24,0xD6 BUSI=SPIIN,0xD4 [_SENDBYTE] ;LOOP=(7,0){SI=R0[I],SCK=P} ;speed-up SPIOUT=R0 [_SENDADR] ;LOOP=(23,0){SI=ADR[I],SCK=P} SPIOUT24=ADR ;Ret R7 [_RDID] SCK=0 CS=1 CS=0 R7=0 ;1010 1011 ABh Read Manufacturer and Product ID _SENDBYTE(0x9F) ;RDID SI=1,P=30 LOOP=(23,0){SCK=1,R7[I]=SO,SCK=0} CS=1 [INIT] HOLD=1 ;WP=0 CS=1 SCK=0 P=10 _RDID ; READ ID cmd 9F R7=&0xFFFF R7?0xFFFF{ PRINT=A("Chip not respond, continue?") RA?0{EXIT} } P=10 [READ] CS=0 _SENDBYTE(3) ;Read _SENDADR SI=1 ;LOOP=(7,0){SCK=1,DATA[I]=SO,SCK=0} DATA=SPIIN CS=1 [READBLOCK] CS=0 ;_SENDBYTE(00000011b) ;Read _SENDBYTE(0x0B) ;Fast Read _SENDADR _SENDBYTE(0) ; dummy SI=1 LOOP=($BLOCKSIZE){ ;LOOP=(7,0){SCK=1,DATA[I]=SO,SCK=0} ;speed-up: DATA=SPIIN ADR=+1 } CS=1 [READID] ;WP=1 SCK=0 CS=1 _RDID ;cmd 9F PRINT=L("RDID value = %02lXH\n",R7) R0=R7