我正在从事一个涉及linux嵌入式设备的项目,该设备支持CAN总线。
我已经注意到,如果我试图发送一个CAN包而没有任何附加到CAN总线,发送自动重试由内核无限次数。我可以使用一个作用域来验证这一点--相同的消息会自动地被一遍又一遍地传送。即使我关闭了创建消息的进程,即使该进程只尝试发送一条消息,此重传仍然存在。
我的问题是-对于linux CAN总线内核来说,这是正常的行为吗?我担心的是,如果这个装置有什么问题,而且错误地断定它是单独在公共汽车上的话,这个装置可能会淹没巴士,使其他巴士参与者无法使用它。我原以为会有某种重试的限制。
该设备采用Linux4.14.48,can芯片采用飞利浦SJA1000.
发布于 2020-12-09 09:55:43
您所看到的可能是错误帧。遵从的行为如下:
所有这些都应该由CAN控制器硬件来处理,而不是由操作系统来处理。一旦SJA1000总线关闭,您可能需要重置它或启动它的循环。如果它从未关闭总线,那么驱动程序代码中的某些内容可能会在一定数量的错误之后不断地重置CAN控制器。
请注意,微控制器实现可能也会执行相同的操作并对错误进行重置,因为这通常是在总线关闭后重新建立通信的唯一方法。这取决于CAN应用程序的性质。
发布于 2022-01-07 01:12:35
简短的回答是肯定的-如果ACK是唯一的TEM错误,计数器将停止在128,而不进入巴士下车。它会永远消失。这也发生在我身上,我刚刚关掉了处理器端的重传功能。不确定这是否是CAN标准函数。
https://stackoverflow.com/questions/65212620
复制相似问题