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:
    Eleganter ist jedoch der Softwareupdate über den Bootloader. Das Gehäuse muß hierzu nicht geöffnet zu werden. Hierzu ist folgendes zu tun:
    1. 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.
    2. 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.
    3. 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..
    4. Falls zusätzlich noch das EEPROM geschrieben werden soll: update_opendcc_eeprom COM1 starten.
    5. OpenDCC neu einschalten - fertig!
    6. 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.

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.

    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:
  • 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)

Unterlagen

    Hex-File des Bootloaders: Im Downloadverzeichnis zu finden (unterschiedlich je nach CPU). Dieses File muß zur Erstinstallation mit dem ISP-Programmer in den Atmel geladen werden. Bereits adaptierter Source Code hierzu: bootloader.zip (für mega32)

    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)