OpenDCC, Details zur Software, Updateverfahren
Details zur Software, Update der Software
- OpenDCC kann mit unterschiedlicher Software geladen werden. Hier ist
beschreiben, wie die Software im Gerät "upgedated" (wunderbares Denglisch)
werden kann. Keine Angst, das ist nicht so kompliziert, wie es auf dem ersten Blick aussieht.
- Reprogrammierung:
Selbstverständlich kann man in jeder Situation auch die beim Bau von OpenDCC benutzten Bootverfahren wie z.B. Ponyprog benutzen.
- Bootloader:
- Vor dem Einschalten von OpenDCC die STOP-Taste drücken und während dem Einschalten gedrückt halten. Statt der normalen Betriebsart wird nun ein Bootloader gestartet (erkennbar an der dauerleuchtenden CTRL-LED), welcher nun auf eine neue Software vom PC wartet und diese im Programmspeicher hinterlegt.
- für OpenDCC (Atmega32): update_opendcc.bat, update_opendcc_eeprom.bat, opendcc.hex, opendcc.eep, Atmega32.xml und avrosp.exe (siehe unten) in ein (beliebiges) Verzeichnis kopieren und aus der Eingabeaufforderung update_opendcc COM1 (bzw. mit der richtigen Portnummer) starten. Wichtig: COM1 groß schreiben! Es erfolgt nun der Update des Programmes.
- für OpenDCC_XP (Atmega644P): update_opendcc.bat, update_opendcc_eeprom.bat, opendcc_xp.hex, opendcc_xp.eep, Atmega644p.xml und avrosp.exe (siehe unten) in ein (beliebiges) Verzeichnis kopieren und aus der Eingabeaufforderung update_opendcc COM1 (bzw. mit der richtigen Portnummer) starten. Wichtig: COM1 groß schreiben! Es erfolgt nun der Update des Programmes..
- Falls zusätzlich noch das EEPROM geschrieben werden soll: update_opendcc_eeprom COM1 starten.
- OpenDCC neu einschalten - fertig!
- Wenn OpenDCC über USB angeschlossen ist,
dann einfach die Portnummer des virtuellen Ports verwenden.
(Hinweis: Der USB-Treiber zu OpenDCC gibt sich gegenüber dem Betriebssystem als serielle Schnittstelle aus, je nach Ausstattung und Vorgeschichte wird dieser Schnittstelle dann von Betriebssystem eine Nummer zugeteilt - z.B. COM8. Die Nummer kann sich ändern, wenn ein anderer USB-Port verwendet wird.
Die aktuelle vergebene Nummer findet man über den Gerätemanager heraus - OpenDCC sollte dort korrekt eingetragen sein.
Achtung: avrosp unterstützt nur COM1 bis COM8. Wenn die Zentrale einer höheren Nummer zugeordnet ist, dann muß man das vorher im Gerätemanager ändern.
Eleganter ist jedoch der Softwareupdate über den Bootloader. Das Gehäuse muß hierzu nicht geöffnet zu werden. Hierzu ist folgendes zu tun:
PC-Programme zum Ansteuern des Bootloaders
-
Auf der PC-Seite muß ein Programm geladen werden, das mit dem Bootloader reden kann. Hier gibt
es mehrere Möglichkeiten:
- avrosp:
Dieses Tool verwende ich. Es ist bei der AppNote AVR911 dabei, der Aufruf sieht wie folgt aus:
avrosp -dATmega32 -e -pf -vf -ifopendcc.hex -cCOM3
Die Baudrate des Ports muß vorher richtig eingestellt sein:
mode com3 baud=19200 parity=n data=8 - avrdude:
Dieses Tool ist bei WinAVR dabei, der Aufruf sieht wie folgt aus:
avrdude -c avr910 -p m32 -P com3 -U flash:w:opendcc.hex -b 19200 - Menüpunkt Tools in AVR Studio; ev. muß vorher in Options die Zahl der "Number of Comports to try" erhöht werden.
Funktionsweise
-
Der Bootloader ist ein separates Programm, welches ganz an das Ende
des Speichers geladen wird. Durch entsprechendes Programmieren
der Konfigurationsbits (sog. Fuses) wird nun der AVR angewiesen,
beim Reset zuerst den Bootloader anzuspringen. Dieser prüft die
Stoptaste ab und springt auf den normalen Resetvektor 0x0000, wenn
die Taste nicht gedrückt ist. Nähere Information finden sich bei Atmel in den
Application Notes AVR109 und AVR911; Auf www.atmel.com darf
man jedoch nicht nach diesen App-Notes suchen, sondern muß über das Menu zu den App-Notes
navigieren, dann kann man die entsprechenden Quellen runterladen.
- BOOTRST = 0 (0=programmed): damit springt der ATmega nicht nach 0x0000, sondern auf den Bootloader;
- BOOTSZ1 = 0 und BOOTSZ0 = 1: damit wird die Größe des Bootloaders festgelegt.
Diese Einstellung bedeutet 1kWorte, d.h. der Bereich 0x0000 bis 0x3BFF ist für die
Applikation (93,5%), der Bereich 0x3C00 bis 0x3FFF ist für den Loader.
(Beide Bits = 0 würden 2kWorte bedeuten, d.h. der Bereich 0x0000 bis 0x37FF ist für die Applikation, der Bereich 0x3800 bis 0x3FFF ist für den Loader.) - BASEADDR = 0x7800: Diese Anweisung im Makefile des Bootloaders sorgt dafür, das dieser auch an richtige Stelle geladen wird. (Hinweis: der Linker rechnet in Bytes, also: 0x7800 = 2*0x3C00)(für Atmeag644P: 0xF800)
Um den Bootloader für OpenDCC zu erzeugen, müssen die geladenen Quellfiles angepasst werden. Hierzu ist das file preprocessor.xls zu öffnen und die Einstellungen gemäß Anleitung durchzuführen. Danach kann man den Bootloader mit "make" übersetzen. Unten ist der Download für ein bereits angepassten Bootloader.
Hinweise:
Das makefile nicht mit einem Editor bearbeiten, welcher TABs durch BLANKs ersetzt.
Der Linker rechnet in Bytes, d.h. hier wird die doppelte Zahl wie bei den Fuses eingetragen. Der make sieht nicht in Sourcefiles hinein, nach einem Update von defines.h muß man die *.c-files 'touchen'.
Damit der Bootloader auch angesprungen wird, sind diese Fuses und Einstellungen zu setzen:
Unterlagen
- Hex-File des Bootloaders: bootloader.hex
Dieses File muß zur Erstinstallation mit dem
ISP-Programmer in den Atmel geladen werden.
Bereits adaptierter Source Code hierzu: bootloader.zip
Tool zum Programm und EEPROM-Update von Atmel: AVROSP.EXE
Batch zum Programm-Update: update_opendcc.bat (falls *.bat nicht abrufbar: zip-file)
Hinweis: Einfach opendcc.hex, opendcc.eep, avrosp.exe und diesen Batch in ein Verzeichnis kopieren und den Batch starten. Der Batch erledigt auch die Einstellung des COM-Ports.
Um einen Batch zu starten, muß man die Eingabeaufforderung bemühen: Leider steht diese nach dem Start auf dem 'home'-Verzeichnis. Einfacher geht es, wenn man dem Kontextmenu des Explorers das Starten der Eingabeaufforderung beibringt. Hier steht, wie es geht.
Batch zum EEPROM-Update: update_opendcc_eeprom.bat (falls *.bat nicht abrufbar: zip-file)
-
external link:
AVR Butterfly Bootloader