SocketCAN 错误被动与 RevPi CAN 连接。硬件或软件问题?

SocketCAN error-passive with RevPi CAN Connect. Hardware or Software issue?

我们在 Kunbus 论坛上购买了一个 CAN Connect module for our Revpi Connect, and set it up as can been seen in this 线程。据我们了解,这将提供正确的终止。

我们也遵循了 Revolution PI 提供的 this 指南。

检查 CAN 模块的驱动程序是否正确加载时,一切正常:

$ dmesg | grep can
[    4.616900] hi3110 spi0.0 can0: 3110 successfully initialized.
[  107.049422] IPv6: ADDRCONF(NETDEV_UP): can0: link is not ready
[  107.049463] IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready

检查 ip 统计信息得出以下结果:

$ ip -det -statistics link show can0
5: can0:  mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
    link/can  promiscuity 0
    can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
          bitrate 50000 sample-point 0.875
          tq 1250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
          hi3110: tseg1 2..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1
          clock 16000000
          re-started bus-errors arbit-lost error-warn error-pass bus-off
          0          0          0          0          0          0         numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    RX: bytes  packets  errors  dropped overrun mcast
    0          0        0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0

但是,当我们打开candump并使用cansend发送消息时,candump没有显示任何流量。

如果我们再次检查 dmesg 的 CAN,我们会得到这个结果:

$ dmesg | grep can
[    4.616900] hi3110 spi0.0 can0: 3110 successfully initialized.
[  107.049422] IPv6: ADDRCONF(NETDEV_UP): can0: link is not ready
[  107.049463] IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready
[  292.285353] can: controller area network core (rev 20170425 abi 9)
[  292.297811] can: raw protocol (rev 20170425)

如果我们再次检查 ip -statistics,我们可以看到连接状态已经进入 ERROR-PASSIVE:

$ ip -det -statistics link show can0
5: can0:  mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
    link/can  promiscuity 0
    can state ERROR-PASSIVE (berr-counter tx 128 rx 0) restart-ms 0
          bitrate 50000 sample-point 0.875
          tq 1250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
          hi3110: tseg1 2..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1
          clock 16000000
          re-started bus-errors arbit-lost error-warn error-pass bus-off
          0          0          0          1          1          0         numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    RX: bytes  packets  errors  dropped overrun mcast
    0          0        0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0

我们正在尝试与使用 Ixxat USB2CAN v2 的计算机进行通信,速度为 50kbps,具有高速和 FT 设置,但似乎没有任何效果。重置连接,似乎让它回到 ERROR-ACTIVE 状态。

当尝试与上述计算机通信时,使用另一台装有 Socketcan 的计算机和另一台 Ixxat USB2CAN v2 设备,一切正常。

我或许还应该提一下,如果我们打开 loopback,我们可以看到我们发送的消息。

我们正在努力了解这是硬件错误还是软件错误。我们的终止是有序的吗? SocketCAN 有没有什么神奇的设置我们忽略了?我们应该从哪里开始调试这个问题?

如有任何帮助,我们将不胜感激。

事实证明,直接打印在设备上的原理图是wrong.The他们网站上的原理图是正确的。

希望这可以帮助其他人避免将来拔头发。