-
Notifications
You must be signed in to change notification settings - Fork 15
Bootloader Documentation
Important: In order the bootloader to function, the BOOTRST Fuse-Bit hast to be set.
###Starting the bootloader:
- If Contiki is running, press the button 5 sec long
- By holding the button pressed, while plugging the socket In both cases the EEPROM-Flag will be set, which, after the successful flashing, will be again disabled.
###Integrity check of the Flash-memory:
When starting the bootloader, a CRC value over the total memory (except for the boot sector) will be computed and compared with a CRC-value that is already in the EEPROM. The later one is computed and written in the EEPROM after its successful flashing. In case the CRC-values don’t match, the program stays in the bootloader.
###Displaying the bootloader mode:
A blinking red LED will show if the bootloader is running.
###Leaving the bootloader:
If in 30 sec. there is no command to flash the bootloader, it will exit. Thereby, the program will start running at position 0x0000 in the flash memory.
##Flashing:
The flashing can be made through the Linux console application „BootloaderFlasher“. An explanation of the various parameters can be shown by using the parameter “-h”.
###Flashing the USB stick:
The USB stick that has to be flashed, has to be in a bootloader mode. The application “BootloaderFlasher”, with the hex file used for flashing as an input parameter, has to be started on the device, to which the USB stick is connected. The flashing should now follow automatically.
###Flashing the socket:
The socket that has to be flashed has to be shifted to a Bootloader mode. The application “BootloaderFlasher”, has to be started with the parameter “-f”, as well as with the hex file used for flashing. The application should run on the device, to which the USB stick is connected. The USB stick, in return, has to be connected to the socket. The flashing should then follow automatically.
##Einspielen der Bootloader Firmware:
Sollte der Bootloader nicht mehr funktionieren, so muss dieser via JTAG neu geschrieben werden. Dies geht bei Verwendung eines AVR JTAGMKII durch das aufrufen von:
make
make program
in den entsprechenden Verzeichnis firmware/bootloader/Socket/
für die Steckdose und firmware/bootloader/USB/
für den USB-Stick.
Wurde beim schreiben des Bootloaders das EEPROM ausversehen gelöscht so kann es mit dem Kommando:
avrdude -p atmega1284p -P usb -c jtagmkII -U eeprom:w:Bootloader.eep
bzw. für den USB-Stick mit:
avrdude -p at90usb1287 -P usb -c jtagmkII -U eeprom:w:Bootloader.eep
neu gebrannt werden. Wichtig hierbei ist es, die ursprüngliche MAC-Adresse des Geräts im EEPROM-Bereich der Bootloader.c eizutragen.
###Kommunikationsprotokoll USB-Bootloader:
Mit dem USB-Bootloader wird eine serielle Kommunikation über einen virtuellen seriellen Port aufgebaut. Nach dem Starten wartet der Bootloader am seriellen Port auf einen Befehl: Es werden die Befehle e (Bootlader beenden) und p (Bootloader programmieren) angenommen.
Wird der Bootloader mit dem Befehl e beendet, quittiert er das mit dem Hex-Wert 0x06. Danach wird der Bootloader verlassen.
Wird mit dem Befehl p der Programmiermodus gestartet, bestätigt der Bootloader dies mit dem Hexwert 01.
Jetzt erwartet der Bootloader Zeile für Zeile die Daten eines Intel Hexfiles. Jede Zeile muss mit dem Wert ‘:‘ beginnen. Beginnt die Zeile nicht mit diesem Wert wird der Programmiermodus verlassen und der Hexwert 0x00 wird zurückgegeben.
Am Ende jeder Zeile steht eine Prüfsumme, die vom Bootloader geprüft wird.
Stimmt diese, werden die Daten der Zeile auf den Flashspeicher geschrieben und es wird der Hexwert 0x05 zurückgegeben. Dann kann die nächste Zeile übertragen werden.
Stimmt die Prüfsumme nicht, wird der Hexwert 0x06 zurückgegeben. Dann muss die Zeile erneut übertragen werden.
Die letzte Zeile jedes Intel Hexfiles enthält den „End Of File Record“. Sobald diese Zeile übertragen wird, wird der Programmiermodus verlassen und davon ausgegangen, dass ein gültiges Image geschrieben wurde.
###Kommunikationsprotokoll Steckdosen-Bootloader:
Soll eine Steckdose geflasht werden läuft die Kommunikation über die serielle Verbindung mit dem USB-Stick auf die selbe Weise ab, wie wenn sich der USB-Stick im Bootloader-Modus befindet. Allerdings wird das Flashen nicht mit dem Befehl -p eingeleitet, sondern der USB-Stick wird im laufenden Contiki mit dem Befehl -f in den Flash-Modus versetzt. Der USB-Stick befindet sich weiterhin in Contiki, jedoch ignoriert er für die Dauer des Flashens Pakete vom Transceiver, welche nicht von der zu flashenden Steckdose kommen. Außerdem werden keine Statusmeldungen von Contiki über die serielle Verbindung ausgegeben.
Die einzelnen Zeilen des Hex-Files sendet der USB-Stick über den Transceiver an die Steckdose. Diese sendet jeweils ein Paket zurück um die Zeile zu bestätigen oder erneut anzufordern. Das Paket beinhaltet den Hexwert 0x06 wenn er die Zeile erneut gesendet haben möchte oder 0x05 wenn die nächste Zeile gesendet werden soll.
Die Steckdose generiert beim Start im im Bootloader einen 2-Byte großen zufälligen Wert, welcher beim Flashen in jedem Paket an den USB-Stick mitgesendet wird. Nachdem der USB-Stick den Wert das erste Mal bekommen hat, sendet auch er den Wert in jedem Paket mit. So wird sichergestellt, dass nicht ein zufällig gleichzeitig ablaufender Flashvorgang diesen Flashvorgang stört.