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)
Možná se bude hodit i
https://python-can.readthedocs.io/en/master/bin.html.
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
Potrebuje to instalaci driveru pro linux:
http://www.peak-system.com/fileadmin/media/linux/files/peak-linux-driver-8.8.0.tar.gz
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)