Modul PI-CAN je modul s galvanicky izolovaným rozhraním CAN FD, založeném na řadiči MCP2518FD s rozhraním MCP2544FD. Podpora pro PI-CPUF407 je obsažena v ukázkové aplikaci na GitLab, podívejme se také, jak ho rozchodit na Raspberry OS.
Raspberry OS obsahuje podporu pro MCP2518FD, kterou je ale nutné zapnout. V souboru /boot/firmware/config.txt přidáme ovladač pomocí:
dtoverlay=mcp251xfd,oscillator=20000000,spi0-0,interrupt=5
Poté restartujeme a v systému se objeví nové síťové rozhraní can0. Otestovat ho můžeme rovnou z příkazové řádky. Nejprve rozhraní aktivujeme:
> ip link set can0 up mtu 72 type can bitrate 500000 dbitrate 2000000 fd on
V příkazu jsme nastavili rychlost na 500kbit/s a vysokou rychlost CAN FD na 2 Mbit/s.
Poslouchat na rozhraní můžeme pomocí příkazu:
> candump can0
Pokud chceme něco poslat, provedeme to příkazem:
> cansend can0 001#01234567
Formát zprávy je ID#DATA, tedy v našem případě posíláme ID 1 a data celkem 4 byte s hodnotami 01 23 45 67. Pokud není na sběrnici žádný příjemce a zpráva není potvrzena, bude se vysílat pořád dokola.
Příkaz cansend ale neumí posílat zprávy CAN FD ve vyšší rychlosti. To lze pomocí příkazu cangen, který primárně generuje náhodná data:
> cangen can0 -f -v
Tento příkaz vygeneruje náhodné frame o náhodné délce. Toto chování můžeme změnit přidáním těchto přepínačů:
-I <mode> (CAN ID generation mode)
-L <mode> (CAN data length code (dlc) generation mode)
-D <mode> (CAN data (payload) generation mode)
Mode může být:
'r' => random values (default)
'i' => increment values
<hexvalue>
Hexvalue se musí zadávat v hexadecimálním tvaru.
Pro kompletní návod příkazu cangen viz manuál:
> man cangen
Zavřít interface můžeme příkazem:
> ip link set can0 down