一种CAN的安全隐患.docx
- 文档编号:6446778
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:6
- 大小:105.75KB
一种CAN的安全隐患.docx
《一种CAN的安全隐患.docx》由会员分享,可在线阅读,更多相关《一种CAN的安全隐患.docx(6页珍藏版)》请在冰豆网上搜索。
一种CAN的安全隐患
CAN的一种安全隐患
杨福宇
Email:
yfy812@
AnUndiscoveredSafetyRelatedFaultinCANFuyuYang
摘要:
在CAN消极报错帧分界符中发生的格式错会引起该消极报错节点处于等效离线状态,以及由该节点发送的消息优先级逆转。
本文讨论了发生此问题的情景、后果以及解决方案。
关键字:
CAN;报错帧分界符;优先级逆转
CAN是最成功的现场总线,特别是在汽车工业的应用方面。
仅2006年一年,CAN有关的控制器出货量超过5亿个[1]。
在过去16年里有许多关于CAN在安全攸关的系统中应用时的安全问题的研究,其中大部分是针对因CAN事件触发通信的性质引起的时间延迟问题,以及数据帧帧结束域倒数第二位出错时造成的节点间消息的不一致性问题。
有些研究着力于解决CAN系统中的BabblingIdiot故障。
尚未见到有关源于标准协议设计本身的严重故障的相关文献。
本文将讨论这一问题,在第一部分中将举例提出这一问题及其后果,第二部分举更多的例字说明会出现的故障情景超出了协议设计时的预计,第三部分以SAE典型试验参数集说明失效的后果,接着是改进设计CAN通信控制器的解决方案,最后是小结。
1.出错的情况
在CAN协议2.0A版[2]3.1.3款中说:
“为了使报错帧正确结束,消极报错节点可能需要处于空闲状态至少有3bit时间(如果消极报错接收节点发生本地错),因此总线不应满负荷运行。
“—这是引起应用出故障的原因。
因为节点间并无时间同步,即便总线有空闲时间,也不能保证像上述要求那样的分布。
在总线的利用率较低时,挂起待发的消息将在服务间隔(intermission,图中缩写为I.M.)后立即发送。
这在标准中也是规定了的:
“在另一条消息发送过程中挂起待发的消息在服务间隔后的第一位启动(发送)。
”
现在考虑一个情况:
由于电磁干扰,某消极报错节点发生一个本地错(其它节点未发现有错),它就发一个消极报错标志(P.E.Flag),因为它是隐位,其它节点对这个消极报错标志也无响应。
这一消极报错帧的报错标志在数据帧ACK分界符后的EOF部分得到确认(图1),但是它的消极报错帧分界符(P.E.Del)延续到EOF域最后一位以及服务间隔之后。
如果此时有3bit的总线空闲时间,那么新帧的开始位(SOF)将是该消极报错节点服务间隔的第一位,按ISO16845标准,此显位被解读为对超载帧的请求,由消极报错节点发的超载帧将引起其它节点的位填充错,使它们发主动报错帧,主动报错帧与超载帧将在总线上叠合,虽然比特流的解释对该消极报错节点和其它节点而言是不同的,但二种帧分界符的结束时刻是一样的,所有节点都会在此时刻复位CAN协议状态机的状态,使它回到开始服务间隔的状态。
这解释了BoschCAN协议的说明。
但如果对3bit总线空闲没保证,那又如何?
图1消极报错接收节点本地错
对报错帧分界符格式错的检查在国际标准化组织(ISO)的标准ISO-16845“RoadVehicles-ControllerAreaNetwork(CAN)-Conformancetestplan“[3]中明确有规定:
在消极报错帧分界符中的任何显位是一种格式错。
第7.5.6款和8.5.13款是对应消极报错接收节点和消极报错发送节点消极报错帧分界符格式错的测试方法,第7.6.12款和8.6.9款是消极报错节点消极报错帧分界符查到格式错时接收错计数器与发送错计数器增加机制的检查方法。
因此,消极报错节点与其它节点不同步时,另一个节点开始发新消息,它的SOF将被该消极报错节点视为消极报错帧分界符内的格式错。
它将在其它节点新帧传送过程中开始一个新的消极报错帧,新消极报错标志将在其它节点新帧的EOF部分得到确认,新消极报错帧分界符再一次延续到超过其它节点服务间隔之后。
只要挂起的消息未发完,这一过程将一次又一次重复。
在此时间段里消极报错节点不能接收或发送任何消息,因为它总在不断发消极报错帧。
这延迟了该节点应发送的消息,不管消息的优先级有多高。
这就引起了优先级逆转。
因为电磁干扰的随机性质,无法对系统进行调度分析。
这个消极报错节点有二种可能的方式逸出循环。
如果在后面不断发送的新帧的某处出现了主动报错帧,该消极报错节点的消极报错帧将与主动报错帧重叠,重复过程结束。
但在正常应用场合,错误的发生是很少的,因此后续的传送越正常,该消极报错节点等效离线状态时间越长。
另一个可能是经一些传送后不再有挂起待发的帧,总线空闲时间足够长,就如协议设想那样,能使消极报错帧的分界符正常结束,消极报错帧分界符格式错的重复就结束。
2.可能的情景还有很多
除了上述消极报错接收节点的本地故障会引起等效离线的失效以外,还有其它情景下消极报错节点可能与簇内其它节点丢失状态同步。
这些情景在三方面超出了BoschCAN协议设计时的设想。
第一,不仅消极报错接收节点会丢失同步,而且消极报错发送节点也会丢失同步。
第二,在有的场合,为了实现同步所需的总线空闲时间要更多(至少为10bit)。
第三,不仅消极报错节点的本地错会引起问题,在少数场合,主动报错节点的本地故障也能引起问题。
下面举一些例子,实际有问题的情景不止这些。
在图2中,消极报错接收节点由于电磁干扰未能查出总线上的一个全局错,即漏判性质的本地错,但是过后它发现了因其它界节点所发主动报错帧引起的位填充错,它发的消极报错帧将迟于其它节点的主动报错帧结束,因此它丢失了同步。
在图3中消极报错接收节点在EOF域中发生误判性质的本地错,
图2全局性填充错时消极报错接收节点有本地错
图3消极报错接收节点有本地错
图4消极报错发送节点在ACK位有本地错
因为它的消极报错帧不会被其它节点看到,它们以正常方式结束收发。
消极报错节点的消极报错帧要远迟于其它节点的结束时刻结束,在此情况下,为使消极报错节点能同步,最坏要有10bit的总线空闲时间才行。
当总线有10bit空闲时间时,新帧的SOF会被消极报错节点看作超载帧的请求,尽管在超载帧结束后节点间实现了状态同步,但是却有因超载帧造成的不必要的开销。
这里理想的总线空闲时间为13bit。
图4里由于电磁干扰消极报错发送节点未能正确读取ACK位,它发出的消极报错帧将被其它节点看作ACK分界符和EOF域,就像消极报错接收节点一样,它失去了与其它节点的状态同步。
在图5中,消极报错发送节点的本地错发生在CRC分界符处,它的消极报错标志的第一位被其它节点的ACK位改写,消极报错帧的剩余部分被其它节点看作ACK分界符和EOF域,状态不同步再次发生。
图5消极报错发送节点有本地错
在图6中消极报错发送节点的本地故障造成ACK分界符的误读,它开始一个消极报错帧,而其它节点把它读为数据帧的EOF域,此
图6消极报错发送节点在ACK分界符有本地错
图7主动报错节点的本地错引起消极报错节点故障
时消极报错发送节点状态与其它节点不同步。
当一个规模较小的系统仅剩一个主动报错节点时,它的本地错引起一个主动报错帧,其主动报错标志会被其它消极报错节点视为位填充错或格式错,从而开始它们的消极报错帧(见图7),结果是主动报错帧较早结束,状态的不同步再次出现。
3.后果
当消极报错节点落入上述分析的情景时,它没机会收发消息。
直到总线空闲或者有一个主动报错节点发主动报错帧时才可能恢复正常。
由于错误的发生是随机事件,在正常应用环境中其间隔会相当长。
消极报错节点逸出这种等效离线状态的最坏情况是它要等到总线成为空闲。
此时间等于系统中所有消息的最坏响应时间中的最大的一个。
以Tindell改造过的SAE典型试验数据集为例[4],最大最坏响应时间在总线速率为125Kbps时为49.192ms,250Kbps时为14.404ms([4]第14页)。
总线的利用率相应为94.2%和47.1%。
如果故障发生在收发制动压力的消息(其周期为5ms)的节点,这时汽车可能在125Kbps时丢10次数据,250Kbps时丢3次数据。
在此期间作用在轮子上的制动力将不是所期望的,汽车将有难以预计的风险。
以每小时100公里行驶的汽车将在1.4m或0.4m的距离上失去控制。
消极报错节点状态同步的丢失可能比上述最坏情况早些结束,但这完全取决于错误的统计学特性,这超出了CAN调度分析的假设,使CAN设计工具不精确。
当消极报错节点丢失同步后,即使有一些未确知的总线空闲时间,它们可能引入超载帧,它们也是调度分析时未加考虑的。
因此设计工具难以给出有足够精度的真实结果。
这会危害到所设计系统的安全性。
另外,超载帧也降低了总线的吞吐率。
4.解决方案
经仔细分析所有可能的全局错和本地错以后,在各种情景和合适的消极报错帧分界符长度间的关系就建立起了。
所谓合适是指消极报错节点能在出错后依然与其它节点的状态保持同步。
在一些场合消极报错帧分界符应为原来的8bit长,在有些场合它应是2bit长,在另一些场合它应是1bit长。
若本地错发生在数据帧或远程帧的EOF域,为了实现正确的同步,最好的选择是在EOF的最后一位处对CAN协议状态自动机进行复位。
需要根据总线上的数据流以及错误发生的位置加以判断,该消极报错节点是发生了全局错还是本地错,从而确定应有的消极报错帧分界符长度,抑或启动协议状态机的复位信号,完整的解决方案已申请了专利。
将消极报错帧分界符长度简单地改为另一个固定的长度可能简化实现的复杂性,在某些场合它可以避免在消极报错节点有本地错时产生长时间的等效离线状态的失效,但是这一解决方案无法应对所有可能丢失同步的情景。
同时它还残留有其它的一些缺点:
例如增加了消极报错节点不能接收的机会;因重复出错或超载帧造成调度结果的确定性的下降;本节点或其它节点所发消息优先级的逆转;因超载帧造成带宽的无效占用。
所以这种简化造成性能下降是得不偿失的。
按修改后实现的消极报错帧不能通过现有标准ISO16845第7.5.6款和8.5.13款的全部测试设置,因为消极报错帧分界符的长度不再是固定的8bit。
CAN标准ISO11898及ISO16845应考虑应用中的安全的要求作相应的修改。
5.小结
在消极报错帧分界符内的格式错后果长期以来被忽视了。
即使在一般应用中等效离线状态和优先级逆转是也是不能容忍的,仅因为一次电磁干扰造成的1bit错所要承受的惩罚太大了。
为了将CAN用于更为严格的安全攸关的应用中,这个问题是非解决不可的。
6.
参考文献:
[1]”CANinAutomationcelebratesfirst15years”,EmbeddedSystemsDesignEurope,August/September2007,p10
[2]RobertBoschGmbH.CANSpecificationVersion2.0,September1991
[3]ISO/TC22/SC3.Internationalstandard:
ISO16845”RoadVehicles-ControllerAreaNetwork(CAN)-Conformancetestplan”2004
[4]K.W.TindellandA.Burns.“GuaranteedMessageLatenciesforDistributedSafety-CriticalHardReal-TimeControlNetworks”.TechnicalReportYCS229,Dept.ofComputerScience,Universityof
York,June1994.YCS-94-229.pdf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一种 CAN 安全隐患
![提示](https://static.bdocx.com/images/bang_tan.gif)