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