Die Firmware des CANtact ist dankenswerterweise Open Source, sodass individuelle Änderungen möglicht sind. Allerdings muss eine selbst-compilierte Firmware erstmal in den STM32F042C6-Mikrocontroller eingespielt werden, bevor sie funktionieren kann. Der CANtact bietet im Wesentlichen zwei Möglichkeiten hierfür:
- Über einen externen, an die SWD-Pins angeschlossenen MCU-Debugger
- Über den im MCU ROM vorhandenen USB-Bootloader von ST
Hier wird demonstriert, wie der zweite Weg unter Linux funktioniert.
Zunächst muss das mit „BOOT“ gekennzeichnete Pfostensteckerpaar auf der Platine überbrückt werden. Steckt man danach USB an, identifiziert sich die Platine nicht mehr als CANtact, sondern startet im USB-DFU-Modus:
$ lsusb ... Bus 001 Device 058: ID 0483:df11 STMicroelectronics STM Device in DFU Mode ...
Dann muss am PC die Software dfu-util installiert werden:
sudo apt install dfu-util
Es sollte nun möglich sein, die programmierbaren Speicherbereiche auf dem CANtact auflisten zu lassen:
$ dfu-util --list dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ Found DFU: [0483:df11] ver=2200, devnum=58, cfg=1, intf=0, path="1-1.1.2.4", alt=1, name="@Option Bytes /0x1FFFF800/01*016 e", serial="FFFFFFFEFFFF" Found DFU: [0483:df11] ver=2200, devnum=58, cfg=1, intf=0, path="1-1.1.2.4", alt=0, name="@Internal Flash /0x08000000/032*0001Kg", serial="FFFFFFFEFFFF"
In dieser Anleitung gehe ich davon aus, dass die Firmware bereits erfolgreich compiliert wurde. Daraus resultiert (i.d.R. im Ordner cantact-fw/build/) die Datei CANtact-b0.bin. Diese kann nun in den internen MCU-Flash an dessen Start-Adresse 0x080000000 eingespielt werden:
# sudo dfu-util -d 0483:df11 -a 0 -D cantact-fw/build/CANtact-b0.bin -s 0x08000000 dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ dfu-util: Invalid DFU suffix signature dfu-util: A valid DFU suffix will be required in a future dfu-util release!!! Opening DFU capable USB device... ID 0483:df11 Run-time device DFU version 011a Claiming USB DFU Interface... Setting Alternate Setting #0 ... Determining device status: state = dfuIDLE, status = 0 dfuIDLE, continuing DFU mode device DFU version 011a Device returned transfer size 2048 DfuSe interface name: "Internal Flash " Downloading to address = 0x08000000, size = 14876 Download [=========================] 100% 14876 bytes Download done. File downloaded successfully
Nun wird die „BOOT„-Überbrückung wieder entfernt und das USB-Kabel abgezogen und wieder angesteckt. Danach bootet der CANtact die neue Firmware.
Wer auch normalen PC-Benutzern Rechte zum Firmware-Flashen geben möchte, muss zusätzlich unter /etc/udev/rules.d/ die Datei 49-st-usb-dfu.rules anlegen:
# 0483:df11 - ST's USB DFU bootloader SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666"