- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CAN总线的关闭与恢复
CAN消极报错发送节点变为离线状态的故障
时间:2009-06-30 13:04:11?来源:单片机与嵌入式系统应用 作者:重庆工业自动化仪表研究所 杨福字
摘要 处于消极报错状态的CAN节点在一次本地错之后,由于标准考虑不周,会产生该节点与其他节点在帧启停上的不同步,造成错误的不断延续,在接收节点中产生等同离线状态。本文讨论了在发送节点中产生真正离线的原因,并提出了解决方案。关键词 CAN报错帧分界符 优先级逆转 离线
??? CAN是应用非常广泛的现场总线。它已经被大部分汽车厂商用作车内控制器交换信息的通信干线,是分布式嵌入式系统的关键部分。但是它有一种以前未讨论过的与安全有关的故障,当某一处于消极报错状态的节点由于干扰而产生一个本地错后,因标准考虑欠周,该节点会与其他节点帧启停失去同步,在其他挂起待发的消息发送时不断出错,形成等同于离线的状态,无法提供服务,从而危及安全。本文讨论处于消极报错状态的发送节点,由于同样的原因失去同步后的演变过程。这里不同的是,因为标准中的另一个规定,它可能经历一个真正的离线状态。
1 CAN标准的安全漏洞??? 在讨论该问题时假定读者对CAN的标准已有充分的了解,由于中文译法的差别,本文采用的术语可能有所不同,相信不会影响读者的理解。在Bosch CAN2.O规范3.1.3款中说:“为了使报错帧正确结束,消极报错节点可能需要处于空闲状态至少有3bit时间(如果消极报错接收节点发生本地错),因此总线不应满负荷运行。”——这是引起应用出故障的原因。因为节点问并无时间同步,即便总线有空闲时间,也不能保证像上述要求那样的分布。挂起待发的消息将在服务间隔(intermission,图中缩写为I.M.)后立即发送。这在规范中也有规定:“在另一条消息发送过程中挂起待发的消息在服务间隔后的第一位启动(发送)”。ISO11898标准没有提到3位空闲问题,但是CAN一致性测试标准ISO16845的具体条文会有这种要求(虽然该空闲要求还是不充分的)。CAN规定处于消极报错状态的节点在发现错之后发出6位隐位的消极报错标志(Passive error flag),如读回6个连续的相同位时,就确认报错标志发完,如没发现6个连续的相同位,就继续发隐位,直到得到确认,然后开始消极报错帧分界符的发送。分界符从发出隐位读回也是隐位时开始计算,总共为8个连续的隐位。在CAN一致性测试标准ISO16845的7.5.6款与8.5.13款中,规定了接收节点与发送节点在发消极报错帧分界符时的格式错检查办法。它规定,在消极报错帧分界符开始后的8位中不得有显位;如有显位,就视为出错,开始新的报错帧。??? 如果一个处于消极报错状态的节点发现一个本地错(即有一种误判或漏判),由于其他节点不发主动报错帧,那么它发的消极报错帧标志就不会及时得到确认,往往要到图1所示的数据帧或远程帧的EOF第5位才会得到确认;而它的消极报错帧分界符将延续到帧的服务间隔之后,它就和其他节点的帧启停失去了同步。其他节点开始新帧的SOF将被它视为格式错,而开始发新的消极报错帧。当其他节点有挂起待发的帧不断发送时,这个处于消极报错状态的节点一直处于不断出错的状态,不能发送也不能接收,即等同于离线状态。??? 这种源自标准考虑不周的故障会使CAN的优先级逆转(在处于消极报错状态的节点中的高优先级消息无法发送);同时,基于优先级进行的调度分析失灵。以此为算法设计得到的消息最坏送达时间将是不可靠的,车的安全会受影响。在参考文献[1]中,讨论了修改消极报错帧分界符长度来解决该故障的方法。
??????????????????????????????2 处于消极报错状态发送节点本地错的后果??? 处于消极报错状态的发送节点在有本地错时,其行为倾向更差。标准ISO16845的8.6.9款对发送节点在消极报错帧分界符内的格式错规定了发送错计数器TEC+8,第7.6.12款对处于消极报错状态的接收节点在消极报错帧分界符内的格式错规定了接收错计数器REC+1。而且标准规定REC是有上限的,它不会导致节点成为离线状态;但TEC会一直加上去,当TEC=256时节点就成为离线状态,直到在总线上读到128个连续的11个隐位,然后它变为主动报错状态。因此弄清楚节点是接收还是发送的地位非常重要。??? Bosch CAN 2.O规范3.2款对节点的定义是这样的:“开始一个消息的单元被称为该消息的发送节点。在总线空闲之前,或该单元在仲裁中失败之前,该单元一直是发送节点。”“一个节点被称为一条消息的接收节点的条件是:它不是该消息的发送节点且总线不空闲”。国际标准ISO11898-1:2003第4.18款有类似的定义:“发送节点是指开始一个数据帧或远程帧的节点,在总线再次空闲之前或在仲裁失
文档评论(0)