首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux can总线过度重传

Linux can总线过度重传
EN

Stack Overflow用户
提问于 2020-12-09 07:48:57
回答 2查看 678关注 0票数 1

我正在从事一个涉及linux嵌入式设备的项目,该设备支持CAN总线。

我已经注意到,如果我试图发送一个CAN包而没有任何附加到CAN总线,发送自动重试由内核无限次数。我可以使用一个作用域来验证这一点--相同的消息会自动地被一遍又一遍地传送。即使我关闭了创建消息的进程,即使该进程只尝试发送一条消息,此重传仍然存在。

我的问题是-对于linux CAN总线内核来说,这是正常的行为吗?我担心的是,如果这个装置有什么问题,而且错误地断定它是单独在公共汽车上的话,这个装置可能会淹没巴士,使其他巴士参与者无法使用它。我原以为会有某种重试的限制。

该设备采用Linux4.14.48,can芯片采用飞利浦SJA1000.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-09 09:55:43

您所看到的可能是错误帧。遵从的行为如下:

  • Node是活动的。它试图发送一个数据帧,但是没有设置ACK位,因为没有人在听它。
  • 它将发送一个错误帧,它几乎只有6个主要比特组成,目的是打破比特填充。控制器
  • 将重新尝试发送消息。如果在未接收ACK的情况下完成发送的新尝试,则将发送另一个错误帧。这将继续重复automatically.
  • After 128个错误,节点将成为被动错误,它仍然会发送错误帧,但现在它不会干扰其他通信量的隐性水平。
  • 在总共发生256个错误后,该节点将关闭总线并完全关闭。

所有这些都应该由CAN控制器硬件来处理,而不是由操作系统来处理。一旦SJA1000总线关闭,您可能需要重置它或启动它的循环。如果它从未关闭总线,那么驱动程序代码中的某些内容可能会在一定数量的错误之后不断地重置CAN控制器。

请注意,微控制器实现可能也会执行相同的操作并对错误进行重置,因为这通常是在总线关闭后重新建立通信的唯一方法。这取决于CAN应用程序的性质。

票数 2
EN

Stack Overflow用户

发布于 2022-01-07 01:12:35

简短的回答是肯定的-如果ACK是唯一的TEM错误,计数器将停止在128,而不进入巴士下车。它会永远消失。这也发生在我身上,我刚刚关掉了处理器端的重传功能。不确定这是否是CAN标准函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65212620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档