Wie schon erwähnt gibt es einen CAN Bootloader, d.h. die Firmware der Knoten kann Remote ausgetauscht werden. Hierbei wird die neue .hex Datei auf den PI kopiert und von dort mittelt eines Programms (FlashApp) auf den Arduino Nano übertragen. Ist die FlashApp gestartet wartet es auf eine Nachricht vom Bootloader und sendet nach Empfang den neuen Code. Hierbei wird auch die Knotenadresse überprüft, d.h. die FlashApp akzeptiert nur Nachrichten von der beim Start angegebenen Knotenadresse. Damit der Bootloader eine Anforderung macht muss der Arduino einen Reset durchführen. Dies geschieht aktuell durch ein an den entsprechenden Knoten gesandte CAN Nachricht. Eine neuere Version des Sendeprogramms kann diese Reset Nachricht selbst senden, ist aber noch nicht im Einsatz.
Aktuell erfolgt das über ein Script, das einen delayed Reset (die FlashApp braucht einen Moment zum starten) Befehl sendet und dann die FlashAppp startet.
Der Bootloader selbst ist ebenfalls unter PlatformIO erstellt und hier downloadbar. Dieses Zip Archiv enthält meine nötigen Anpassungen für den Bootloader. Der Bootloader selbst stammt von Peter Müller, näheres dazu, als auch die FlashApp gibt es hier.