Nakkaloader: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
Keine Bearbeitungszusammenfassung
(bissel korrekturgelesen, kategorien hinzugefügt)
Zeile 1: Zeile 1:
__NOTOC__
__NOTOC__
Der Nakkaloader ist '''Bootloader''' für Atmel AVR Microcontroller, der es erlaubt diese Geräte via Funk zu flashen.
Der Nakkaloader ist ein '''Bootloader''' für Atmel AVR Microcontroller, der es erlaubt diese Geräte via Funk zu flashen.


Das Projekt besteht aus zwei Softwarekomponenten: Auf der Hostseite sendet das Flasher-Tool die Firmware an den eigentlichen Bootloader, der sich auf dem Microcontroller befindet.
Das Projekt besteht aus zwei Softwarekomponenten: Auf der Hostseite sendet das Flasher-Tool die Firmware an den eigentlichen Bootloader, der sich auf dem Microcontroller befindet.


Zur Datenübertragung benutzen wir die RFM12 Funkmodule von Hoperf. Zur Ansteuerung haben wir eine eignene [https://roulette.das-labor.org/trac/browser/microcontroller/src-atmel/lib/rfm12 Library] entwickelt.
Zur Datenübertragung benutzen wir die RFM12 Funkmodule von Hoperf. Zur Ansteuerung haben wir eine eigene [https://roulette.das-labor.org/trac/browser/microcontroller/src-atmel/lib/rfm12 Library] entwickelt.


Damit man mit handelsüblichen PCs auch arbeiten kann, haben wir uns zunächst ein kleines Debugtool gebaut: Ein Funk zu USB Adapter (rfm12usb). Den Quellcode für dessen Firmware gibt es ebenfalls im [https://roulette.das-labor.org/trac/browser/microcontroller/src-atmel/rfm12/rfm12usb svn].
Damit man mit handelsüblichen PCs auch arbeiten kann, haben wir uns zunächst ein kleines Debugtool gebaut: Ein Funk zu USB Adapter ([http://www.das-labor.org/wiki/Datenfunk_mit_dem_AVR rfm12usb]). Den Quellcode für dessen Firmware gibt es ebenfalls im [https://roulette.das-labor.org/trac/browser/microcontroller/src-atmel/rfm12/rfm12usb svn].


== Protokoll ==
== Protokoll ==
[[Bild:nakkaloader_protocol_flowchart.png|thumb|400px|left|Nakkaloader Protokoll 1.0]]
[[Bild:nakkaloader_protocol_flowchart.png|thumb|400px|left|Nakkaloader Protokoll 1.0]]
Das Protokoll des Nakkaloaders ist relativ simpel: Der Microcontroller (client) sendet solange seine Konfiguration, bis entweder ein der Timeout kommt oder der Master (Flasher) antwortet. Wenn niemand antwortet wird die Applikation ganz normal gestartet. Wenn eine Antwort kommt, wartet der loader auf daten und instruktionen vom Master.
Das Protokoll des Nakkaloaders ist relativ simpel: Der Microcontroller (client) sendet solange seine Konfiguration, bis entweder ein Timeout eintritt oder der Master (Flasher) antwortet. Wenn niemand antwortet wird die Applikation ganz normal gestartet. Wenn eine Antwort kommt, wartet der loader auf Daten und Instruktionen vom Master.


Diese Instruktionen können wie folgt sein:
Diese Instruktionen können wie folgt sein:
Zeile 39: Zeile 39:
----
----
'''Quellcode im SVN''': [https://roulette.das-labor.org/trac/browser/microcontroller/src-atmel/rfm12/nakkaloader/ microcontroller/src-atmel/rfm12/nakkaloader/]
'''Quellcode im SVN''': [https://roulette.das-labor.org/trac/browser/microcontroller/src-atmel/rfm12/nakkaloader/ microcontroller/src-atmel/rfm12/nakkaloader/]
[[Kategorie:Elektronik]]
[[Kategorie:Microcontroller]]
[[Kategorie:Datenfunk mit dem Microcontroller]]

Version vom 20. Oktober 2008, 00:16 Uhr

Der Nakkaloader ist ein Bootloader für Atmel AVR Microcontroller, der es erlaubt diese Geräte via Funk zu flashen.

Das Projekt besteht aus zwei Softwarekomponenten: Auf der Hostseite sendet das Flasher-Tool die Firmware an den eigentlichen Bootloader, der sich auf dem Microcontroller befindet.

Zur Datenübertragung benutzen wir die RFM12 Funkmodule von Hoperf. Zur Ansteuerung haben wir eine eigene Library entwickelt.

Damit man mit handelsüblichen PCs auch arbeiten kann, haben wir uns zunächst ein kleines Debugtool gebaut: Ein Funk zu USB Adapter (rfm12usb). Den Quellcode für dessen Firmware gibt es ebenfalls im svn.

Protokoll

Nakkaloader Protokoll 1.0

Das Protokoll des Nakkaloaders ist relativ simpel: Der Microcontroller (client) sendet solange seine Konfiguration, bis entweder ein Timeout eintritt oder der Master (Flasher) antwortet. Wenn niemand antwortet wird die Applikation ganz normal gestartet. Wenn eine Antwort kommt, wartet der loader auf Daten und Instruktionen vom Master.

Diese Instruktionen können wie folgt sein:

Pagebuffer füllen (PAGE_FILL)

Der loader lädt die empfangenen Daten in einen Buffer, bildet eine crc16 checksumme darüber und schickt dem Master die Checksumme zurück.

Page schreiben (PAGE_COMMIT)

Der Pagebuffer wird an in die vorgegebene Page geschrieben.

Applikation booten (BOOT)

Die Interrupts werden abgeschaltet und dann die Applikation gestartet.


Fehlerbehandlung

Der Microcontroller selbst bildet lediglich eine CRC16 Checksumme der Daten, jedoch nicht, ob der Host (Master) ihm alle Daten schon geschickt hat oder etwa ob die angekommenen Daten korrekt sind.

Diese Aufgabe wird aus Platzgründen (das Ding muss schliesslich unter 2KB bleiben) auf den Host verlegt. Wenn der Host einen CRC16 Fehler entdeckt, schickt er die Daten einfach nochmal.

Natürlich wäre es auch möglich, auf dem Microcontroller auch die Fehlerbehandlung zu erledigen, allerdings würde dies das Protokoll unnötig verkomplizieren und höchstwahrscheinlich die 2KB-Grenze sprengen.


Sicherheit

Der Nakkaloader sichert lediglich die Integrität der Daten so gut es eben mit CRC16 möglich ist. Schutzziele wie Vertraulichkeit oder Authentifikation erfüllt er nicht, weil schlicht der Speicherplatz nicht ausreicht. Ein Grund für den Speicherplatzverbrauch ist, das die RFM12 Library an sich schon ein Kilobyte einnimmt. Sollte jemand eine RFM12 library unter GPL Lizens in assembler parat haben, die deutlich kleiner ist, wäre es z.B. möglich die Blockchiffre Noekeon aus der Crypto-avr-lib zu nehmen.



Quellcode im SVN: microcontroller/src-atmel/rfm12/nakkaloader/