Autor: W.Büscher, MKT Systemtechnik .
Stand: 2017-03-15 (ISO8601, YYYY-MM-DD)
-
Einleitung
-
Bedienung
-
Sonderfunktionen
-
Firmware-Update per CANopen
-
Weiterführende Informationen
Dieses Dokument beschreibt die seit April 2005 in MKT's
CAN-Tester für Windows enthaltene Zusatzfunktion
zum Übertragen der Firmware per CAN-Bus.
Achtung: Nicht für aus mehreren Teilen bestehende, mit Keil C51
übersetzte Firmware (mit "Code-Banking") geeignet !
Nur für Geräte mit 16- oder 32-Bit-CPU !
Weil die meisten Geräte von MKT immer 500 kBit/Sekunde als
CAN-Baudrate für den Bootloader verwenden (auch wenn die
Applikation mit einer anderen Baudrate arbeitet), müssen Sie
vor dem Aufruf des Firmware-Update-Utilities sicherstellen, daß die
CAN-Baudrate im CAN-Tester auf 500 kBit/Sekunde eingestellt ist. Siehe Handbuch
CAN-Tester, Kapitel "Konfiguration".
Abhängig vom zu programmierenden Gerät muss zwischen Update per CAN (ohne CANopen)
und Update per CANopen unterschieden werden. Seit März 2017 wird z.B.
der CANopen-Buskoppler (IO16-BCCO) als 'Brücke' zwischen CAN/CANopen und den
dort angeschlossenen Erweiterungsmodulen ("I/O-Klemmen") verwendet, um die
Firmware in allen Slaves zu aktualisieren. Der CAN-Tester erstellt bei Geräten
mit CANopen daher zunächst eine Liste aller am Buskoppler angeschlossenen Module.
Dazu muss das Bootloader-Protokoll gegebenenfalls im Firmware-Update-Utility umgestellt werden.
Öffnen Sie dazu zunächst das Fenster des 'Firmware Update Tools' im Hauptmenü des CAN-Testers:
Tools .. Firmware Update...
Dieser Menüpunkt zeigt auch an, ob das Programmiertool momentan für Geräte mit oder ohne CANopen
konfiguriert ist ("Firmware Update via CAN" oder "Firmware Update via CANopen"). Dies kann ggf. im
Firmware-Update-Tool umgestellt werden. Die Einstellung wird dauerhaft in einer Konfigurationsdatei
des CAN-Testers abgespeichert.
- für Geräte mit CANopen (z.B. Buskoppler Typ "IO16-BCCO"):
- Im 'Firmware Update Tool' per Button "More".."Bootloader Protocol".."CANopen, object 5FEx" anwählen.
- für Geräte ohne CANopen (z.B. MKT-View & Co):
- Im 'Firmware Update Tool' per Button "More".."Bootloader Protocol".."Raw CAN, not CANopen" anwählen.
Zum Starten des im CAN-Tester eingebauten Firmware-Update-Utilities:
-
Die Verbindung mit dem zu programmierenden Gerät per CAN-Bus
herstellen
(Beim Einschalten des zu programmierenden Gerätes die Tasten zur Aktivierung
des Bootloaders gedrückt halten, i.A. die "erste" und "dritte"
Funktionstaste. Details sind dem Handbuch des zu programmierenden Gerätes
zu entnehmen.
Bei Geräten, die per CANopen "im laufenden Betrieb" aktualisiert werden, entfällt dieser Schritt).
-
Im Hauptmenü des CAN-Testers "Tools" (="Werkzeuge") anwählen, dann
"Firmware-Update via CAN".
-
Warten, bis die Verbindung aufgebaut wurde (und sich die Statuszeile grün
färbt).
Bleibt die Statuszeile gelb, oder wird rot, gibt es ein Problem mit dem CAN-Bus
(Abschlusswiderstände ? Baudrate ? Falscher CAN-Port ? Fehlerhaft
installierte CAN-Treiber-Software ? .... )
-
Nur bei 'Kombi-Geräten' mit CANopen, z.B. Buskoppler mit installierten Klemm-Modulen:
In der Auswahlliste unter 'Detected Devices' das zu aktualisierende Gerät anwählen,
z.B. "Coupler" (Buskoppler) oder den ersten "Slave" eines bestimmten Typs.
Abhängig von dessen Sortware-Artikel-Nummer wird für den im nächsten Schritt folgenden
Datei-Auswahl-Dialog ein entsprechendes Auswahlfilter gesetzt, z.B. art11563_*.hex,
wenn das in der Liste angewählte Gerät eine Firmware mit der Software-Artikel-Nummer 11563 enthält.
-
Die Firmware auswählen ("Load", dann die gewünschte HEX- oder BI2-Datei laden).
-
Auf der Registerkarte "Firmware Info" kontrollieren, ob die geladene Datei
sich wirklich für die angeschlossene Hardware eignet.
Erkennbar ist dies anhand des Firmware-Titels (z.B. "UPT-Handheld"), der
Software-Artikel-Nummer (z.B. 11105), und ggf. des Compilationsdatums. Im
Zweifelsfall anhand der Fertigungsliste / Software-Artikel-Liste kontrollieren,
welche Firmware (Art.-Nr.) geladen werden muss !
Anwender eines der 'UPT-Programmiertools' finden die Firmwware, und weitere
Informationen dazu im Unterverzeichnis 'firmware' in der Datei 'readme.txt'.
-
Die Firmware ins Zielsystem schicken ("Send").
Falls der "Send"-Button noch grau dargestellt ist, konnte noch kein Kontakt
zum Zielsystem aufgebaut werden. In diesem Fall die Kabel überprüfen,
auch den CAN-Abschlußwiderstand nicht vergessen ! Falls das Zielsystem
ein Bedienterminal ist, muss dort im Display eine Meldung des Bootloaders
stehen, z.B. "Boot V3 - Expect Download - 500 KBIT/SEC". Ist dies nicht der
Fall, das Terminal aus- und wieder einschalten, und nochmal versuchen den
Bootloader zu aktivieren.
-
Warten bis die Übertragung beendet ist (kann einige wenige Minuten dauern
!)
-
Das Fenster des Firmware-Update-Utilities wieder schließen ("Close")
Mit dem Button "MORE" kann ein Menü geöffnet werden, in dem weitere,
für den "normalen" Einsatz nicht benötigte Funktionen zur
Verfügung stehen. Dies sind:
-
Verify
-
Vergleicht den Pufferinhalt mit dem Inhalt des FLASH-Speichers. Nur
verfügbar, wenn die CAN-Bus-Verbindung aufgebaut ist, und wenn schon
eine HEX-Datei in den Puffer geladen wurde.
-
Read
-
Liest den Inhalt des FLASH-Bausteins per CAN-Bus aus, und legt die Daten
(i.A. "Firmware") im Puffer ab. Auch die Anzeige der
"Software-Informations-Struktur" wird nach dem Auslesen aktualisiert; man
kann also kontrollieren, welche Firmware in ein Gerät geladen wurde,
wann diese compiliert wurde, und so weiter. Funktioniert natürlich nur,
wenn die Firmware einen solchen Eintrag hat !
-
Patch
-
Überprüft den Pufferinhalt, und führt gegebenenfalls kleine
Änderungen am Pufferinhalt durch. Dazu zählen:
-
beim LPC2xxx (ARM7-Mikrocontroller von Philips
bzw NXP): Korrektur der Prüfsumme in der Vektortabelle, die von
Keil-Compiler/Linker nicht korrekt gesetzt wird (was dazu führt, dass
der im LPC fest eingebaute IAP-Bootloader die per CAN geladene Firmware nicht
startet).
Details im Internet: Suche nach "ULINK: VECTOR CHECKSUM FOR NXP LPC2000"
!
Ob es sich bei der geladenen Firmware wirklich um ein ARM7-Programm handelt,
erkennt das Utility anhand des "characteristischen" Inhaltes der Vektortabelle
(Sprungbefehle an Adresse 0, mit Opcode 0xE59Fxxxx oder 0xE51Fxxxx).
-
Send magic number or password
-
Diese Sonderfunktion wird nur benötigt, wenn z.B. der CAN-Bootloader
per CAN-Bootloader aktualisiert werden soll. Dazu muss dem (alten) Bootloader
erst ein bestimmtes Passwort gesendet werden (welches dem normalen" Anwender
nicht bekannt sein dürfte). Für MKT's CAN-Bootloader ist dies eine
8-ziffrige Hex-Zahl, die mit 44... beginnt.
Seit 2013 vergleicht das Bootloader-Utility die Software-Artikel-Nummer des Bootloaders
im zu programmierenden Gerät mit dem von der zu ladenden Firmware erwarteten Wert.
Dadurch soll sichergestellt werden, dass der Anwender nicht eine 'falsche'
Firmware in das momentan angeschlossene Gerät lädt (bei Geräten mit
LPC1788 hat dies den unangenehmen Effekt, dass das Gerät danach zur Reparatur
an den Hersteller eingeschickt werden muss).
Um für Sonderzwecke trotzdem eine 'andere' Firmware laden zu können,
muss mit dieser Sonderfunktion vorher ein spezielles (und eventuell hardwareabhängiges)
Passwort gesendet werden.
-
Send sector, shifted address
-
Diese Sonderfunktion wird ebenfalls benötigt, wenn z.B. der CAN-Bootloader
per CAN-Bootloader aktualisiert werden soll. Mit dieser Funktion kann ein
bestimmter Sektor (z.B. der "Bootsektor" im FLASH) mit Daten aus dem Puffer
geladen werden, deren Adresse bei der Übertragung verschoben werden
(shifted address). Beispiel:
In einigen Geräten mit Mikrocontrollern vom Typ C167 befindet sich der
CAN-Bootloader in FLASH-Sektor 1 (EINS). In der vom Linker/Locator erzeugte
Datei beginnt der Bootloader-Code aber an Adresse Null (aus Sicht der CPU).
Bei der Übertragung mit der Funktion "Send Sector, Shifted Address"
muss daher die Sektornummer auf 1 gesetzt werden, die Puffer-Quell-Adresse
aber auf Null (vorher muss natürlich die passende Bootloader-Firmware-Datei
geladen werden).
-
Save buffer as binary file
-
Mit dieser Sonderfunktion kann der Inhalt des Firmware-Puffers als
Binärfile abgespeichert werden (*.bin, nicht *.hex ! ) .
Dabei können Start- und Endadresse frei definiert werden. Per Default
wird nur der belegte Teil des Puffers abgespeichert.
Tipp: Die so erzeugten Binärfiles können (bei manchen Geräten)
auch auf eine Speicherkarte kopiert werden, um den Firmware-Update statt
per CAN-Bus per Speicherkarte durchzuführen. Der in den meisten
Geräten eingebaute CAN-Bootloader erlaubt -wenn überhaupt- nur
das Laden der Firmware aus Binärfiles, nicht aus HEX-Files.
-
Load buffer from binary file
-
Mit dieser Sonderfunktion können beliebige Teile des Firmware-Puffers
aus einer Binärdatei geladen werden. Dabei kann die Zieladresse im Puffer
beliebig verschoben werden. Daher eignet sich diese Funktion auch zum "Patchen"
von Firmware-Dateien, z.B. wenn eine Signatur / Seriennummer oder dergleichen
ersetzt werden soll.
Um sowohl die Firmware im "CANopen-Buskoppler" als auch in den am Buskoppler angeschlossenen Klemm-Modulen (IBUS-Slaves)
per CANopen zu aktualisieren, kann seit V1.64 das vom Firmware-Updater verwendete Übertragungsprotokoll
wie im folgenden Screenshot umgeschaltet werden:
Screenshot des 'Firmware Update Tools' im CAN-Bus-Tester.
Der CANopen-Node-Identifier des zu programmierenden Gerätes kann ggf. im Hauptmenü des CAN-Testers unter 'Tools'..'SDO Client' geändert werden.
Bei erfolgreichem Verbindungsaufbau liest das Firmware-Update-Tool zunächst eine Liste der am Buskoppler installierten Klemm-Module aus.
Diese werden tabellarisch aufgelistet, zusammen mit Software-Artikelnummer und Versionsstand (Kompilationsdatum der Firmware in allen Modulen).
Wurde bereits eine Firmware-Datei in den Speicher des CAN-Testers geladen, wird in der Tabellenspalte 'Status' angezeigt,
ob die im Gerät vorhandene Firmware aktuell oder veraltet ist ('outdated').
Per CANopen ausgelesene Firmware-Information, auch für Slave-Module
Um die Firmware des Buskopplers oder eines der am Buskoppler angeschlossenen Module zu aktualisieren,
wird zunächst die entsprechende Zeile per Mausklick in der Tabelle markiert.
Der CAN-Bus-Tester "kennt" nun die Software-Artikel-Nummer des zu programmierenden Moduls,
und verwendet eine entsprechende Suchmaske im per "Load"-Button zu öffnenden Datei-Auswahl-Dialog.
Die Gefahr einer Fehlbedienung wird dadurch minimiert aber nicht eliminiert.
Auswahl einer für das in der Tabelle markierte Gerät passenden Firmware
Zum Übertragen der geladenen Datei in den Flash-Speicher des Zielsystems dient auch hier der "Send"-Button (wie beim Firmware-Update ohne CANopen).
Bedeutung der Spalten in der Tabelle auf Registerkarte 'Detected Devices':
- Device
Typ des erkannten Gerätes (bei Verbundgeräten mit Buskoppler und 'Slave'-Modulen ohne eigenes CAN-Interface)
- SW art-nr
Software-Artikelnummer. Muss unbedingt zur geladenen Datei passen (falls ein Firmware-Update für dieses Modul erfolgen soll)
- Title / description / options
Aus dem Gerät ausgelesene Zeichenkette mit der Gerätebezeichnung, CPU-Typ, und eventuell vorhandenen Optionen
- Compilation date
Aus em Gerät ausgelesenes Kompilationsdatum der Firmware. Hilft bei der Entscheidung, ob ein Firmware-Update nötig ist.
- Status
Wird aktualisiert, wenn für dieses Gerät eine passende Firmware-Update-Datei in den Speicher des PCs geladen wurde.
Mögliche Anzeigen:
up to date : kein Update nötig (anhand des Vergleichs von Kompilationsdatum im Gerät und in der Datei.
outdated : Update nötig (da die Firmware im Gerät älter ist als die Datei im Speicher des PCs.
force update : Update wird durchgeführt, obwohl das Kompilationsdatum identisch ist (per Doppelklick umschaltbar).
-
Details zum Bootloader für LPC2xxx / ARM-7, Konfiguration von uVision3
zum Erzeugen eines bootloader-geeigneten HEX-Files:
-
\drivers1\Doku\LPC24_Code_Segments.pdf
(Link funktioniert nur auf dem Rechner des SW-Entwicklers..)
-
Details zur Implementierung des CAN-Bootloaders auf LPC2468 (u.Ä.):
-
\cproj\boot_v4\readme_lpc2468_smart_loader.txt
(Link funktioniert nur ... " " " )
-