Etape 4: Voici le programme pour arduino
#define dummyData 0xAA
#define RDY 75 #define NRDY 76
const int _MISO = 4 ; const int _MOSI = 5 ; const int _CLK = 3 ; const int RST = 2 ;
/ * Bloc de définition de la variable * /
données d’octets ; octet AL, AH ; adresse 16 bits byte lockByte ; incorporer la serrure mèches ici octet soupir, SigL ; Octets de signature
void setup() {pinMode (_MISO, INPUT); pinMode (_MOSI, sortie); pinMode (_CLK, sortie); pinMode (RST, sortie) ; Serial.Begin(115200) ; dépend du paramétrage de l’ordinateur hôte
}
void loop() {while (! Serial.available()) ; Attendez de caractère si (Serial.available() > 0) interrupteur (Serial.read()) {affaire « p »: Serial.write(progEnable()) ; break ; case « r »: readProgmem() ; Serial.Write(Data) ; rupture ; case « a »: while (! Serial.available()) ; AL = Serial.read() ; rupture ; case « A »: while (! Serial.available()) ; AH = Serial.read() ; rupture ; affaire aurait ": while (! Serial.available()) ; données = Serial.read() ; rupture ; de cas ': AH = 0 ; AL = 0 ; Soupir = readSign() ; Serial.Write(SigH) ; rupture ; de cas ': AH = 2 ; AL = 0 ; SigL = readSign() ; Serial.Write(SigL) ; AH = 1 ; AL = 0 ; SigL = readSign() ; Serial.Write(SigL) ; rupture ; lu SigL cas ' o ': digitalWrite (RST, 1); break ; case « c »: digitalWrite (RST, 0); break ; Case « e »: eraseChip() ; Serial.Write(RDY) ; rupture ; affaire « j »: break ; case « w »: writeProgmem() ; rupture ; }
}
unsigned char SendSPI (données unsigned char) {uint8_t retval = 0; uint8_t intData = données ; int t; pour (ctr d’int = 0; ctr < 7; ctr ++) {si (intData & 0 x 80) digitalWrite(_MOSI,1) ; digitalWrite(_MOSI,0) d’autre ;
digitalWrite(_CLK,1) ; delayMicroseconds(1) ;
t = digitalRead(_MISO) ; digitalWrite(_CLK,0) ;
Si retval (t) | = 1 ; d’autre retval & = 0xFE ; retval << = 1 ; intData << = 1 ; delayMicroseconds(1) ; }
Si (intData & 0 x 80) digitalWrite(_MOSI,1) ; d’autre digitalWrite(_MOSI,0) ; digitalWrite(_CLK,1) ; delayMicroseconds(1) ;
t = digitalRead(_MISO) ; digitalWrite(_CLK,0) ; Si retval (t) | = 1 ; d’autre retval & = 0xFE ;
Return retval ; }
progEnable() octet {SendSPI(0xAC) ; SendSPI(0x53) ; SendSPI(dummyData) ; Return SendSPI(dummyData) ; }
void eraseChip() {SendSPI(0xAC) ; SendSPI(0x9F) ; SendSPI(dummyData) ; SendSPI(dummyData) ; Delay(520) ; }
void readProgmem() {}
SendSPI(0x20) ; SendSPI(AH) ; SendSPI(AL) ; données = SendSPI(dummyData) ; }
void writeProgmem() {SendSPI(0x40) ; SendSPI(AH) ; SendSPI(AL) ; SendSPI(data) ; }
void writeLockBits() {SendSPI(0xAC) ; SendSPI(lockByte) ; SendSPI(dummyData) ; SendSPI(dummyData) ; }
void readLockBits() {SendSPI(0x24) ; SendSPI(dummyData) ; SendSPI(dummyData) ; lockByte = SendSPI(dummyData) ; }
readSign() octet {SendSPI(0x28) ; SendSPI(AH) ; SendSPI(AL) ; Return SendSPI(dummyData) ; }