Paso 4: Este es el programa de 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;
/ * Bloque de definición de variables * /
datos del octeto; bytes AL, AH; lockByte del byte de dirección de 16 bits; cerradura de incrustar pedacitos aquí byte suspiro, SigL; Bytes de firma
void setup() {pinMode (_MISO, entrada); pinMode (_MOSI, salida); pinMode (_CLK, salida); pinMode (RST, salida); Serial.Begin(115200); depende de la configuración de la PC del anfitrión
}
void loop() {mientras que (! Serial.Available()); esperar carácter si (Serial.available() > 0) del interruptor (Serial.read()) {caso 'p': Serial.write(progEnable()); break; caso 'r': readProgmem(); Serial.Write(Data); rotura; caso 'a': tiempo (! Serial.Available()); AL = Serial.read(); rotura; caso 'A': tiempo (! Serial.Available()); AH = Serial.read(); rotura; caso sería ': tiempo (! Serial.Available()); datos = Serial.read(); rotura; de caso ': AH = 0; AL = 0; Suspiro = readSign(); Serial.Write(SigH); rotura; de caso ': AH = 2; AL = 0; SigL = readSign(); Serial.Write(SigL); AH = 1; AL = 0; SigL = readSign(); Serial.Write(SigL); rotura; leer caso de SigL ' o ': digitalWrite (RST, 1); break; caso 'c': digitalWrite (RST, 0); break; caso 'e': eraseChip(); Serial.Write(rdY); rotura; caso 'j': break; caso 'w': writeProgmem(); rotura; }
}
unsigned char SendSPI (datos char sin signo) {uint8_t retval = 0; uint8_t intData = datos; int t; para (ctr int = 0; ctr < 7; ctr ++) {si (intData & 0 x 80) digitalWrite(_MOSI,1); más digitalWrite(_MOSI,0);
digitalWrite(_CLK,1); delayMicroseconds(1);
t = digitalRead(_MISO); digitalWrite(_CLK,0);
Si retval (t) | = 1; otro retval & = 0xFE; retval << = 1; intData << = 1; delayMicroseconds(1); }
Si (intData & 0 x 80) digitalWrite(_MOSI,1); digitalWrite(_MOSI,0) otra cosa; digitalWrite(_CLK,1); delayMicroseconds(1);
t = digitalRead(_MISO); digitalWrite(_CLK,0); Si retval (t) | = 1; otro retval & = 0xFE;
volver retval; }
byte progEnable() {SendSPI(0xAC); SendSPI(0x53); SendSPI(dummyData); volver SendSPI(dummyData); }
void eraseChip() {SendSPI(0xAC); SendSPI(0x9F); SendSPI(dummyData); SendSPI(dummyData); Delay(520); }
void readProgmem() {}
SendSPI(0x20); SendSPI(AH); SendSPI(AL); datos = 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); }
byte readSign() {SendSPI(0x28); SendSPI(AH); SendSPI(AL); volver SendSPI(dummyData); }