czech english

PeakCAN

USB CAN interface

Peak CAN je USB-CAN převodník, který jsme dosud používali pouze pro ladění a analýzu problémů. S vESC drivery, které používají rozšířené adresovaní CANU se však situace mění. Některé varianty Peak CAN navíc podporují CAN FD, který je plánován na Spider3.

  • http://www.peak-system.com/
  • varianty CAN (zdroj EHL elektronika s.r.o.)
  • PCAN-USB (IPEH-002021) 4680,- Kč + DPH
  • PCAN-USB opto-decoupled (IPEH-002022) 5720,- Kč+ DPH
  • PCAN-USB FD IPEH-004022 6370,- Kč + DPH
  • Python instalace pip install python-can (podporuje více převodníků)
Asi primární problém byl konfigurace. Nejde přímo import can.interface.pcan bez úprav, ale lze to obejít podle https://python-can.readthedocs.io/en/master/configuration.html:
bus = can.interface.Bus(bustype='pcan', channel='PCAN_USBBUS1', bitrate=500000)
A možná může mít i cenu si udělat něco malého vlastního na motivy https://github.com/hardbyte/python-can/blob/develop/can/interfaces/pcan/pcan.py
Více informací případně zde https://www.peak-system.com/Support.55.0.html?&L=1 to basic api by nějak mělo fungovat pod win i lin, ale hlouběji jsem na to nekoukal (tj.nevím, co je preferované api na linuxu).
Problém na APU3 zatím byl (resp. se jeví) s driverem:
dmesg
[ 1277.303282] usb 1-2: new high-speed USB device number 2 using xhci_hcd
[ 1277.427048] usb 1-2: New USB device found, idVendor=0c72, idProduct=0012
[ 1277.433795] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1277.440991] usb 1-2: Product: PCAN-USB FD
[ 1277.445041] usb 1-2: Manufacturer: PEAK-System Technik GmbH

Příklad užití

import can
bus = can.interface.Bus(bustype='pcan', channel='PCAN_USBBUS1', bitrate=500000)

for msg in bus:
  print(msg)
>>> bus
<can.interfaces.pcan.pcan.PcanBus object at 0x00000000021C5518>
pak dáva
Timestamp: 1560885866.643092        ID: 077f    S                DLC:  1    7f
Timestamp: 1560885867.642977        ID: 077f    S                DLC:  1    7f
Timestamp: 1560885868.642904        ID: 077f    S                DLC:  1    7f
Timestamp: 1560885869.642915        ID: 077f    S                DLC:  1    7f

Linux driver

The configuration item CONFIG_CAN_PEAK_USB:
  • prompt: PEAK PCAN-USB/USB Pro interfaces for CAN 2.0b/CAN-FD
  • type: tristate
  • depends on: (none)
  • defined in drivers/net/can/usb/Kconfig
  • found in Linux kernels: 4.0–4.20, 5.0–5.1, 5.2-rc+HEAD
  • modules built: peak_usb
Takže to chce module peak_usb a verzi kernelu dle výše vyjmenovaného.

Jakub 6/7

Zkouším to na KDE neon (Ubuntu 18.04). Kromě gcc a g++ bylo potřeba doinstalovat ještě libpopt-dev.

Jakub 7/7

Tak ještě update ohledně apu (asi jen pro info):
apt-get install make gcc g++ libpopt-dev linux-headers
wget http://www.peak-system.com/fileadmin/media/linux/files/peak-linux-driver-8.8.0.tar.gz
tar xvzf peak-linux-driver-8.8.0.tar.gz
cd peak-linux-driver-8.8.0
make clean
make
make install

ODYSSEY a Ubuntu 22.03 (26/1/2024)

Doba se posunula a stará instalace není zkompilovatelná s novým systémem. Asi první užitečný link je:
aneb historie release. Aktuálně zkouším peak-linux-driver-8.17.0.tar.gz který ale selhává na těch chybějících headerech:
gcc -DNO_RT -I. -I../lib -I../driver  -g src/pcan-settings.c -lpopt -lpcanfd  -L../lib/lib
                                                -Wl,-rpath ../lib/lib -g -o pcan-settings
src/pcan-settings.c:47:10: fatal error: popt.h: No such file or directory
   47 | #include <popt.h>
      |          ^~~~~~~~
compilation terminated.
make[1]: *** [Makefile:196: pcan-settings] Error 1
jo, to je zase to sudo apt-get install libpopt-dev
p.s. jen detail, že to včera nefungovalo a já si toho nevšiml :-(
can.interfaces.pcan.pcan.PcanCanInitializationError: The driver is not loaded
a když jsem ho tedy zkusil znova zkompilovat, tak jsem dostal:
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
  You are using:           
  CC [M]  /home/robot/peak-linux-driver-8.17.0/driver/src/pcan_main.o
gcc: error: unrecognized command-line option ‘-ftrivial-auto-var-init=zero’
kde řešením bylo doinstalování gcc-12
sudo apt install g-12 gcc-12 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100 --slave /usr/bin/g g++ /usr/bin/g++-12 –slave /usr/bin/gcov gcov /usr/bin/gcov-12
(sigh, escape na plus plus! viz zdroj)