微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SocketCAN 错误被动与 RevPi CAN Connect硬件或软件问题?

如何解决SocketCAN 错误被动与 RevPi CAN Connect硬件或软件问题?

我们为 CAN Connect 购买了一个 Revpi Connect 模块,并按照 Kunbus 论坛的 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 不会显示任何流量。

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

$ 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 和 Ixxat USB2CAN v2 的计算机通信,位于 50kbps,具有高速和 FT 设置,但似乎没有任何效果。重置连接,似乎让它回到 ERROR-ACTIVE 状态。

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

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

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

任何帮助将不胜感激。

解决方法

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

Image of schematic on CAN connect

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。