CANopen Bootloader Node-ID

CANopen-Geräte benötigen eine Knotennummer – die CANopen Node-ID – im Wertebereich von 1 bis 127. Diese CANopen Node-ID kann entweder statisch festgelegt oder beispielsweise aus Drehcodierschaltern abgeleitet werden. Darüber hinaus gibt es bei CANopen die Möglichkeit die CANopen Node-ID dynamisch über LSS zu vergeben.

Besitzt ein CANopen-Geräte einen CANopen Bootloader, so stellt sich oft die Frage, welche Knotennummer die der Bootloader verwenden sollte. Dazu gibt es mehrere unterschiedliche Ansätze, welche nachfolgend erörtert werden sollen.

CANopen-Node-ID der Applikation

In diesem Fall soll der CANopen-Bootloader, die gleiche Knotennummer wie die Applikation besitzen. Je nach Implementierung sind auch hier verschiedene Fälle zu unterscheiden. Hat die Applikation eine feste Knotennummer, so könnte man diese auch in den Bootloader einkompiliert. Besser ist es jedoch, dass der Bootloader die Knotennummer von einer definierten Speicherstelle im Nichtflüchtigen Speicher liest, welche ggf. von der Applikation oder einmal beim Firmware-Update geändert werden kann.
Hat die Applikation die Möglichkeit die Knotennummer über einen Drehcodier- oder DIP-Schalter einzustellen, so müsste der Bootloader denselben Code implementieren, so dass dieser die gleiche Knotennummer der Applikation erhält.

Dynamische Knotennummervergabe mit LSS

Es gibt Bootloader, welche das LSS-Protokoll beherschen, so dass die Knotennummer damit eingestellt werden kann. In CiA 443 für CANopen-Sensoren in der Öl- und Gas-Industrie ist dies beispielsweise vorgeschrieben. Dieser Ansatz hat jedoch mehrere Nachteile. Zum einen wird die Codegröße des Bootloaders oft recht groß, da dass LSS-Protokoll implementiert werden muss. Darüber hinaus ergeben sich oft praktische Fragen, ob z.B. die Applikation und der Bootloader die gleiche LSS-Adresse (Objekt 0x1018) haben sollen und welche LSS-Adresse, der Bootloader haben soll, wenn keine Applikation vorhanden ist.

Feste Knotennummer für CANopen Bootloader

Einige CANopen Applikationsprofile wie z.B. CiA 417 für Aufzugsanlagen und CiA 454 für Leichtelektrofahrzeuge definieren eine feste Knotennummer für den Bootloader. In den beiden genannten Profilen ist es die CANopen Node-ID 126. Bei diesem Verfahren darf sich jedoch nur ein Gerät pro Netzwerk im Bootloader befinden. Bei einer festen Knotennummer im Bootloader reduziert sich die Komplexität im Bootloader und z.B. über ein „NMT Reset Communication“-Kommando, kann man leicht feststellen, ob einer der Knoten im Bootloader ist. Die feste Knotennummer ist auch nutzbar, wenn keine Applikation auf dem Bootloader läuft.

Backdoor

Als Backdoor wird oft ein Verfahren beschrieben, welches es ermöglicht trotz gültiger Applikatiom im Bootloader zu bleiben. Da gibt es keine standardisierten Wege und oft werden die Hintertüren in den CANopen-Bootloadern auch nicht veröffentlicht. Wenn man dabei auf CANopen-Kommandos setzt, so benötigt man auch eine Knotennummer. Ein andere Ansatz wäre die Nutzung einer proprietären CAN-Nachricht mit definierter CAN-ID, welche jedoch nicht von CANopen genutzt wird. Über diesen Weg kann man auch die 8 Byte der CAN-Nachricht nutzen um ggf. das Gerät anhand eines definierten Merkmals (z.B. Produktcode+Seriennummer) einzeln zu identifizieren. Dennoch ist die Implementierung einer Hintertür auch mit einem erhöhten Sicherheitrisiko hinsichtlich unberechtigtem Zugriff auf den Bootloader verbunden.

Unabhängig von der Knotennummervergabe sollten die Geräte einzeln geupdated werden, damit bei Problemen nicht alle Geräte im gelöschten Zustand sind und dadurch der Aufwand für die Behebung größer wird.