AVR Ethersex Bootloader

Aus Wiki
Zur Navigation springen Zur Suche springen

Einführung Bootloader

Mittels Bootloader ist es möglich, die ethersex Firmware via Netzwerk in das AVR Net-IO zu übertragen. Es ist lediglich einmalig ein ISP-Programmer erforderlich, um den Bootloader in den AVR Controller zu übertragen. Anschließend kann sich der Bootloader das Firmware-Image beim Einschalten, oder auf Kommando von einem sog. TFTP-Server holen. Dies hat den großen Vorteil, dass das Gehäuse zum Firmware Update nicht geöffnet werden muss, um den ISP-Programmer anzustecken. Voraussetzung:

  • TFTP-Server auf einem PC bzw. Server im Netzwerk ist installiert
  • TFTP-Client auf dem PC, mit dem ethersex compiliert wird

Bootloader konfigurieren

Der Bootloader wird analog zum "normalen" ethersex konfiguriert. Um die ethersex-Konfiguration zu behalten, empfiehlt es sich ein Backup der Konfigurationsdatei anzulegen:

cd ~/Dokumente/ethersex
cp .config config_steckdose

Ändern der Konfiguration für den Bootloader (nur die folgenden zusätzlichen Optionen selektieren, damit der bootloader nicht zu groß wird - es stehen lediglich 8KB Flashspeicher für den Bootloader zur Verfügung):

make menuconfig
|-Load a Default Configuration
|   |-Ethernet Bootloader selektieren
|-Network
|   |-Hostname: beliebig - z.B. Steckdose
|   |-BOOTP (DHCP like) support DESELEKTIEREN, damit die IP-Adresse und der TFTP-Server eingestellt werden können
|   |-Ethernet (ENC28J60) support
|   |   |-MAC address: Die selbe wie auf dem AVR NET-IO abgedruckt ist
|   |   |-Etherrape IP address: Gewünschte IP-Adresse: IP_NETIO'
|   |   |-Netmask: 255.255.255.0
|-Applications
|   |-TFTP Support
|   |-Bootloader configuration
|   |   |-TFTP-o-matic
|   |   |   |-TFTP IP-adress: IP-Adresse des TFTP-Servers: IP_TFTP
|   |   |   |-TFTP Image to load: steckdose.bin

Nach dem Aktivieren aller Optionen, das Konfigprogramm mit Exit verlassen und die Änderungen abspeichern.


Bootloader compilieren

make fullclean
make all


Bootloader auf Net-IO übertragen

Nach dem erfolgreichen compilieren liegt im ethersex-Verzeichnis das HEX-File des Bootloaders ethersex.hex dieses wie unter Programmer beschrieben auf den AVR-Controller des AVR Net-IO übertragen.

avrdude -c <PROGRAMMER> -P <PORT> -p atmega644  -U ethersex.hex
Bulbgraph.png Hinweis:
Die beiden Parameter <PROGRAMMER> und <PORT> wie unter Programmer beschrieben einsetzen.

bzw. mit

make download


Lockbits anpassen

Damit der Bootloader nicht versehentlich durch ein zu großes Image überschrieben wird, sollten die Lockbits folgendermaßen auf Bootloader Protection Mode 3 gesetzt werden.

avrdude -c <PROGRAMMER> -P <PORT> -p atmega644  -U lock:w:0x0F:m
Bulbgraph.png Hinweis:
Die beiden Parameter <PROGRAMMER> und <PORT> wie unter Programmer beschrieben einsetzen.


Fuses anpassen

Damit der Bootloader nach dem Power On bzw. Reset auch angesprungen wird, muss noch zusätzlich die BOTRST Fuese gesetzt werden. Weitere Details zu den AVR Fuses → siehe auch hier. Folgende Fuses werden benötigt: BODLEVEL=4,3V, OCDEN=1, JTAGEN=1, SPIEN=0, WDTON=1, EESAVE=0, BOOTSZ=4096 Words, BOOTRST=0, CKDIV8=1, CKOUT=1, Ext. Crystal Oscillator (16k CK + 65ms)

avrdude -c <PROGRAMMER> -P <PORT> -p ATMega644  -U efuse:w:0xFC:m -U lfuse:w:0xFF:m -U hfuse:w:0xD0:m


Kofiguration wieder herstellen

  • Bootloader Konfiguartion sichern, falls diese später erneut gebraucht wird:
cp .config config_bootloader
  • Operationelle Ethersex Konfiguration wieder herstellen:
cp config_steckdose .config


Firmware via Bootloader flashen

Nach dem Übertragen des Bootloaders wurde die operationelle ethersex Firmware wieder gelöscht. Diese kann nun via Bootloader erneut übertragen werden

  • Neu compilieren:
make fullclean
make
  • Beobachten des Logfiles auf dem TFTP-Server (Achtung: diese Zeile auf dem TFTP-Server ausführen, nicht am lokalen Linux-PC):
tail -f /var/log/atftpd.log
  • Bereitstellen der operationellen Firmware (steckdose.bin) auf dem TFTP-Server
atftp --put -l ethersex.bin -r steckdose.bin IP_TFTP
Im TFTP-Logfile sollte folgender Eintrag erscheinen:
Fetching from IP_CLIENT to steckdose.bin
  • Flashen via Bootloader:
    • Stromversorgung zum AVR Net-IO kurz unterbrechen und wiederherstellen.
    • Im TFTP-Log sollte nach einigen Sekunden folgender Eintrag erscheinen:
Serving steckdose.bin to IP_NETIO
  • Funktionstest, wie → hier beschrieben, durchführen.


Analog zum make download (siehe auch hier) kann auch das Übertragen via Bootloader vereinfacht werden:

gedit ~/Dokumente/ethersex/config.mk

Folgende Zeilen einfügen:

bootload: ethersex.hex
	atftp --put -l ethersex.bin -r steckdose.bin IP_TFTP
	echo "bootloader"|nc IP_NETIO -q 1 2701
Warning.png Achtung:
Vor atftp und echo MUSS unbedingt ein TAB-Zeichen eingegeben werden. Ansonsten kommt es zu Fehlermeldungen


Übertragen via Bootloader:

make bootload