- UID
- 1062083
- 性别
- 男
|
关于CAN隐患的争辩始于本刊发表的2篇文章,一是“CAN总线系统中的一种安全隐患”,一是“CAN消极报错发送节点变为离线状态的故障“。这2篇文章在送稿前已经发给国内外的一些专家征求意见,尚未有反驳的意见。由于此事联系重大,涉及许多单位的利益,例如芯片供应商、开发工具供应商、ECU供应商、汽车制造商、高层协议供应商、高层协议产品提供商、各类服务提供商等等,为了防止这些单位由于既得利益的驱动有意无意地淡化疑问的严重性,须要一个独立的代表第三者利益的机构来考察与评判疑问能不能存在,及其危害性。这个第三方利益就是终端用户,例如汽车的驾驶与乘用人员、行人及与此有关的保险公司、道路管理单位等。因此,不仅应该告知CAN产业的有关方,也应告知利益有关方,才能得到正确的恰如其分的应对。基于此种考虑,笔者将2篇文章的英文稿送美国国家交通部公路交通安全管理处 (U.S.Department of Transportation,National Highwav Traffic Safety Administration)的网络热线,提请他们留心。后来这件事大概由他们转到了国际标准化组织(ISO)。ISO的TC/22/SC3负责车用通信有关业务,其TC/22/SC3/WG1/TF1的组长是CiA的主席Zeltwanger先生。CiA曾有人作了回复,笔者也作了答复,最后由 Zeltwanger。先生转来对此疑问的正式声明作为答复。这是对疑问的答复,并不是对个人的答复,这个声明是由ISO中国CAN专家组转来的。(它的英文全文见本刊站点 www.mesnet.com.cn。)下面是Bosch声明要素与笔者的观点,在引述Bosch声明时将力求准确。
Bosch声明的标题是“它不是隐患,而是特色”(It's not a bug,it's a feature!)。在引用参考文献[1—2]时说,“在那2篇文章中有一些对CAN协议故障约束机制,特别是对由消极报错状态下看到本地错的关切。…… 在CAN总线上网络流量很高以致连续帧之间不再有空闲时间时,以及消极报错节点看到本地错(即未被其他节点看到的错)时,它将不能完成其消极报错标志。后果是这个节点将不再能收发帧,直到它遇到空闲时间或其他节点发的主动报错帧。消极报错状态的发送节点会由此而使出错计数器加上去,直到达到离线状态。…… 这是CAN协议故意要达到的行为。……2种要领企图处理的是1个并不存在的疑问。”
上述引述与原文略有差异。总线上空闲的分布是不受控制的,尖峰负载也是不可控的,即使有部分空闲也不能保证消极报错帧正确结束。尖峰负载是由消息到达时间的本质决定的,事件触发消息的到达时间是随机的,周期性消息的到达时间随本地时钟而变。例如,有2个原始相位相差5 ms的消息,它们的振荡器相差200×lO-6,它们的相位差在25 s后就消散了。在某个公倍数时间点上,所有的消息就会有接近O的相位差,就形成CAN调度分析最坏响应时间时假定的最坏峰值负载。这种差异不影响对 Bosch声明的进一步分析。就声明的上述表述而言,“特色”、“故意要达到的行为”等语句实际上同意了等效离线和真实离线后果的存在,后面还有 Bosch对此行为的直接描述。不过,Bosch并不认为此后果是有害的,而是强调此后果的有利方面。
它说:“故障约束机制的目的是防止 有故障的节点干扰其余节点间的通信。”然后解释了进入消极报错状态或离线状态就可以达到上述目的。并说“1个因REC而进入消极报错状态的接收节点在成功收到1个无错的消息后,它能切换回主动报错状态(见故障约束准则8),使它能至少再发1次主动报错帧。”在谈论总线负载应小于50%后,它说“尖峰负荷典型地是由总线上的扰动造成,此时通信要中断一段时间,待发的传送会累积起来。当扰动结束时,所有这些待发的消息将按它们的标识符一个接一个送出。……如果扰动是由有故障节点引起,并在节点进入消极报错状态结束,那么故障约束机制想要的功能是把该节点保持在消极报错状态,至少让被该干扰推迟的所有消息发完,即尖峰负荷结束。
在这里,尖峰负荷并不随着干扰的消散而消散,CAN作为一种事件触发协议,负荷的分布完全是随机的,50%负载的约束并不能防止 等效离线或真实离线状况的出现,参考文献[1]中引述的例子已证明了这一点。Bosch把引入消极报错状态的好坏后果混为一谈。当节点进入消极报错状态后其报错帧全是隐位,本来可以不再干扰其他节点的正常通信,没有必要让它退出通信。此外,在这一段表述中可以清楚地看到,CAN故障约束机制要让被该干扰推迟的所有消息发完,至少要禁止消极报错状态节点发送(不管消极报错状态节点待发的消息优先级多高),这印证了参考文献[1-2]的分析,但是它未提及接收也被禁止了。
现在大家都认识到引入消极报错状态是一个积极的要领,对此并无异议。而bosch只看到故障约束机制设计的有利方面,未留心到它在帧同步上造成通信服务缺失的后果。在声明中对此只字未提。那么通信服务缺失的后果能不能是一个故障或bug?这应该由用户根据其对运用 能不能有害来确定,并不能因把它称为“特色”而改动。进一步研究表明存在后果严重的可能性。基本的线索是:车内存在严重的电源传导干扰(ISO7637干扰类型D→CAN收发器在电源跌落时CANH— CANL差减少,会有写“0”读回“1”的bit错→CAN协议发觉错后发报错帧的规定(即能重复发报错帧)→CAN协议在报错标志中发觉 bit错时出错计数器+8的规定。一个较长时问跌落就可以将节点推入消极报错状态(消极报错状态并非罕见)。然后一次本地故障把它推入失去服务能力的状态。CAN总线失去服务后对运用 的危害的仿真已有文章报道,如在弯道上的外冲或急转。而故障约束机制设计上的这个bug是造成这一危险的因素中的关键一环。
失去服务能力的后果破坏了实时控制运用 的基础——正时性(timeliness)。现在许多运用 只容许少量数据的丢失,而且能容许数据丢失的运用 已经考虑了消息的冗余,若要考虑这样长时间的失去服务能力,数据的冗余就要多得更多,这将显著添加总线上的流量。要考虑这个bug,又要符合Bosch的50%的限定,使运用 进入更加为难的境地。
安全标准IEC61508、EN50159将在汽车行业推行,在执行这类标准时要从可靠性角度作故障的危害与风险分析。由于一个小故障会引起一个元件出错或失效,元件的错或失效造成部件出错或失效,然后造成子系统出错或失效,从而造成更上一层系统出错或失效。必须分析清楚这个链并研究其出错或失效的概率,才能判断这个最原始的错能不能会对安全构成威胁。CAN的这个故障是引起系统失效的一个非常典型的故障。在一般通信系统中,一个本地错引起1帧的丢失,如该运用 上可容忍,失效的后果到此为止。然而CAN的这个故障有可能引起100个左右不同接收帧的丢失。不仅如此,它使该节点的所有帧都暂时不能发送,也就是说会影响到其他的控制系统的功能。例如,对CAN总线挂上ECU节点的不同方案,不能发送发动机转速信号就会影响变速器、ABS、ASR、空调,轮速信号不能发送就可能影响电喷、变速器、ASR,变速比信号不能发送就会影响到电喷、ASR、废气再循环,含有网关的仪表板单元不能正常发送可能引起发动机不能点火。也就是说,由一个本地故障转为一个节点失效,然后又转为若干个功能失效。有些功能的失效会影响能耗或排放,或使设备运行不平稳,但有的功能会影响制动和转向。
CAN总线失去服务能力会导致控制系统的失效。车辆是一个运动的物体,控制系统的失效会变为运动的失控,从而引起安全疑问。这对所有人都是沉重的压力,采取审慎与观望的态度是符合情理的,但如果CAN失去服务能力的流程存在,这个后果是回避不了的。
Bosch对恶性后果并未提及,这表示他们并未意识到这一点。参考文献[1]提到,这一等效离线或真实离线的开始源于消极报错状态节点的消极报错帧没有足够的时间结束。但可能的情景远超过Bosch在CAN2.O规范中的描述,如果他们原来就已知有如此多的情景,就会把这些情景都包括在CAN2.O中。他们也没有提醒过作调度分析工具软件的人们,由于任何优先级的消息在此隐患发作时都失去服务能力,且进入消极报错状态不是罕见的事,那么调度的效果就很小了 ——木桶的底是漏的,其余板长短的影响已退居次要地位甚至失去意义。bug影响了工具理论基础的完整性,调度的结果不能保证,就不能最终保证控制功能的实现。网上尚未见到Bosch有任何关于节点因故障约束机制设计而推迟收发的类似这次声明的报道。因此,由于未充分估计到故障会引起如此坏的后果,只能说这是一个bug。
实际上,消极报错状态下出现坏后果及失去服务能力的毛病是可以克服的。参考文献[1]提出了2种要领,也是Bosch声明提到的2种要领。其实还存在其他可能的处理方案,例如将消极报错帧分界符内的显位不视为错而视为超载帧的请求。此时经超载帧与其他节点的报错帧重合,可以使消极报错状态节点快速和其他节点取得同步,但这样做牺牲了超载帧占用的带宽,并使其他节点蒙受一次出错的不白之冤。所以参考文献[1]提出的是较好的方案。在保持引入消极报错状态的优点时不必死抱
它的缺点。失去服务能力的疑问得以防止,由于这个因素造成的对CAN消息负载率的限定也可减少,这样对大多数人都有优点。
已有的大量CAN运用 ,特别是那些现场条件较好,本身并非安全攸关的运用 (即使在汽车内,也有许多节点与安全联系不大),对CAN隐患的讨论不要恐慌,只需对自己的环境和运用 作评估,必要时补充作些测试即可。
对CAN隐患的讨论并不是要彻底否定CAN。尽管CAN尚有其他疑问与不足,甚至较为严重的疑问,但它仍然是当前最好的协议。CAN最突出的优点是出错自动重发功能。很久以来,关于事件触发协议与时间触发协议孰优孰劣的讨论中人们倾向于认为时间触发协议更为可靠,后者更适用于线控系统。但是研究表明,由于出错自动重发功能的存在,CAN的消息不正确概率比重复送2次消息的TTCAN小多个数量级。有理由相信时间触发的其他协议也会在类似的比较中显得逊色,除非它们采用更为复杂的上层纠错要领。上述bug使CAN的这一巨大性价比优势变得无用,所以对CAN执行 改良是非常有价值的。现在谁作改良,谁就能处理当前的急需,也就有机会在未来胜出,这是一个重新洗牌的机会。这一争辩由于Bosch的声明而使事情变得明朗,国际国内对此作出自己的结论的时间已经同步。
综合上述分析,笔者依然认为它是一个隐患。对我国IC、ECU、整车厂来说,必须加以重视并及时采取行动。决策是一个博弈的流程,落后将动摇消费者的信任,导致十分被动的境地。
参考文献
1. 杨福宇 CAN 总线系统中的一种安全隐患 [期刊论文] -单片机与嵌入式系统应用2009(1)
2. 杨福宇 CAN 消极报错发送节点变为离线状态的故障 2009(5)
3. Corno F A Multi-level Approach to the Ependability Analysis of CAN Networks for Automotive Applications 2004
4. Broster Ian.Burns Alan Rodr′?guez?Navas Guillermo.Comparing Real?time Communication under Electromagnetic Interference 2004
5. 刘亚飞 控制器局域网协议(CAN)技术隐患分析 2009(2) |
|