raspberry-pi - SocketCAN - 设备状态“已停止”
问题描述
我将 Raspberry Pi 与使用 MCP2515 CAN 控制器的 PiCAN 板一起使用。
我使用 SocketCAN 通过我编写的应用程序读取和写入 CAN 消息。
运行几周后没有出现问题,控制器现在处于“已停止”状态。STOPPED 和 BUS-OFF 状态有什么区别?
如果CAN总线上出现太多错误,设备是否进入BUS-OFF状态,如果您将设备设置为DOWN(ip link set canX down),设备是否进入STOPPED状态?
有没有其他方法可以让设备进入 STOPPED 状态?我无法找到我的应用程序如何设置设备的方法。
ip -details -statistics link show can0
3: can0: <NOARP,ECHO> mtu 16 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 10
link/can promiscuity 0
can state STOPPED restart-ms 100
bitrate 250000 sample-point 0.875
tq 250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1
clock 8000000
re-started bus-errors arbit-lost error-warn error-pass bus-off
0 0 0 146 139 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
RX: bytes packets errors dropped overrun mcast
787700920 151606570 24 0 24 0
TX: bytes packets errors dropped carrier collsns
6002905 5895301 0 0 0 0
解决方案
您需要熟悉 CAN 总线设备的 ERROR ACTIVE、ERROR PASSIVE 和 BUS OFF 错误状态,以及何时需要手动重启 CAN 通信。
所有相关信息都可以在以下链接之一中找到:
推荐阅读
- java - java.lang.UnsupportedOperationException:没有已知接口 jenkins.tasks.SimpleBuildStep 的实现被命名为 Publisher
- amazon-web-services - 用于更新现有启动模板的 Terraform 配置
- javascript - 如何使用 d3js 的 data 方法解析对象数组并将其显示在工具提示中?
- python - 如何创建下拉依赖项
- mongodb - 如何在mongo shell中获取带有子条目的父项
- c# - 什么是 sql 匿名对象,我将如何使用它?它出现在我正在关注的在线教程中
- c# - 获取控制器中的当前 IServiceScope
- .net - 在 .NET Core 2.2 中将 XmlSerialser 添加到 WebApi 不起作用
- java - 如何为单对多关系中的每个父级创建单独的子表
- php - Consolibyte Quickbooks 连接问题