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