首页 > 解决方案 > 带有 RevPi CAN Connect 的 SocketCAN 错误被动。硬件或软件问题?

问题描述

我们为Revpi Connect购买了一个CAN Connect模块,并按照 Kunbus 论坛上的这个帖子中的说明进行了设置。据我们了解,这将提供适当的终止。

我们还遵循了 Revolution PI 提供的本指南。

检查 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

我们正在尝试50kbps与具有高速和 FT 设置的 Ixxat USB2CAN v2, at 的计算机进行通信,但似乎没有任何效果。重置连接,似乎将其恢复为ERROR-ACTIVE状态。

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

我也许还应该提到,如果我们打开loopback,我们可以看到我们正在发送的消息。

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

任何帮助将不胜感激。

标签: can-bussocketcan

解决方案


事实证明,直接打印在设备上的示意图是错误的。他们网站上的示意图是正确的。

CAN 连接示意图

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


推荐阅读