ISO-CANDUO IO Card Configuration
The CAN-BUS controller is configured by adding a few overlay lines to /boot/config.txt and then configuring the network interfaces file
Here are the two sections that need adding, note that the CM4 Based XT Integrator board uses different hardware chip-select pins to the other versions so use the applicable line when adding to config.txt
/boot/config.txt
dtoverlay=spi0-on # Integrator Board OG/NT dtoverlay=spi0-2cs,cs0_pin=8,cs1_pin=7 # Integrator Board XT #dtoverlay=spi0-2cs,cs0_pin=8,cs1_pin=23 dtoverlay=mcp2515-can1,oscillator=16000000,interrupt=26 dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25
Note : Please add these lines in the order shown, there's conjecture that the order impacts the OS configuration
/etc/network/interfaces.d/can
############### CAN BUS CONFIG ########################### auto can0 iface can0 inet manual pre-up ip link set $IFACE type can bitrate 500000 listen-only off up /sbin/ifconfig $IFACE up down /sbin/ifconfig $IFACE down auto can1 iface can1 inet manual pre-up ip link set $IFACE type can bitrate 500000 listen-only off up /sbin/ifconfig $IFACE up down /sbin/ifconfig $IFACE down ############### CAN BUS CONFIG ###########################
With these changes in place reboot the unit and check the config as below
root@raspberrypi:~# ifconfig can0 can0: flags=193mtu 16 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 root@raspberrypi:~# ifconfig can1 can1: flags=193 mtu 16 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 root@raspberrypi:~#
See below example showing the sytem running in a throughput test using cangen :
The CAN-DUO card features a hardware modification which forces all interrupts to be synchronous rather than asynchronous as a work-around for a bug in the MCP2515 kernel driver (Raspbian Kernel 4.9.41 or earlier) which presents when 2 or more controllers are active and using edge triggered interrupts (rather than level triggered) this often results in one of the channels hanging after a short period due to the edge being missed and ends up being left in limbo. This hardware fix has been tested over long periods under high load without problem and provides a neat hardware work-around to save any modification to the OS. This bug has been fixed as of Raspbian Kernel version 4.9.75+ and if required an alternative build of the card is availble without this hardware work-around modification (this uses R1/R2 0R0 links instead of U10).