【问题标题】:SocketCAN CAN bus Arbit-lost error increments once program started一旦程序启动,SocketCAN CAN 总线仲裁丢失错误就会增加
【发布时间】:2021-10-07 11:40:09
【问题描述】:

我正在做一个项目,它将通过 CAN 总线连接多个子系统(传感器、控制器等)。我正在使用 SocketCAN 并且设置如下:

root@ngtianxun-desktop:~# ip -details -statistic link show can0
5: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
    link/can  promiscuity 0 minmtu 0 maxmtu 0
    can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 10
          bitrate 500000 sample-point 0.600
          tq 100 prop-seg 3 phase-seg1 8 phase-seg2 8 sjw 4
          RDC_CAN: tseg1 5..16 tseg2 3..8 sjw 1..4 brp 2..131072 brp-inc 2
          clock 20000000
          re-started bus-errors arbit-lost error-warn error-pass bus-off
          0          0          337        0          0          0         numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    RX: bytes  packets  errors  dropped overrun mcast
    27841616   3498429  0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    9504120    2357958  0       0       0       0
root@ngtianxun-desktop:~#

已编写 Python 脚本以持续监控子系统并根据 python 端的请求写入子系统。

我的问题是 - 为什么我看到 arbit-lost 在我的 python 程序运行后以大约 5 分钟的间隔每次递增 1?它是否表明任何严重的问题?这是否意味着数据帧丢失了?如果我让它这样,有什么担心吗?任何可以帮助回答和解释的人将不胜感激!

值得注意的是:这些计划大约开始了约 3 天。仅观察到仲裁丢失,没有重新启动、总线错误、错误警告、错误通过和总线关闭。并且TX/RX字段中没有errors、dropped、overrun、mcast、carrier、collsns错误。

【问题讨论】:

    标签: python linux embedded-linux can-bus socketcan


    【解决方案1】:

    通常您可以放心地忽略仲裁丢失错误。这只是意味着一条消息失去了仲裁而有利于另一条消息。值得庆幸的是,CAN 已经变得足够强大,以至于“仲裁失败者”将被再次发送。

    我推荐以下阅读:

    【讨论】:

    • 感谢您的回答。所以它只是一个报告机制,说一个节点在仲裁过程中失去了战斗。它将在下一个可用时隙中重新发送,直到它赢得仲裁。
    • 我就是这么理解的。
    猜你喜欢
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多