CAN優(yōu)先級(jí)倒置原因與對(duì)策分析

2013-08-07 11:11 來源:電子信息網(wǎng) 作者:蒲公英

CAN總線起始于1986年左右,至今仍廣泛應(yīng)用?,F(xiàn)在人們對(duì)安全的要求已大為提高,所以要不斷仔細(xì)審視CAN的安全性能。現(xiàn)在已經(jīng)發(fā)現(xiàn)的重要的CAN問題有:在消極報(bào)錯(cuò)狀態(tài)下可能出現(xiàn)等效離線,使節(jié)點(diǎn)不能收發(fā)的時(shí)間相當(dāng)長(zhǎng)[1];錯(cuò)幀漏檢率的估計(jì)不準(zhǔn),特別在誤碼率高時(shí)比Bosch CAN2.0數(shù)據(jù)高多個(gè)數(shù)量級(jí)[2],在單目的地址時(shí)影響數(shù)據(jù)正確性,在多個(gè)目的地址時(shí)會(huì)影響數(shù)據(jù)一致性;標(biāo)準(zhǔn)的振蕩源精度要求偏低[3],使誤用廉價(jià)器件成為可能,影響系統(tǒng)的穩(wěn)定性;本文發(fā)現(xiàn)的優(yōu)先級(jí)倒置的可能性,使調(diào)度分析結(jié)果的可信度下降;在數(shù)據(jù)幀倒數(shù)第二位的局部錯(cuò)可能引起不一致的接收重復(fù)或丟失[4]。所以在FlexRay尚未達(dá)到預(yù)定目標(biāo)、無論在可靠性還是價(jià)格上能取代CAN以前,對(duì)CAN作進(jìn)一步的改進(jìn)仍然是非常有意義的。

CAN是一種代表性的事件觸發(fā)通信協(xié)議,同時(shí)發(fā)生的多個(gè)通信請(qǐng)求將按照消息的優(yōu)先級(jí)進(jìn)行無損仲裁,高優(yōu)先級(jí)的勝出。按照消息的優(yōu)先級(jí)進(jìn)行無損仲裁是CAN原始專利的唯一權(quán)利要求[5]。對(duì)于低優(yōu)先級(jí)的消息而言,送達(dá)時(shí)間將受到高優(yōu)先級(jí)消息的阻擾,在高優(yōu)先級(jí)消息為周期性時(shí),最壞送達(dá)時(shí)間是可以預(yù)先計(jì)算出的[6]。如果能安排好發(fā)送消息的初始相位并作寬松的時(shí)鐘同步,這個(gè)最壞送達(dá)時(shí)間可以大為減少。事件觸發(fā)協(xié)議的優(yōu)點(diǎn)是總線帶寬可以得到充分利用。另一個(gè)優(yōu)點(diǎn)是高優(yōu)先級(jí)消息可得到迅速發(fā)送。但是由于工業(yè)環(huán)境中普遍存在的電磁干擾,總線上會(huì)有毛刺,CAN總線的標(biāo)準(zhǔn)中已考慮到應(yīng)對(duì)方法?,F(xiàn)在發(fā)現(xiàn)毛刺應(yīng)對(duì)方法可能使節(jié)點(diǎn)的同步受到影響,從而損及高優(yōu)先級(jí)消息的發(fā)送機(jī)會(huì),出現(xiàn)優(yōu)先級(jí)的倒置,動(dòng)搖了CAN總線的基本性能。

1 毛刺的存在

車內(nèi)電磁環(huán)境惡劣, ISO 76372/3總結(jié)出代表性的傳導(dǎo)和輻射干擾。有人專門作了輻射干擾的實(shí)驗(yàn),參考文獻(xiàn)[7]的實(shí)驗(yàn)中用24 V蓄電池給車內(nèi)常用的繼電器供電(CAN系統(tǒng)供電是獨(dú)立的),電源線與CAN電纜靠得很近,在電纜線有屏蔽、線長(zhǎng)為2 m時(shí),手動(dòng)開關(guān)繼電器時(shí)可以看到CAN波形上疊加的毛刺,輻射干擾實(shí)驗(yàn)結(jié)果如圖1所示。

1

圖1 輻射干擾實(shí)驗(yàn)結(jié)果

實(shí)際汽車上也見到CAN總線失效的報(bào)告[8]:豐田汽車在經(jīng)銷商產(chǎn)品報(bào)告中確認(rèn),由任何原因召回的車中發(fā)現(xiàn)丟失CAN數(shù)據(jù)的記錄有292宗。毛刺是引起CAN總線出錯(cuò)的可能原因,其具體誘發(fā)過程需要仔細(xì)分析,不能掉以輕心。

2 CAN位時(shí)間與消息仲裁原理

CAN總線把位時(shí)間劃分為NBT等分的時(shí)間片,稱為Tq。CAN總線控制器按Tq對(duì)總線上的差分電平進(jìn)行采樣,以決定內(nèi)部狀態(tài)。當(dāng)總線上沒有通信時(shí),稱為總線空閑,電平差在0~0.5 V,邏輯值為“1”。電平差為0.9 V以上時(shí)邏輯值為“0”。 由圖1可知,存在“0“毛刺,也存在“1“毛刺。CAN總線驅(qū)動(dòng)器的特性是線與,當(dāng)“1”和“0”同時(shí)發(fā)生時(shí),總線的電平為“0”,這便是仲裁功能。一幀開始發(fā)送的第一位是“0“,稱為SOF,然后是消息的標(biāo)識(shí)符ID。ID代表了消息的優(yōu)先級(jí),每個(gè)節(jié)點(diǎn)通過位采樣知道總線上仲裁的結(jié)果,正常工作時(shí)如果發(fā)送“1”而讀回“0”,表示本發(fā)送節(jié)點(diǎn)本次ID發(fā)送失敗,需等下一次幀發(fā)送機(jī)會(huì)。

總線空閑時(shí),一個(gè)有發(fā)送要求的節(jié)點(diǎn)須先觀察是否有別的節(jié)點(diǎn)已經(jīng)開始發(fā)送,如已開始就不能發(fā)送。正是這里,由一個(gè)“0”毛刺開始的時(shí)段可以誤解為別的節(jié)點(diǎn)已開始傳送SOF,毛刺阻斷了該節(jié)點(diǎn)的發(fā)送(不管該節(jié)點(diǎn)要傳送的消息優(yōu)先級(jí)有多高)。

由于傳送電纜延遲以及中間器件(如光隔離)的延遲τ,節(jié)點(diǎn)將見不到提前量τ以內(nèi)發(fā)送的別的節(jié)點(diǎn)的SOF。同理,別的節(jié)點(diǎn)要經(jīng)過τ以后才見到該節(jié)點(diǎn)發(fā)送的SOF,τ以后別的節(jié)點(diǎn)就因總線上已有發(fā)送而不允許發(fā)送了。這樣,在本節(jié)點(diǎn)請(qǐng)求時(shí)刻±τ內(nèi)的發(fā)送被認(rèn)為是“同時(shí)”請(qǐng)求發(fā)送,它們將按ID仲裁。對(duì)遲于其τ的其他低優(yōu)先級(jí)幀的發(fā)送,它也是必然勝出的。

1 2 3 > 
CAN

一周熱門