摘要:汽車的功能安全是當前汽車技術發(fā)展的重點之一,也是車廠競爭的利器。安全的實現(xiàn)與通信有關,現(xiàn)在90%以上的車用CAN總線來實現(xiàn)控制用的通信。已經(jīng)發(fā)現(xiàn)CAN總線有高錯幀漏檢和長的等效離線與真正離線的機制性隱患,本文對這2種隱患的發(fā)生概率及其后果作了進一步分析,漏檢的錯幀可能最多是原數(shù)據(jù)的33倍或1/33,等效離線造成的失效概率在誤碼率為10-5時可達到16.8/h(總線利用率40%,速率500 kbps、平均幀長100位)。如先發(fā)生錯幀漏檢,應用收下錯幀,又發(fā)生離線,阻斷正確幀的改正作用,應用將長時間工作于錯誤狀態(tài)下,是十分危險的。
關鍵詞:CAN;錯幀漏檢;離線;功能安全
引言
ISO26262道路車輛的功能安全國際標準已經(jīng)通過。車企實施這項標準是自利的事,因為可以減少出事故后的賠償損失,同時也是爭取客戶的競爭手段之一。所以,回顧已有的實踐是非常必要的。參考文獻指出,ISO26262強調(diào)了安全的管理與安全的文化理念。安全不再僅是一種事后的風險評估,他還建議用參考文獻系統(tǒng)原理性過程的風險分析方法(system theoretic processhazard analysis method)實施ISO262 62。在這種方法中人、組織、機器等相互之間信息傳遞出錯的過程及其風險都要加以評估。作為車輛控制設備間的信息傳遞,當前的車輛中主要是CAN總線,CAN總線幀的丟失、錯幀漏檢、送達次序的錯誤、超過時限等帶來的風險均應定量地分析。
筆者在本刊就CAN總線的隱患發(fā)表過若干文章,簡單地講,主要有2個致命的隱患:非常大的錯幀漏檢率,比Bosch公司聲稱的大幾個數(shù)量級;由于協(xié)議規(guī)則間的不匹配,連續(xù)出錯造成的等效離線,可能的持續(xù)時間很長。這2種錯誤單獨發(fā)生就會影響安全性,如果連著發(fā)生風險就更大:發(fā)生第1個故障時應用會收下錯誤的原始數(shù)據(jù),接著發(fā)生的第2個故障將阻斷數(shù)據(jù)刷新,從而使應用的錯誤持續(xù)一段時間,造成系統(tǒng)的安全事故。
1 錯幀漏檢造成的值域失誤
圖1是發(fā)生位錯(bit flip)而產(chǎn)生錯幀漏檢的2個例子,具體構造方法可見參考文獻。它們都滿足差錯Ec=U·G,其中G是CAN總線的CRC生成多項式G=(110o,0101,1001,1001)。圖中,Ec=U·G=(1000,0010,0001,1100,1110,1001)。由于Ec是G的倍數(shù),所以CRC檢驗不出錯。
構造錯幀漏檢的例子時,第1個1的作用是確保填充規(guī)則在第6位后發(fā)生,這個1既可以是發(fā)生在DLC中的代碼,也可以視為數(shù)據(jù)域中填充進來的1。所以它的值可以不考慮作Tx與Rx的值。在此種情況下,如果第1個位錯發(fā)生在Tx的第2位,收到的Rx值將是Tx的33倍,或者1/33。如果將第1次位錯發(fā)生在1后面幾位,Rx值也會比Tx變化很多倍。
2 等效離線發(fā)生的概率
等效離線的發(fā)生有3個條件:①節(jié)點已經(jīng)在消極報錯狀態(tài)(error passive status);②該節(jié)點發(fā)生了局部錯;③由于在消極報錯幀分界符內(nèi)遇到其他節(jié)點掛起待發(fā)幀的發(fā)送而造成連續(xù)出錯。要考慮的是由于誤碼而報錯的概率與處于總線峰值負載的概率。
消極報錯幀規(guī)定:在發(fā)送連續(xù)隱位時讀回6個連續(xù)的相同位時視為報錯標志發(fā)完,然后開始發(fā)隱位,讀回隱位時作為消極報錯幀分界符開始,開始后必須有連續(xù)7個隱位,如內(nèi)又有顯位,就作為新錯,節(jié)點要重發(fā)消極報錯幀。
對于消極報錯發(fā)送節(jié)點,發(fā)生局部錯的位置有2種。在ACK分界符前時,消極報錯標志的連續(xù)隱位會被接收節(jié)點以填充規(guī)則檢驗、CRC檢驗發(fā)現(xiàn)有錯,引起接收節(jié)點報錯。它們的主動報錯幀的連續(xù)6個顯位決定了發(fā)送節(jié)點消極報錯幀報錯標志結束時間的同步,不會發(fā)生分界符內(nèi)出錯的情況。
在ACK及分界符后到EOF第3位間有局部錯時,消極報錯標志(P.E.Flag)的6個隱位會被接收節(jié)點認為是正常的發(fā)送幀結尾部分和2位服務間隔(I.M.)。別的節(jié)點所發(fā)新幀開始位(SOF),將落入發(fā)送節(jié)點消極報錯幀分界符(P.E.Del)內(nèi),形成新錯,如圖2所示。發(fā)送節(jié)點新的消極報錯幀將在新幀的ACK分界符處開始。然后,只要有掛起待發(fā)幀,這種出錯狀態(tài)就重復下去。而EOF第4~7位發(fā)送節(jié)點發(fā)的消極報錯幀由于未見到連續(xù)的6個相同位,發(fā)送節(jié)點要等待別的節(jié)點所發(fā)新幀的ACK分界符處開始才有機會見到,等同于在ACK分界符處開始的消極報錯幀。由此可知,產(chǎn)生等效離線錯誤的位置數(shù)為9位,其概率為9·BER。
在消極報錯狀態(tài)的發(fā)送節(jié)點遇到16次重復錯后,會進入真正離線狀態(tài),所以要求取有16幀掛起待發(fā)的機會。這與ECU的設計有關,較難分析。我們以仿真來求取,底盤CAN總線系統(tǒng)內(nèi)一般有6個節(jié)點,約有60個左右的消息要傳送,則每個節(jié)點平均有10條消息,假定周期為10 ms、20 ms、50 ms、100 ms、1 000 ms等各有2條,每條幀長為97位,在500 kbps下6個節(jié)點的總線負載率總計43.4%。當一個節(jié)點等效離線后,還有約50條消息要發(fā)。在時鐘差的影響下,可以構成一個峰值,節(jié)點在相對頻差-0.2、0.4、0.6、0.8×100 ppm下的仿真結果如圖3所示。其中隊長度每0.2 ms統(tǒng)計一次,累計出該隊長在整個仿真時間內(nèi)的出現(xiàn)次數(shù)。
為了便于ECU編程,采樣與寫CAN總線控制器在一個任務中完成,所以假定10條消息在4 ms內(nèi)就緒。仿真開始時是最壞情況:所有節(jié)點同時開始寫CAN總線控制器任務。在上述頻差下,節(jié)點1、2經(jīng)500 s差10 ms,也就是說2個節(jié)點的10ms周期的消息就緒時間又重合了,其他節(jié)點與節(jié)點1的組合各為250 s、166 s、125 s。由于較長周期消息對掛起隊長的影響較小,所以仿真的時段取得較短。以600 s的結果計算,掛起長度為16以上的情況有3 590次,占600 s內(nèi)傳送的1.2×10-3。需要特別注意的是,掛起隊長的分布不是均勻的,因此處于等效離線而轉為真正離線的機會也不是均勻分布的。由上述仿真60 s、600 s的結果看,掛起長度為16以上的情況都是3 590次,如果在最壞情況60 s內(nèi)遇上了的機會便是1.2×10-2。如果在最壞情況6 s內(nèi)遇上掛起長度為16以上的情況有1 005次,機會便是3.3×10-2 。
圖中隊長度18的出現(xiàn)數(shù)比隊長度17次的多,解釋如下:雖然每個18隊都要經(jīng)過17隊而下降,但是處于18隊時仍可能增長到19隊或更長,它們退下時又要經(jīng)過18隊狀態(tài)。而在某時,由于同時就緒的消息多于2個,所以使隊長度直接由小于17而跳到18,從而使18隊的出現(xiàn)次數(shù)多于17隊。
于是,消極報錯發(fā)送節(jié)點發(fā)生等效離線而進入真正離線的概率是P=BER×9×1.2×10-3 ,其中BER為誤碼率。這是一個樂觀的估計。
對消極報錯接收節(jié)點,發(fā)生在幀內(nèi)任一位的局部錯均可能產(chǎn)生類似的情形,即消極報錯幀分界符內(nèi)遇到其他節(jié)點掛起待發(fā)幀的發(fā)送,造成再出錯的情形。假定幀長為135位,那么其等效離線的概率是P=BER×1 35×1.2×10-3。
3 離線的時間
發(fā)生等效離線的節(jié)點不再能發(fā)送,所以應扣除消息源是該節(jié)點的那些幀。此時的分析方法可以參考CAN總線的傳統(tǒng)調(diào)度分析方法,最壞的情況是最低優(yōu)先級消息的送達時間。這樣分析的結果與應用的具體配置有關,對每一個節(jié)點是不同的。
假定掛起待發(fā)的消息有4字節(jié)數(shù)據(jù),采用11位ID,平均填充位取8位,再加3位服務間隔,那么16幀導致的等效離線為16×(84+3)=1 392位,真正離線的時間為128幀,最壞情況為幀間有10位的空閑。所以真正離線將有128 x(84+3+10)=12 416位。二者相加,消極報錯發(fā)送節(jié)點出錯后會有總計13 808位的不能服務的時間,在500 kbps速率下,這相當于27.6 ms。如果采用29位ID,填充位也增加,幀長變?yōu)?05位,此時消極報錯發(fā)送節(jié)點出錯后不能服務的時間將達34.5 ms。有的車采用250 kbps速率,那將有69 ms不能服務的時間。
4 2個隱患在應用上的影響
隱患實際發(fā)作時就表現(xiàn)為系統(tǒng)內(nèi)的故障。
4.1 錯幀漏檢的影響
在單一接收節(jié)點的情況下,錯幀傳遞的信息值域的變化很大,有些應用算法加有絕對值的限幅器,或者變化速度的限幅器,可以減少這一故障的危害性。但是這些措施有時是不可行的,或者以降低系統(tǒng)的動態(tài)性能為代價,顯然是應用設計部門不希望的。
在有多個接收節(jié)點的情況下,這一故障就造成數(shù)據(jù)完整性問題,例如在油門、離合器和剎車系統(tǒng)中油門的開度有不同的解釋,系統(tǒng)就難以協(xié)調(diào)工作。
在冗余系統(tǒng)中,如果沒有表決機制,就可能收下錯誤的數(shù)據(jù),就必須增加軟件及時間資源來解決問題。
4.2 離線的影響
如上所述,消極報錯發(fā)送節(jié)點出錯后不能服務的時間將達34.5 ms,這在一些應用中是不能接受的,例如電子穩(wěn)定控制系統(tǒng)(ESP)中,Bosch ESP8要求信號更新周期最小20 ms。消極報錯接收節(jié)點出錯后不能服務的時間較短,但是其發(fā)生的概率遠大于消極報錯發(fā)送節(jié)點出錯后不能服務的概率(15倍),其影響尚未充分研究。
車輛以100 km/h速度運行時,延遲34.5 ms開始剎車意味著已運動0.94 m,對駕駛員來說是不能接受的。2010年豐田公司Prius的剎車能量回收軟件有0.06 s延遲,造成剎車距離長了0.6 m,進行了召回。
4.3 2個故障先后發(fā)生
應用收下了一個錯誤的數(shù)據(jù),然后又發(fā)生了第二個故障,無法改正第一個錯誤,就非常危險。例如向內(nèi)道運動時轉向角是5°,但是由電動助力轉向ECu發(fā)往ESP-ECU的幀被讀錯為30°,則ESP幫助實現(xiàn)30°轉向,如ESP-ECU或電動助力轉向ECU發(fā)生離線故障,34.5 ms內(nèi)仍保留這30°的錯誤命令,就會沖向隔離帶或?qū)Ψ杰嚨馈?br />
下面分析其概率:假定總線工作于500 kbps,總線負載率為40%,平均幀長為100位,那么每小時送7.2×106幀。筆者對參考文獻作了新的修正,得到錯幀漏檢概率為Pud=1.67×10-7,仍比Bosch的(Pud=4.7×10-11)高幾個數(shù)量級,與Tran的結果相近(Pud=1.3×10-7)。
如考慮通道錯概率=0.001(它考慮了誤碼率的不均勻分布,例如每1000幀錯1幀),那么可算出殘差率為Pres=1.67×10-10??伤愕玫?個故障造成的失效率Pfailure1=1.2×10-3/h。當ber=0.001時第2個故障出現(xiàn)的概率P2nd=1×10-5,造成的失效率為Pfailure2=72/h。由此推斷2個故障先后出現(xiàn)時的失效率Pfailure1+2=1.1×10-3/h。
CAN總線已經(jīng)使用于安全攸關的系統(tǒng)中,例如電子穩(wěn)定控制系統(tǒng)(ESP)。按照道路車輛的功能安全國際標準ASIL-C的要求,系統(tǒng)的故障率應小于10-7/h。這包括許多可能失效的因素,例如傳感器失效、CPU失效、接插件失效、電源失效等,甚至鏍釘未擰緊。通信系統(tǒng)分配的份額一般為1%,即要求達到小于10-9/h。由表1可知,錯幀漏檢與離線的故障都達不到。即使在ESP中,因連續(xù)發(fā)生2種故障而產(chǎn)生失效的概率也相當大,只有在誤碼率小于10-4的情況下才能達到安全要求。實際的車內(nèi)環(huán)境很差,有的車廠為了節(jié)省費用,對電磁干擾源頭處理就不足,干擾可能引起較大的誤碼率。還有車外環(huán)境的影響,高壓線、大功率電臺、雷達站等附近的干擾就大。這都可能造成誤碼率大于10-4,使系統(tǒng)失效。
5 軟件補丁方案實現(xiàn)難點
在參考文獻中提出過添加額外的CRC檢驗來改善錯幀漏檢,對已有的應用難以執(zhí)行。它要占用數(shù)據(jù)域,由應用軟件生成和檢驗,這要耗費一定的時間,檢驗出錯誤后要另外發(fā)幀通知別的節(jié)點,以及要求重發(fā)。所有節(jié)點為取得一致性都得有計時器,大大延遲整個接收過程。出錯重發(fā)的時間也大于原CAN總線的時間,破壞了原調(diào)度分析的結果,因此需要重新進行認證。
已有的應用已經(jīng)采用8字節(jié)數(shù)據(jù)的,就需要拆分成2幀。需要增加標識符,這要在接收節(jié)點增加或修改濾波的設置,還要增加合并機制。這都增加了軟件工作及其正確性的驗證工作,特別是涉及不同廠家的ECU時就更復雜了。
對等效離線問題,除了修改消極報錯幀分界符長度外,還可以用完全取消消極報錯狀態(tài)的方法:例如用市售CAN總線芯片出錯計數(shù)器達到96時的中斷,由應用決定如何修改工作模式。新的模式可以是認為通信已失效,便進入降額使用狀態(tài),同時復位通信,等一段時間再投入正
常運行。這種方案是將離線的時間變?yōu)槌A浚⒆寫弥馈K]有減少離線的概率,只是可能減少一次離線的時間。
這種方案的問題是,從開始降額到實現(xiàn)降額的過程并不安全(沒有剎車,車并不立即降速)。另外,頻繁地在正常/降額模式間切換會引起消費者的不安,失去對車可靠性的信任感,對車廠是極為不利的。
由此可見,軟件補丁的方案對現(xiàn)有車的改進極為有限。
以上分析的CAN總線隱患完全是協(xié)議設計不周造成的,因此協(xié)議要改。把CAN總線的優(yōu)點繼承下來,物理層仍可沿用,線纜也不用改,甚至印刷版都不用改,用到安全攸關的場合仍可能是合適的。





