Protokoll
|
Protokoll:
Aktion |
Host
sendet |
Target
antwortet |
Beschreibung |
Reset/Start in Bootloader |
- |
0x06 <bl_ID> |
Bootloader identifiziert sich |
Read |
0xFC <adrL>
<adrH> |
<dataL>
<dataH>
|
Inhalt eines Flash-Wortes
lesen
|
Write |
0xFD
<adrL> <adrH> <data> ...
...<data> <chksum8>
|
0x06 (= ACK, wenn ok)
0x15 (= NAK, bei Fehler)
|
Schreibt einen Datenblock ins
Flash
(Länge = kompletter Flash Erase Block)
|
Version |
0xFE
|
0x06
<bl_ID> |
Bootloader identifiziert sich
nach Anfrage vom Host |
Reset |
0xFF |
-
|
Target führt Reset aus
|
Nop |
(alles
außer 0xFC..0xFF) |
- |
Der Bootloader ignoriert alle
ungültigen Befehlscodes |
Start:
Nach einem Hardware-Reset wird immer
Bootloader-Code ausgeführt, der prüft, ob in die
Applikation oder in den Bootloader verzweigt werden soll. Je nach
Implementation kann z.B. beim Reset durch einen gedrückten
Taster o.ä. in den Bootloader verzweigt werden, oder es kann
auch aus der Applikation in den Bootloader gestartet werden.
Optional kann der Bootloader durch eine Prüfsumme
feststellen, ob der Applikationscode beschädigt oder
unvollständig ist und ggf. dann nur gültigen
Applikationscode ausführen.
Sobald der Bootloader bereit ist, Kommandos entgegen zu nehmen,
identifiziert er sich durch Senden von "ACK" (0x06)
und einem Datenbyte, das die Bootloader-Versionsnummer
enthält (Bits 0..6), sowie ein Flag (Bit 7) zur
Kennzeichnung, ob der Bootloader die Prüfsumme zur
Verifizierung des Applikationscodes anwendet oder nicht.
Read:
Mit dem Read-Befehl wird jeweils ein
Wort (14 Bits) aus dem Speicher des PICs gelesen. So kann auf den
Programmspeicher, Konfigurations- und ID-Speicher, sowie ggf. auch
auf das EEPROM zugegriffen werden.
Adressen:
ab 0x0000:
Programmspeicher,
ab 0x8000: Konfigurationsspeicher (8000: User ID, 8004:
Device-ID,Revision-ID, 8006: Konfiguration-Words)
ab 0xF000: EEPROM (nur 8 Datenbits je Wort gültig, Inhalt der
Bits 8..13 ist undefiniert!)
Write:
Der Schreib-Befehl verarbeitet immer
einen Datenblock von der Größe eines Flash Erase Blocks
(i.d.R. 16 oder 32 Words, siehe Datenblatt zum jeweiligen PIC),
mit Ausrichtung an Blockgrenzen. Das gilt auch für
EEPROM-Speicher oder die User-ID Speicherzellen! Obwohl sich die
Konfigurations-Worte und Hardware-ID gar nicht per Bootloader
ändern lassen, müssen diese beim Write-Befehl trotzdem
geschrieben werden, wenn eine User-ID geändert werden soll,
weil sie sich im gleichen Erase-Block befinden. Die zu
schreibenden (Dummy-)Daten der "Read Only" Speicherzellen
müssen nicht mit dem tatsächlichen Inhalt
übereinstimmen.
Dem Datenpaket ist ein Püfsummen-Byte angehängt, so
daß die Summe aller Bytes nach dem Befehlscode (0xFD),
incl. der Prüfsumme selbst, in den unteren 8 Bit Null ergeben
muss. Stimmt die Prüfsumme nicht oder liegt die Adresse in
einem ungültigen Bereich, gibt der Bootloader ein NAK-Zeichen
(0x15) zurück,
sonst nach abgeschlossener Schreiboperation ein ACK (0x06).
Version:
Mit diesem Befehl kann der Host die
Verbindung zum Bootloader überprüfen und dessen
Versionsnummer abfragen.
Reset:
Der Bootloader startet den
Mikrocontroller neu. Nach einem erfolgreichem Upload kann dadurch
die Applikation gestartet werden. Wenn keine oder eine
beschädigte Applikation im Flash steht und der Bootloader die
Applikations-Prüfsumme auswertet, wird wieder in den
Bootloader gestartet.
|
|