CAN analyzer Cando

Petr Labaj labaj na volny.cz
Pondělí Září 12 22:55:40 CEST 2022


Situace kolem CANbusu je trochu složitější a ne tak přímočará jako jinde.

Na Linuxu je skutečně podpora pro socketové rozhraní k CANbus adaptéru/síti.
Ale to neznamená, že ho všechna zařízení používají.

V principu jsou 2 základní typy běžných levných CANbus adaptérů.
Jeden je na bázi Slcan. To "sl" znamená serial line. Původním autorem je 
myslím firma Lavicel, ale dneska existuje mraky klonů.
Ten převodník CAN/serial zde jen převádí provoz sběrnice CANbus na 
sériovou linku.
Obsluha na Linuxu se pak často (ale ne vždy) dělá pomocí démona slcand, 
který tu sériovou komunikaci převádí na to socketové rozhraní.
A vyšší SW s tím pak komunikuje přes socket.
Komunikační parametry se zde nastavují při volání toho démona.

Ale není to jediná možnost. Jsou SW, které prostě fungují rovnou s tou 
sériovou linkou a ty CANsockety k tomu nepotřebují.

Druhý typ zařízení pak má nějaké USB rozhraní. Nejpopulárnější je asi 
rozhraní PCAN, původem od firmy Peak.
Zřejmě opět (možná) existuje nějaký démon, který to pošle do socketů.
Ale většinou tady ten SW komunikuje přímo přes to USB rozhraní.

Ty vyšší SW se často píšou nad Qt. A právě Qt na to má nějakou speciální 
třídu s obsluhou různých CAN adaptérů.
Jak těch USB (jako je třeba ten PCAN nebo to, co má původní zakladatel 
tohoto vlákna). Ale umí jet i přes socketové rozhraní.

No ale tohle všechno platí pro Linux.
Na Windows socketové rozhraní neexistuje. Takže tady se dá obsloužit jen 
to, co má USB rozhraní. Nebo případně napřímo tu sérivou linku.

PL

*********************

Dne 12.9.2022 v 22:16 Miroslav Mraz napsal(a):
> Sice CAN zatím neprovozuji, ale adaptér mi tu nějaký zbyl, tak jsem ho 
> zkusil zastrčit a podle dmesg soudím, že se to chová (na Linuxu) jako 
> síťový adaptér s vlastním driverem. Vypadá to velice složitě, viz 
> https://www.kernel.org/doc/Documentation/networking/can.txt, ale zase 
> se to dá manažovat běžnou utilitou ip. Ten můj adaptér si nainstaluje 
> drivery (lsmod)
> usb_8dev               20480  0
> can_dev                40960  1 usb_8dev
> váš by měl mít místo usb_8dev něco jako gs_usb (podle zdrojáků jádra). 
> Vytvoří se síťové rozhraní can0 a pomocí ip se s tím dá bavit
> $ ip -details link show can0
> 4: can0: <NOARP,ECHO> mtu 16 qdisc noop state DOWN mode DEFAULT group 
> default qlen 10
>     link/can  promiscuity 0 minmtu 0 maxmtu 0
>     can state STOPPED (berr-counter tx 0 rx 0) restart-ms 0
>      usb_8dev: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1
>      clock 32000000 numtxqueues 1 numrxqueues 1 gso_max_size 65536 
> gso_max_segs 65535
>
> Takže jako programátor se s tím bavíte přes sokety, je to popsáno a 
> lze najít příklady.
>
> Mrazík
>
> On 12. 09. 22 19:26, Petr Labaj wrote:
>> Děkuji velice. To je ono.
>>
>> Bože, jak já to zwindovsovatění Linuxu nenávidím.
>> Takže všechny informace na webu o databázi usb.ids už naplatí.
>>
>> Jak bylo krásné, když byl Linux ještě Linuxem (Unixem) a všechny 
>> konfigurace byly přehledně v textové lidské podobě na jasně 
>> definovaných logických místech.
>> Teď do toho vpadne  nějaký systemd a udělá z toho podobný bordel, 
>> jako jsou ve Windows registry.
>> Všecko se musí dělat přes nějakou aplikaci, která někde něco nějak 
>> změní. Nejlépe na více místech a pokud možno do nečitelné binární 
>> podoby.
>> Fuj!
>>
>> Ještě jednu díky za rychlou a hodnotnou radu, vedoucí rychle k cíli.
>>
>> PL



Další informace o konferenci Hw-list