Blame | Last modification | View Log | RSS feed
Resetkommando für FlightCtrl oder BL-Ctrl - Software
SendOutData('R', 0, NULL, 0);
Daten sind entsprechend codiert und mit CRC
#############################################
dann mit Bootloader verbinden:
SEND_CHAR(27); // ESC
Delay(20); // ms - etwas warten
SEND_CHAR(0xAA);
Delay(80); // ms - etwas warten
Bootloader antwortet mit "MKBL", wenn erfolgreich verbunden
---- AVR-Signature abfragen
SEND_CHAR('t'); // get signature
Antwort:
RxBuffer[0] = 0x74 ; RxBuffer[1] = 0x00 = MEGA644
RxBuffer[0] = 0x76 ; RxBuffer[1] = 0x00 = MEGA8
---- Device setzen
SEND_CHAR('T');
SEND_CHAR(devicetyp); // set devicetyp = 0x74 oder 0x76
Antwort:
RxBuffer[0] = 0x0D // OKAY
---- Version abfragen (BootBlock)
SEND_CHAR('V');
Antwort:
RxBuffer[0] = Hauptversion; RxBuffer[1] = Nebenversion
---- Puffergrösse ermitteln
SEND_CHAR('b');
Antwort:
RxBuffer[0] = 'Y'
(unsigned int) SendBufferSize = RxBuffer[1]* 0x100 + RxBuffer[2];
---- Flash löschen
SEND_CHAR('e');
Antwort:
RxBuffer[0] = 0x0D // OKAY
---- Adresse setzen
cmd[0] = 'A';
cmd[1] = 0x00;
cmd[2] = 0x00;
SEND_BYTES(cmd, 3);
Antwort:
RxBuffer[0] = 0x0D // OKAY
---- Block übertragen (Grösse wurde zuvor ermittelt)
cmd[0] = 'B';
cmd[1] = (SendBufferSize >> 8) & 0xFF;
cmd[2] = SendBufferSize & 0xFF;
cmd[3] = 'F';
SEND_BYTES(cmd, 4);
SEND_BYTES(data, SendBufferSize);
Antwort:
RxBuffer[0] = 0x0D // OKAY
## Anmerkung ##
Der letzte Block ist meistens kleiner als die Blockgrösse.
Hier ist dann cmd[1] & cmd[2] entsprechend zu verkleinern !
---- Lesen (für Kontrolle)
zu Beginn auf Adresse auf 0x00 setzen (siehe oben)
cmd[0] = 'g';
cmd[1] = (SendBufferSize >> 8) & 0xFF;
cmd[2] = SendBufferSize & 0xFF;
cmd[3] = 'F';
SEND_BYTES(cmd, 4);
Antwort:
1 Block Daten, Länge entsprechend cmd[1] & cmd[2]
---- Exit Bootloader
SEND_CHAR('E');