CAN優(yōu)先級倒置原因與對策分析
CAN總線(xiàn)起始于1986年左右,至今仍廣泛應用?,F在人們對安全的要求已大為提高,所以要不斷仔細審視CAN的安全性能?,F在已經(jīng)發(fā)現的重要的CAN問(wèn)題有:在消極報錯狀態(tài)下可能出現等效離線(xiàn),使節點(diǎn)不能收發(fā)的時(shí)間相當長(cháng)[1];錯幀漏檢率的估計不準,特別在誤碼率高時(shí)比Bosch CAN2.0數據高多個(gè)數量級[2],在單目的地址時(shí)影響數據正確性,在多個(gè)目的地址時(shí)會(huì )影響數據一致性;標準的振蕩源精度要求偏低[3],使誤用廉價(jià)器件成為可能,影響系統的穩定性;本文發(fā)現的優(yōu)先級倒置的可能性,使調度分析結果的可信度下降;在數據幀倒數第二位的局部錯可能引起不一致的接收重復或丟失[4]。所以在FlexRay尚未達到預定目標、無(wú)論在可靠性還是價(jià)格上能取代CAN以前,對CAN作進(jìn)一步的改進(jìn)仍然是非常有意義的。
CAN是一種代表性的事件觸發(fā)通信協(xié)議,同時(shí)發(fā)生的多個(gè)通信請求將按照消息的優(yōu)先級進(jìn)行無(wú)損仲裁,高優(yōu)先級的勝出。按照消息的優(yōu)先級進(jìn)行無(wú)損仲裁是CAN原始專(zhuān)利的唯一權利要求[5]。對于低優(yōu)先級的消息而言,送達時(shí)間將受到高優(yōu)先級消息的阻擾,在高優(yōu)先級消息為周期性時(shí),最壞送達時(shí)間是可以預先計算出的[6]。如果能安排好發(fā)送消息的初始相位并作寬松的時(shí)鐘同步,這個(gè)最壞送達時(shí)間可以大為減少。事件觸發(fā)協(xié)議的優(yōu)點(diǎn)是總線(xiàn)帶寬可以得到充分利用。另一個(gè)優(yōu)點(diǎn)是高優(yōu)先級消息可得到迅速發(fā)送。但是由于工業(yè)環(huán)境中普遍存在的電磁干擾,總線(xiàn)上會(huì )有毛刺,CAN總線(xiàn)的標準中已考慮到應對方法?,F在發(fā)現毛刺應對方法可能使節點(diǎn)的同步受到影響,從而損及高優(yōu)先級消息的發(fā)送機會(huì ),出現優(yōu)先級的倒置,動(dòng)搖了CAN總線(xiàn)的基本性能。
1 毛刺的存在
車(chē)內電磁環(huán)境惡劣, ISO 76372/3總結出代表性的傳導和輻射干擾。有人專(zhuān)門(mén)作了輻射干擾的實(shí)驗,參考文獻[7]的實(shí)驗中用24 V蓄電池給車(chē)內常用的繼電器供電(CAN系統供電是獨立的),電源線(xiàn)與CAN電纜靠得很近,在電纜線(xiàn)有屏蔽、線(xiàn)長(cháng)為2 m時(shí),手動(dòng)開(kāi)關(guān)繼電器時(shí)可以看到CAN波形上疊加的毛刺,輻射干擾實(shí)驗結果如圖1所示。
圖1 輻射干擾實(shí)驗結果
實(shí)際汽車(chē)上也見(jiàn)到CAN總線(xiàn)失效的報告[8]:豐田汽車(chē)在經(jīng)銷(xiāo)商產(chǎn)品報告中確認,由任何原因召回的車(chē)中發(fā)現丟失CAN數據的記錄有292宗。毛刺是引起CAN總線(xiàn)出錯的可能原因,其具體誘發(fā)過(guò)程需要仔細分析,不能掉以輕心。
2 CAN位時(shí)間與消息仲裁原理
CAN總線(xiàn)把位時(shí)間劃分為NBT等分的時(shí)間片,稱(chēng)為T(mén)q。CAN總線(xiàn)控制器按Tq對總線(xiàn)上的差分電平進(jìn)行采樣,以決定內部狀態(tài)。當總線(xiàn)上沒(méi)有通信時(shí),稱(chēng)為總線(xiàn)空閑,電平差在0~0.5 V,邏輯值為“1”。電平差為0.9 V以上時(shí)邏輯值為“0”。 由圖1可知,存在“0“毛刺,也存在“1“毛刺。CAN總線(xiàn)驅動(dòng)器的特性是線(xiàn)與,當“1”和“0”同時(shí)發(fā)生時(shí),總線(xiàn)的電平為“0”,這便是仲裁功能。一幀開(kāi)始發(fā)送的第一位是“0“,稱(chēng)為SOF,然后是消息的標識符ID。ID代表了消息的優(yōu)先級,每個(gè)節點(diǎn)通過(guò)位采樣知道總線(xiàn)上仲裁的結果,正常工作時(shí)如果發(fā)送“1”而讀回“0”,表示本發(fā)送節點(diǎn)本次ID發(fā)送失敗,需等下一次幀發(fā)送機會(huì )。
總線(xiàn)空閑時(shí),一個(gè)有發(fā)送要求的節點(diǎn)須先觀(guān)察是否有別的節點(diǎn)已經(jīng)開(kāi)始發(fā)送,如已開(kāi)始就不能發(fā)送。正是這里,由一個(gè)“0”毛刺開(kāi)始的時(shí)段可以誤解為別的節點(diǎn)已開(kāi)始傳送SOF,毛刺阻斷了該節點(diǎn)的發(fā)送(不管該節點(diǎn)要傳送的消息優(yōu)先級有多高)。
由于傳送電纜延遲以及中間器件(如光隔離)的延遲τ,節點(diǎn)將見(jiàn)不到提前量τ以?xún)劝l(fā)送的別的節點(diǎn)的SOF。同理,別的節點(diǎn)要經(jīng)過(guò)τ以后才見(jiàn)到該節點(diǎn)發(fā)送的SOF,τ以后別的節點(diǎn)就因總線(xiàn)上已有發(fā)送而不允許發(fā)送了。這樣,在本節點(diǎn)請求時(shí)刻±τ內的發(fā)送被認為是“同時(shí)”請求發(fā)送,它們將按ID仲裁。對遲于其τ的其他低優(yōu)先級幀的發(fā)送,它也是必然勝出的。
3 CAN位時(shí)間同步的有關(guān)規定
CAN的位時(shí)間分為同步段(Sync)、傳輸段(Tprop)、緩沖1段(Ph1)與緩沖2段(Ph2),位值采樣在Ph1 與Ph2之間。位值變化時(shí)將有跳變沿,只有1/0為同步用的跳變沿。跳變沿決定了相位差e,跳變沿在Ph2內e為負,在Sync內為0,在Tprop和Ph1內為正。每個(gè)節點(diǎn)根據e實(shí)行同步,同步的修正量受同步的種類(lèi)限制。同步分兩種:硬同步與重同步。硬同步對應幀開(kāi)始時(shí)的情況,重同步對應幀內有同步沿時(shí)的情況。對重同步而言,每次的修正量不能大于稱(chēng)為重同步寬度的可預先設定的量SJW,SJW=min(Ph1,Ph2)。
有關(guān)本文討論內容的CAN總線(xiàn)標準為ISO 118981(2003)[9]及ISO 16845(2004)[10],正是這些條款的規定保證了CAN總線(xiàn)協(xié)議在高度干擾的環(huán)境下能可靠工作。
ISO 118981第10.4.2.2款規定,節點(diǎn)只有在總線(xiàn)空閑時(shí)可以發(fā)SOF,在服務(wù)間隔第3位(I.M.3)的“0”視為SOF。
ISO 118981第12.4.2.1款規定硬同步在幀間的間隔中實(shí)行。而幀間間隔包括服務(wù)間隔和總線(xiàn)空閑,對上次發(fā)送的消極報錯節點(diǎn)還包括禁發(fā)時(shí)間。因此,在I.M.3的跳變沿也是作硬同步用的。
ISO 118981第12.4.2.4款規定,重同步的目的是校正采樣點(diǎn)的位置,e為“+”時(shí)延長(cháng)Ph1,e為“-”時(shí)縮短Ph2。校正量在e小于或等于SJW時(shí)為e,反之為SJW。
ISO 16845第7.7.2款規定了接收節點(diǎn)對SOF的硬同步驗證方法意味著(zhù)同步段SYNC直接同步于1/0跳變沿。
ISO 16845第8.7.2.1款規定了發(fā)送節點(diǎn)在I.M.3位值采樣點(diǎn)前有1/0沿時(shí)的硬同步驗證方法:測試設備在被測單元I.M.3采樣點(diǎn)前Tq加被測單元內部處理時(shí)間前發(fā)0,要求被測單元在跳變沿1位后發(fā)ID最高位。這意味著(zhù)發(fā)送節點(diǎn)要與I.M.3內1/0跳變沿硬同步,0值被采樣,下一位不再發(fā)SOF而是發(fā)ID最高位。
ISO 16845第8.7.3.1款規定了發(fā)送節點(diǎn)在I.M.3位值采樣點(diǎn)后有1/0沿時(shí)的硬同步驗證方法:測試設備在被測單元I.M.3采樣點(diǎn)后1個(gè)被測單元內部處理時(shí)間后發(fā)0,要求被測單元在跳變沿后1 Tq立即發(fā)SOF。這意味著(zhù)發(fā)送節點(diǎn)是硬同步,但開(kāi)始發(fā)SOF。
ISO 118981第4.18和4.16款規定了發(fā)送節點(diǎn)和接收節點(diǎn)的定義。發(fā)送節點(diǎn)指的是發(fā)數據幀或遠程幀的節點(diǎn),其狀態(tài)維持到仲裁失敗退出或總線(xiàn)再度空閑,否則就是接收節點(diǎn)。因此總線(xiàn)空閑時(shí)遇到毛刺,則大家都是接收節點(diǎn)。
ISO 16845第7.7.9款規定了接收節點(diǎn)在總線(xiàn)空閑時(shí)對毛刺濾除的驗證方法:要確定對總線(xiàn)空閑時(shí)短于Tprop+Ph1-1的0不作SOF處理。也就是說(shuō)硬同步后未被采樣到就不算作SOF。
評論