Onboard Verdin CAN Interface fails

Hi,

I am currently trying to bring up all peripherals on our custom base board for Verdin modules
and I am stuck at getting the CAN0 interface to work.

I am using the latest version from branch toradex_5.4-2.3.x-imx. The bus is terminated on both ends with a 120 Ohm resistor and I have already tried changing the two lines.
The kernel prints the following message during boot up:

~ # dmesg | grep mcp
[   45.366109] mcp25xxfd spi2.0: spi_imx_setup: mode 0, 8 bpw, 2000000 hz
[   45.366130] mcp25xxfd spi2.0: setup mode 0, 8 bits/w, 2000000 Hz max --> 0
[   45.403142] mcp25xxfd spi2.0: MCP2517 successfully initialized.

After setting the bitrate and starting the interface I get the following message

~ # ip link set can0 type can bitrate 250000 fd off
~ # ip link set can0 up
[  214.894638] mcp25xxfd spi2.0: Controller unexpectedly switched from mode 0 to 6
[  214.895108] IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready
[  214.902450] mcp25xxfd spi2.0 can0: CAN Bus error experienced

Send a message results in the following output

~ # cansend can0 123#DEADBEEF
[  169.237656] mcp25xxfd spi2.0 can0: CAN Bus error experienced
~ # [  169.243436] NOHZ: local_softirq_pending 08
[  169.248096] mcp25xxfd spi2.0 can0: CAN Bus error experienced
[  169.253795] mcp25xxfd spi2.0 can0: bus-off

And I don’t receive a message sent by the other CAN module. The following image shows the output of the CAN tranceiver, decoded with the same bitrate.

Hi @gandi

Thanks for writing to the Toradex Community!

Could your provide the hardware version of your module?
Regarding software which image did you install exactly?

Please provide the output of ‘uname -a’ and ‘cat /etc/release’.

Thanks and best regards,
Jaski

Hi,

As I understand Verdin level translates MCP2518 CAN controller outputs down to 1.8V levels. If that’s the case, did you address that in your custom carrier board? 1.8V compatible transceiver? Level shifter?

Edvard

Hi @jaski.tx

Hardware version is V1.1A  
uname output: Linux verdin-imx8mm 5.4.91-33031-g88b339314c70-dirty #4 SMP PREEMPT Fri Feb 26 10:32:39 CET 2021 aarch64 GNU/Linux

/etc/release does not exist, I build my own RFS with yocto.

I have found the problem. I am using the TCAN1044V as transceiver which has a dedicated IO supply voltage and a standby pin. I somehow assumed that the default configuration with the internal pull-up is normal mode. Unfortunately it was standby mode.

But now I am receiving some kernel messages during CAN operation:

[  291.933875] NOHZ: local_softirq_pending 08  
[  291.937984] NOHZ: local_softirq_pending 08  

Is this something to ignore?

Hi @gandi

Perfect that you solved you issue. Currently you can ignore these messages.

Best regards,
Jaski