關(guān)于CAN隱患的爭辯
摘要 對于在《單片機與嵌入式系統應用》上發(fā)表的關(guān)于CAN隱患的2篇文章,Bosch對比作出了答復。Bosch在聲明中默認了故障約束機制會(huì )造成發(fā)送與接收延遲現象的存在,但未提及其帶來(lái)的惡性后果;強調這樣做的好處,稱(chēng)這是特色而不是錯誤。本文在分析等效離線(xiàn)或真正離線(xiàn)對應用帶來(lái)壞處的基礎上,說(shuō)明此事的嚴重性――可能引起大規模的召回事件。故障約束機制的好處與壞處是可以分開(kāi)的,改進(jìn)CAN不僅在現在是必須,也可進(jìn)一步提高CAN在未來(lái)應用中的競爭力。
關(guān)鍵詞 CAN 故障 安全 故障約束機制
關(guān)于CAN隱患的爭辯始于本刊發(fā)表的2篇文章,一是“CAN總線(xiàn)系統中的一種安全隱患”,一是“CAN消極報錯發(fā)送節點(diǎn)變?yōu)殡x線(xiàn)狀態(tài)的故障“。這2篇文章在送稿前已經(jīng)發(fā)給國內外的一些專(zhuān)家征求意見(jiàn),尚未有反駁的意見(jiàn)。由于此事關(guān)系重大,涉及許多單位的利益,例如芯片供應商、開(kāi)發(fā)工具供應商、ECU供應商、汽車(chē)制造商、高層協(xié)議供應商、高層協(xié)議產(chǎn)品提供商、各類(lèi)服務(wù)提供商等等,為了避免這些單位由于既得利益的驅動(dòng)有意無(wú)意地淡化問(wèn)題的嚴重性,需要一個(gè)獨立的代表第三者利益的機構來(lái)考察與評判問(wèn)題是否存在,及其危害性。這個(gè)第三方利益就是終端用戶(hù),例如汽車(chē)的駕駛與乘用人員、行人及與此有關(guān)的保險公司、道路管理單位等。因此,不僅應該告知CAN產(chǎn)業(yè)的有關(guān)方,也應告知利益有關(guān)方,才能得到正確的恰如其分的應對?;诖朔N考慮,筆者將2篇文章的英文稿送美國國家交通部公路交通安全管理處(U.S.Department of Transportation,National Highwav Traffic Safety Administration)的網(wǎng)絡(luò )熱線(xiàn),提請他們注意。后來(lái)這件事大概由他們轉到了國際標準化組織(ISO)。ISO的TC/22/SC3負責車(chē)用通信有關(guān)業(yè)務(wù),其TC/22/SC3/WG1/TF1的組長(cháng)是CiA的主席Zeltwanger先生。CiA曾有人作了回復,筆者也作了答復,最后由 Zeltwanger。先生轉來(lái)對此問(wèn)題的正式聲明作為答復。這是對問(wèn)題的答復,并不是對個(gè)人的答復,這個(gè)聲明是由ISO中國CAN專(zhuān)家組轉來(lái)的。(它的英文全文見(jiàn)本刊網(wǎng)站www.mesnet.com.cn。)下面是Bosch聲明要點(diǎn)與筆者的觀(guān)點(diǎn),在引述Bosch聲明時(shí)將力求準確。
Bosch聲明的標題是“它不是隱患,而是特色”(It's not
a bug,it's a feature!)。在引用參考文獻[1―2]時(shí)說(shuō),“在那2篇文章中有一些對CAN協(xié)議故障約束機制,特別是對由消極報錯狀態(tài)下看到本地錯的關(guān)切?!?在CAN總線(xiàn)上網(wǎng)絡(luò )流量很高以致連續幀之間不再有空閑時(shí)間時(shí),以及消極報錯節點(diǎn)看到本地錯(即未被其他節點(diǎn)看到的錯)時(shí),它將無(wú)法完成其消極報錯標志。后果是這個(gè)節點(diǎn)將不再能收發(fā)幀,直到它遇到空閑時(shí)間或其他節點(diǎn)發(fā)的主動(dòng)報錯幀。消極報錯狀態(tài)的發(fā)送節點(diǎn)會(huì )由此而使出錯計數器加上去,直到達到離線(xiàn)狀態(tài)?!?這是CAN協(xié)議故意要達到的行為?!?種方法企圖解決的是1個(gè)并不存在的問(wèn)題?!?br /> 上述引述與原文略有差異??偩€(xiàn)上空閑的分布是不受控制的,尖峰負載也是不可控的,即使有部分空閑也不能保障消極報錯幀正確結束。尖峰負載是由消息到達時(shí)間的本質(zhì)決定的,事件觸發(fā)消息的到達時(shí)間是隨機的,周期性消息的到達時(shí)間隨本地時(shí)鐘而變。例如,有2個(gè)初始相位相差5 ms的消息,它們的振蕩器相差200×lO-6,它們的相位差在25 s后就消失了。在某個(gè)公倍數時(shí)間點(diǎn)上,所有的消息就會(huì )有接近O的相位差,就形成CAN調度分析最壞響應時(shí)間時(shí)假定的最壞峰值負載。這種差異不影響對 Bosch聲明的進(jìn)一步分析。就聲明的上述表述而言,“特色”、“故意要達到的行為”等語(yǔ)句實(shí)際上同意了等效離線(xiàn)和真正離線(xiàn)后果的存在,后面還有 Bosch對此行為的直接描述。不過(guò),Bosch并不認為此后果是有害的,而是強調此后果的有利方面。
它說(shuō):“故障約束機制的目的是防止有故障的節點(diǎn)干擾其余節點(diǎn)間的通信?!比缓蠼忉屃诉M(jìn)入消極報錯狀態(tài)或離線(xiàn)狀態(tài)就可以達到上述目的。并說(shuō)“1個(gè)因REC而進(jìn)入消極報錯狀態(tài)的接收節點(diǎn)在成功收到1個(gè)無(wú)錯的消息后,它能切換回主動(dòng)報錯狀態(tài)(見(jiàn)故障約束規則8),使它能至少再發(fā)1次主動(dòng)報錯幀?!痹谡?wù)摽偩€(xiàn)負載應小于50%后,它說(shuō)“尖峰負荷典型地是由總線(xiàn)上的擾動(dòng)造成,此時(shí)通信要中斷一段時(shí)間,待發(fā)的傳送會(huì )累積起來(lái)。當擾動(dòng)結束時(shí),所有這些待發(fā)的消息將按它們的標識符一個(gè)接一個(gè)送出?!绻麛_動(dòng)是由有故障節點(diǎn)引起,并在節點(diǎn)進(jìn)入消極報錯狀態(tài)結束,那么故障約束機制想要的功能是把該節點(diǎn)保持在消極報錯狀態(tài),至少讓被該干擾推遲的所有消息發(fā)完,即尖峰負荷結束。
在這里,尖峰負荷并不隨著(zhù)干擾的消失而消失,CAN作為一種事件觸發(fā)協(xié)議,負荷的分布完全是隨機的,50%負載的約束并不能防止等效離線(xiàn)或真正離線(xiàn)狀況的出現,參考文獻[1]中引述的例子已證明了這一點(diǎn)。Bosch把引入消極報錯狀態(tài)的好壞后果混為一談。當節點(diǎn)進(jìn)入消極報錯狀態(tài)后其報錯幀全是隱位,本來(lái)可以不再干擾其他節點(diǎn)的正常通信,沒(méi)有必要讓它退出通信。此外,在這一段表述中可以清楚地看到,CAN故障約束機制要讓被該干擾推遲的所有消息發(fā)完,至少要禁止消極報錯狀態(tài)節點(diǎn)發(fā)送(不管消極報錯狀態(tài)節點(diǎn)待發(fā)的消息優(yōu)先級多高),這印證了參考文獻[1-2]的分析,但是它未提及接收也被禁止了。
評論