Dies ist das zweite Video zu meiner Klipper CAN Reihe. In diesem Video erkläre ich euch wie USB Bus Koppler funktionieren und wie man sie einrichtet. Zudem wird erklärt, wie ihr neue Firmware kompilieren könnt und wie ihr beim U2C / UTOC Board die extra “USB”-Hardware verwenden könnt.
Auswahl einer Liste mit verfügbaren USB Buskopplern
make nucleo_g0b1re_fw
Auch normale Druckerboard oder Kopfboards können als USB Koppler verwendet werden. Wichtig ist dabei folgendes:
Ein EBB36 oder EBB42 kann also recht problemlos dafür verwendet werden, um einen USB Bus Koppler zu ersetzen - auch wenn dabei natürlich eine Menge Funktionen von dem Board ungenutzt bleiben.
Das ganze funktioniert deshalb, weil Klipper in dem Fall als USB to CAN bus bridge eingesetzt wird.
tail -f /var/log/kern.log
pi@TestPi:~ $ tail -f /var/log/kern.log Apr 30 10:38:51 TestPi kernel: [ 7313.123004] usb 1-1.4: new full-speed USB device number 7 using dwc_otg Apr 30 10:38:51 TestPi kernel: [ 7313.256404] usb 1-1.4: New USB device found, idVendor=1d50, idProduct=606f, bcdDevice= 0.00 Apr 30 10:38:51 TestPi kernel: [ 7313.256442] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 Apr 30 10:38:51 TestPi kernel: [ 7313.256458] usb 1-1.4: Product: candleLight USB to CAN adapter Apr 30 10:38:51 TestPi kernel: [ 7313.256471] usb 1-1.4: Manufacturer: bytewerk Apr 30 10:38:51 TestPi kernel: [ 7313.256483] usb 1-1.4: SerialNumber: 0050004A5542501720393839 Apr 30 10:38:51 TestPi kernel: [ 7313.258646] gs_usb 1-1.4:1.0: Configuring for 1 interfaces
sudo dmesg -Wtd
aufrufen und Gerät per USB anstecken und lsusb
liefert einen CAN Adapter: pi@TestPi:~ $ lsusb
Bus 001 Device 007: ID 1d50:606f OpenMoko, Inc. Geschwister Schneider CAN adapter
Damit der Adapter im Betriebsystem auch erkannt wird muss eine Netzwerk Interface Konfiguration (/etc/network/interfaces.d/can0
) angelegt werden.
sudo nano /etc/network/interfaces.d/can0
auto can0 iface can0 can static bitrate 500000 up ifconfig $IFACE txqueuelen 1024
sudo reboot
ip a
ein CAN Interface listen : can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 1024 link/can
“txqueuelen” ist eine Einstellung für die Übertragungswarteschlange (englisch: Transmission Queue Length) eines Netzwerkinterfaces in Linux-basierten Betriebssystemen.
Die txqueuelen-Einstellung bestimmt die maximale Anzahl von ausgehenden Netzwerkpaketen, die in der Warteschlange des Interfaces gespeichert werden können, bevor sie tatsächlich übertragen werden. Eine höhere txqueuelen-Einstellung kann die Leistung des Netzwerkinterfaces verbessern, indem sie die Übertragung von Paketen beschleunigt, insbesondere bei hoher Netzwerklast. Allerdings kann eine zu hohe txqueuelen-Einstellung auch zu einer höheren Latenzzeit und zu einem erhöhten Speicherbedarf führen. Die optimale Einstellung hängt von den spezifischen Anforderungen des Netzwerks und der Anwendung ab, die das Interface nutzt.
Die Angaben zu txqueuelen variieren von Anleitung zu Anleitung. Oft finden sich Werte im Bereich von 256-1024. Viel höher sollte man sicher auch nicht gehen.
Wenn der USB Stecker vom Buskoppler abgezogen wird, geht der CAN Bus sofort offline. Mittels ip a
ist er dann auch nicht mehr sichtbar. Um nicht immer das ganze System neu zu starten kann nach dem erneuten Verbinden des Buskopplers folgender Befehl genutzt werden:
sudo systemctl restart networking.service
Als Firmware für die USB Bus Koppler kann entweder candleLight oder Klipper (USB to CAN bus bridge) eingesetzt werden. Grundsätzlich würde ich eher auf die candleLight Version gehen. Denn die ist speziell für den Einsatz als USB Bus Koppler entwickelt worden. Zudem unterstützt sie (Stand Mai 2023) auch mehr Hardware als Klipper.
Ein weiterer Nachteil von Klipper sind nötige Firmware Updates. Es kommt von Zeit zu Zeit vor das ein Klipper Update relevant ist. Dann müsste auch der Buskoppler wieder mit einer Klipper Firmware upgedatet werden.
Ein Nachteil bei candleLight ist derzeit das es zwei Versionen gibt. Eine für den STM32F072 und eine für den STM32G0B1. Es gibt Bestrebungen diese beiden Versionen zusammenzuführen, aber wann das genau passiert bleibt abzuwarten. Also Obacht beim Firmware kompilieren und installieren!
Hinweis zu candleLight
Leider gibt es nicht wirklich viele brauchbare Informationen welche candleLight Firmware nun genau genutzt werden muss. Wenn man candleLight kompiliert (ohne extra Parameter) entstehen 8-10 verschiedene Firmware Versionen. In der Erklärung zum Firmware kompilieren zu STM32F072 und STM32G0B1 gibt es jeweils eine (wenn auch unvollständige) Liste welcher Typ genutzt werden sollte. Wenn man das selber rausfinden möchte hier ein paar Tips:
candleLight_fw/CMakeLists.txt
findet sich schon mal eine Liste für jeden µController (Beispiel): ########## generate list of targets. # the "_fw" part is appended automatically set(TGTF042_LIST "cantact" "canalyze" "canable" "usb2can" "cannette") set(TGTF072_LIST "candleLight" "CANable_MKS" "CONVERTDEVICE_xCAN01") set(TGTF407_LIST "STM32F4_DevBoard") set(TGTG0B1_LIST "budgetcan")
Hier ist ersichtlich, welche Version für einen bestimmten Controller verfügbar ist.
candleLight_fw/include/config.h
entnehmen. Hier sind die Pin Konfigurationen und Chip Details hinterlegt. Das kann man ganz gut mit dem Schaltplan (sofern vorhanden) abgleichen. gs_usb interface fw_0e1638b_2022-03-09 canable.io canable gs_usb canable firmware upgrade interface
sudo apt install cmake gcc-arm-none-eabi
cd ~
git clone https://github.com/candle-usb/candleLight_fw
cd ~/candleLight_fw
mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/gcc-arm-none-eabi-8-2019-q3-update.cmake
make canable_fw
oder make candleLight_fw
make FYSETC_UCAN_fw
make CANable_MKS_fw
sudo apt install cmake gcc-arm-none-eabi
cd ~
git clone --depth=1 -b stm32g0_support https://github.com/bigtreetech/candleLight_fw
cd ~/candleLight_fw
mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/gcc-arm-none-eabi-8-2019-q3-update.cmake
make budgetcan_fw
make budgetcan_fw
Klipper kann ebenfalls als Firmware für den Buskoppler verwendet werden. Hierbei kommt der USB/CAN Bridge Mode zum Einsatz, der in der Compile Konfiguration ausgewählt werden muss. Die folgende Anleitung zeigt exemplarisch wie das für das U2C V1.x funktioniert. Für andere Boards muss das CAN Interface ggf. angepasst werden! Hier sollte der Schaltplan zu Rate gezogen werden um die richtige Konfig zu ermitteln für die USB und CAN Pins!
Es wird hier auf den Einsatz von CanBoot verzichtet. Das macht die Installation nur unnötig komplex.
cd ~/klipper
make -j4
Hinweis
Klipper kann bei diesem Controller noch nicht als USB/CAN Bridge verwendet werden. Die Pins PB5/PB6 stehen in der Klipper make Konfiguration nicht zur Auswahl!
Es blebt also nur die candleLight Variante.
Ein Pull Request bei Klipper ist dafür in Vorbereitung. Die Funktion sollte also in den nächsten Wochen / Monaten zur Verfügung stehen.
Zum Flashen wird der DFU Mode verwendet. Dafür gibt es auf allen Boards immer einen BT0 oder Boot0 Taster. Um das Board in den DFU mode zu bekommen geht man wie folgt vor:
dmesg
in der Linux Konsole folgendes: DFU in FS Mode [13393.886628] usb 1-1.4: new full-speed USB device number 7 using dwc_otg [13394.020063] usb 1-1.4: New USB device found, idVendor=0483, idProduct=df11, bcdDevice= 2.00 [13394.020105] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [13394.020122] usb 1-1.4: Product: DFU in FS Mode [13394.020134] usb 1-1.4: Manufacturer: STMicroelectronics [13394.020146] usb 1-1.4: SerialNumber: 208938835542
Das Board kann dann geflasht werden mit der passenden Firmware.
candleLight
Hier findet man im Ordner ~/candleLight_fw/build
die kompilierte Firmware. Je nach make Variante hat die Firmware Datei einem anderen Namen. Wurde die Firmware als Beispiel mit make budgetcan
kompiliert, dann lautet der Dateiname der Firmware budgetcan_fw.bin
. Der Befehl zum Flashen des Boards würde dann so aussehen:
dfu-util -R -a 0 -s 0x08000000:mass-erase:force -D ~/candleLight_fw/build/budgetcan_fw.bin
Klipper
Wurde Klipper als Firmware für den Buskoppler kompiliert lautet der Flash Befehl wie folgt:
dfu-util -R -a 0 -s 0x08000000:mass-erase:force -D ~/klipper/out/klipper.bin
Hersteller Firmware
Wurde eine Hersteller Firmware aus dem Internet geladen lautet der Flash Befehl wie folgt:
dfu-util -R -a 0 -s 0x08000000:mass-erase:force -D <DATEINAME>
<DATEINAME> muss dabei durch den Dateinamen der Firmware ersetzt werden.
Diese Boards haben extra 2 USB-Ports mitten auf dem Board. Es sei an dieser Stelle darauf hingewiesen, dass das keine realen USB-Ports sind! Vielmehr dienen diese Ports nur dazu, Druckerboards ohne Transceiver zu verbinden. Beide Boards haben dafür 2 zusätzliche Transceiver aufgelötet. Wenn man nun ein Board wie das Spider oder das Octopus verwendet, können diese über ein USB-Kabel mit dem Buskoppler Board verbunden werden. Über das USB-Kabel werden dann die CAN_RX und CAN_TX Leitungen vom µController übertragen. USB wird hier also nur für die Leitungen zweckentfremdet. Die Druckerboards werden dann mit einer Klipper Firmware kompiliert, wo die CAN Leitungen die gleichen sind wie die USB Leitungen. Jetzt muss am Buskoppler ggf. noch der 120Ohm Widerstand gesetzt werden und vermutlich die VBUS Spannung (vorher am Druckerboard nachmessen, ob dort nichts anliegt !!).
Das U2C Board ist per USB mit dem Raspberry Pi verbunden (1). Über das andere USB-Kabel (2) werden nur die CAN Daten des µControllers übertragen.
Die CAN_OUT “Ports” bieten die Möglichkeit, 2 CAN Geräte ohne Transceiver anschließen zu können. Dafür müssen aber 2 Voraussetzungen erfüllt sein: