SocketCAN CAN总线一旦程序启动,仲裁丢失错误就会增加



我正在做一个项目,将通过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端请求向子系统写入。

我的问题是-为什么我看到仲裁丢失每次以大约5分钟的间隔增加1,一旦我的python程序运行?这表明有什么严重的问题吗?这是否意味着数据帧丢失了?如果我就这样放任不管,你会担心吗?任何人谁可以帮助回答和解释将不胜感激!

值得注意的是:程序开始约3天。只观察到仲裁丢失,没有重新启动、总线错误、错误警告、错误传递和总线关闭。并且在TX/RX字段中没有error、dropped、overrun、mcast、carrier和collsns错误。

通常您可以安全地忽略仲裁丢失的错误。这只是意味着一条信息在仲裁中败给了另一条信息。值得庆幸的是,CAN已经变得足够强大,以至于"仲裁败诉者";将再次发送。

我推荐以下阅读:

维基百科
  • SocketCAN

相关内容

  • 没有找到相关文章