CAN-FD on the Raspberry Pi 5
Nov 1, 2024
This is a quick write-down of how to use CAN-FD via the MCP2517FD SPI-to-CAN converter.
This is an updated version of my previous article about CAN-FD on the Raspberry Pi 2.
My Setup
Embedded Linux System: Raspberry Pi 5 Model B Rev 1.0
CAN-FD Board: MIKROE-2379 MCP2517FD from MikroElektronika
Kernel: Linux raspberrypi 6.6.59-v8-16k+ #1810 SMP PREEMPT Fri Nov 1 13:15:07 GMT 2024 aarch64 GNU/Linux
The Hardware version of your Raspberry Pi can be read using:
cat /sys/firmware/devicetree/base/model
The Kernel version can be read using:
uname -a
Note: If you are running an older kernel version you need to update it. Otherwise, a driver issue will cause a segmentation fault after the interface is initialized. See: CVE-2024-41088
Now, out of principle, we first run:
sudo apt-get update
sudo apt-get upgrade
Install some CAN utilities:
sudo apt-get install can-utils
Edit /boot/firmware/config.txt
sudo nano /boot/firmware/config.txt
Turn on SPI by uncommenting:
dtparam=spi=on
and add:
dtoverlay=mcp251xfd,spi0-0,oscillator=40000000,interrupt=12
Note: Set spi, oscillator
and interrupt
according to your hardware.
Check
After rebooting, check the boot log using:
dmesg
The boot log should contain something like this:
mcp251xfd spi0.0 can0: MCP2517FD rev0.0 (-RX_INT -PLL +MAB_NO_WARN +CRC_REG +CRC_RX +CRC_TX +ECC -HD o:40.00MHz c:40.00MHz m:20.00MHz rs:17.00MHz es:16.66MHz rf:17.00MHz ef:16.66MHz) successfully initialized.
The device should now be available in the device tree. This can be verified using the following command:
ls /sys/bus/spi/devices/spi0.0/net/can0/
Buy me a Coffee
If this article was helpful to you, you can support this website via a one-time donation using the following button:
Initialize
sudo ip link set can0 up type can bitrate 500000 dbitrate 500000 sample-point 0.75 dsample-point 0.75 sjw 2 fd on
Note: Change initialization according to your BUS settings.
Now, the can0 interface should be visible when running:
ifconfig
Test
Use
candump can0