CAN總線起始于1986年左右,,至今仍廣泛應(yīng)用。現(xiàn)在人們對(duì)安全的要求已大為提高,,所以要不斷仔細(xì)審視CAN的安全性能?,F(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 輻射干擾實(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ā)送,它也是必然勝出的,。
3 CAN位時(shí)間同步的有關(guān)規(guī)定
CAN的位時(shí)間分為同步段(Sync),、傳輸段(Tprop)、緩沖1段(Ph1)與緩沖2段(Ph2),,位值采樣在Ph1 與Ph2之間,。位值變化時(shí)將有跳變沿,只有1/0為同步用的跳變沿,。跳變沿決定了相位差e,,跳變沿在Ph2內(nèi)e為負(fù),在Sync內(nèi)為0,,在Tprop和Ph1內(nèi)為正,。每個(gè)節(jié)點(diǎn)根據(jù)e實(shí)行同步,同步的修正量受同步的種類限制,。同步分兩種:硬同步與重同步,。硬同步對(duì)應(yīng)幀開始時(shí)的情況,重同步對(duì)應(yīng)幀內(nèi)有同步沿時(shí)的情況,。對(duì)重同步而言,,每次的修正量不能大于稱為重同步寬度的可預(yù)先設(shè)定的量SJW,SJW=min(Ph1,Ph2),。
有關(guān)本文討論內(nèi)容的CAN總線標(biāo)準(zhǔn)為ISO 118981(2003)[9]及ISO 16845(2004)[10],,正是這些條款的規(guī)定保證了CAN總線協(xié)議在高度干擾的環(huán)境下能可靠工作。
ISO 118981第10.4.2.2款規(guī)定,,節(jié)點(diǎn)只有在總線空閑時(shí)可以發(fā)SOF,,在服務(wù)間隔第3位(I.M.3)的“0”視為SOF。
ISO 118981第12.4.2.1款規(guī)定硬同步在幀間的間隔中實(shí)行,。而幀間間隔包括服務(wù)間隔和總線空閑,,對(duì)上次發(fā)送的消極報(bào)錯(cuò)節(jié)點(diǎn)還包括禁發(fā)時(shí)間。因此,,在I.M.3的跳變沿也是作硬同步用的,。
ISO 118981第12.4.2.4款規(guī)定,重同步的目的是校正采樣點(diǎn)的位置,,e為“+”時(shí)延長(zhǎng)Ph1,e為“-”時(shí)縮短Ph2。校正量在e小于或等于SJW時(shí)為e,,反之為SJW,。
ISO 16845第7.7.2款規(guī)定了接收節(jié)點(diǎn)對(duì)SOF的硬同步驗(yàn)證方法意味著同步段SYNC直接同步于1/0跳變沿。
ISO 16845第8.7.2.1款規(guī)定了發(fā)送節(jié)點(diǎn)在I.M.3位值采樣點(diǎn)前有1/0沿時(shí)的硬同步驗(yàn)證方法:測(cè)試設(shè)備在被測(cè)單元I.M.3采樣點(diǎn)前Tq加被測(cè)單元內(nèi)部處理時(shí)間前發(fā)0,,要求被測(cè)單元在跳變沿1位后發(fā)ID最高位,。這意味著發(fā)送節(jié)點(diǎn)要與I.M.3內(nèi)1/0跳變沿硬同步,0值被采樣,,下一位不再發(fā)SOF而是發(fā)ID最高位,。
ISO 16845第8.7.3.1款規(guī)定了發(fā)送節(jié)點(diǎn)在I.M.3位值采樣點(diǎn)后有1/0沿時(shí)的硬同步驗(yàn)證方法:測(cè)試設(shè)備在被測(cè)單元I.M.3采樣點(diǎn)后1個(gè)被測(cè)單元內(nèi)部處理時(shí)間后發(fā)0,要求被測(cè)單元在跳變沿后1 Tq立即發(fā)SOF,。這意味著發(fā)送節(jié)點(diǎn)是硬同步,,但開始發(fā)SOF。
ISO 118981第4.18和4.16款規(guī)定了發(fā)送節(jié)點(diǎn)和接收節(jié)點(diǎn)的定義,。發(fā)送節(jié)點(diǎn)指的是發(fā)數(shù)據(jù)幀或遠(yuǎn)程幀的節(jié)點(diǎn),,其狀態(tài)維持到仲裁失敗退出或總線再度空閑,否則就是接收節(jié)點(diǎn),。因此總線空閑時(shí)遇到毛刺,,則大家都是接收節(jié)點(diǎn)。
ISO 16845第7.7.9款規(guī)定了接收節(jié)點(diǎn)在總線空閑時(shí)對(duì)毛刺濾除的驗(yàn)證方法:要確定對(duì)總線空閑時(shí)短于Tprop+Ph1-1的0不作SOF處理,。也就是說硬同步后未被采樣到就不算作SOF,。
4 毛刺造成優(yōu)先級(jí)倒置
4.1 總線空閑時(shí)毛刺引起的倒置
總線空閑時(shí),局部錯(cuò)的0毛刺被Tq采樣到,,發(fā)送節(jié)點(diǎn)就會(huì)按ISO 16845 7.7.2規(guī)定實(shí)行硬同步,,然后就要按ISO 16845 7.7.9款確定是別的節(jié)點(diǎn)發(fā)送的SOF還是毛刺。如果節(jié)點(diǎn)H在毛刺后Tq有發(fā)送請(qǐng)求ReqH(如圖2所示),,它也必須等待Tprop+Ph1以確定總線是否空閑,。另一個(gè)節(jié)點(diǎn)L如有發(fā)送ReqL,其到H的傳送延遲為τ,,只要它能在H的硬同步后的采樣點(diǎn)采到,,H就不再有發(fā)送機(jī)會(huì)。此時(shí)H,、L請(qǐng)求的時(shí)間差為Tprop+Ph1-τ,。如果2個(gè)節(jié)點(diǎn)靠得很近,τ≈0,,那么H甚至無法與比它遲Tprop+Ph1的L競(jìng)爭(zhēng),。同時(shí)它也無法與比它早τ-1的其他節(jié)點(diǎn)的發(fā)送相競(jìng)爭(zhēng)。針對(duì)第1節(jié)中所講的“同時(shí)”情況,,它已完全無法參與競(jìng)爭(zhēng),。
圖2 總線空閑時(shí)毛刺引起優(yōu)先級(jí)倒置
圖3 估計(jì)倒置的概率用圖
圖4 在I.M.3中的毛刺引起優(yōu)先級(jí)倒置
現(xiàn)在對(duì)出現(xiàn)優(yōu)先級(jí)倒置的概率作初步分析。估計(jì)倒置的概率用圖如圖3所示。tG為毛刺發(fā)生時(shí)刻,,tH為高優(yōu)先級(jí)消息請(qǐng)求時(shí)刻,,tL為低優(yōu)先級(jí)消息請(qǐng)求時(shí)刻。如果tH發(fā)生在tG之后,、該位的采樣點(diǎn)前,,tL也在采樣點(diǎn)前到達(dá),那么tH的請(qǐng)求將無法獲得參與競(jìng)爭(zhēng)的機(jī)會(huì),。這件事的概率為Pa,。Pa與誤碼率有關(guān),毛刺被采到會(huì)有誤碼,。假定位時(shí)間為1 μs,,毛刺寬度為0.2 μs,采到機(jī)會(huì)便是20%,,也就是說毛刺概率在1位時(shí)間內(nèi)為誤碼率的5倍,,考慮到毛刺有0毛刺與1毛刺2種,只有0毛刺會(huì)引起假的硬同步,,再考慮到考察的時(shí)段為Tprop+Ph1,,而不是1位,所以保守估計(jì)Pa為誤碼率的2倍,。但是Pa不是因毛刺而引起倒置的概率,,其中還包括了tL請(qǐng)求確實(shí)早于tH請(qǐng)求τ的部分,這部分用Pb表示,。Pb=(tH-tG-τ)/(tH-tG),,當(dāng)(tH-tG)=τ時(shí)扣除部分Pb=0。所以最壞情況下沒有扣除,,優(yōu)先級(jí)消息倒置的概率近似為誤碼率的2倍,。
4.2 I.M.3內(nèi)毛刺引起的倒置
在上一幀認(rèn)可位(ACK)“0”的重同步下,H,、L兩個(gè)節(jié)點(diǎn)的位時(shí)間會(huì)有相位差τ,,L超前時(shí)τ的大小對(duì)分析并無影響。當(dāng)節(jié)點(diǎn)H,、L均有掛起待發(fā)的消息時(shí),,按ISO 118981 10.4.2.2規(guī)定,它們應(yīng)在I.M.3后一位開始發(fā)SOF,,并進(jìn)行競(jìng)爭(zhēng),。若H節(jié)點(diǎn)由于局部錯(cuò),在I.M.3位值采樣點(diǎn)前有毛刺,,按ISO 16845 8.7.2款,,H將作硬同步,,位值采樣點(diǎn)的移動(dòng)使它可以見到L所發(fā)的SOF(如圖4所示),其條件是e>Ph2,。由于在I.M.3內(nèi)讀到SOF,,H將在下一位開始發(fā)它的IDH最高位。假定H的IDH=“01***”,,L的IDL=“10***”,H的ID11H=0經(jīng)τ后傳到L,,與L的SOF部分重合,,并延續(xù)到L的ID10L位,當(dāng)毛刺發(fā)生的e滿足NBT-(2τ+e)>Ph2時(shí),,L不會(huì)采到H的ID11H,,所以它不會(huì)退出。位時(shí)間設(shè)計(jì)時(shí)NBT=SYNC+Tprop+Ph1+Ph2,,Tprop≥2τ,,故上式在e<SYNC+Tprop-2τ+Ph1時(shí)能滿足,即0<e-Ph2<SYNC+Tprop-2τ+Ph1-Ph2,。一般Ph1=Ph2,,或者Ph1=Ph2+1,當(dāng)節(jié)點(diǎn)靠得較近時(shí)τ比較小,,e有較大的范圍可同時(shí)滿足該式,。而L發(fā)的ID10L=0經(jīng)τ后到達(dá)H,當(dāng)e>Ph2時(shí)成為H的ID10H中的同步沿,,并被H采樣到,,H便仲裁失敗退出,形成優(yōu)先級(jí)倒置,。
此種倒置的概率的估計(jì)比較復(fù)雜,,需要進(jìn)一步研究。
5 解決方案
5.1 總線空閑時(shí)的硬同步抗毛刺措施
接收節(jié)點(diǎn)在總線空閑時(shí)檢查到1/0跳變沿就作硬同步,,然后再每Tq繼續(xù)采樣,。如在位值采樣點(diǎn)前發(fā)現(xiàn)有1,則認(rèn)為總線恢復(fù)到空閑狀態(tài),。如其間已有本節(jié)點(diǎn)的發(fā)送請(qǐng)求,,就在查到1的下一Tq開始本節(jié)點(diǎn)的發(fā)送。這樣,,本節(jié)點(diǎn)的發(fā)送被推遲了毛刺寬度對(duì)應(yīng)的時(shí)間,,但是也確保本節(jié)點(diǎn)發(fā)送前沒有其他節(jié)點(diǎn)已開始傳送,所以不會(huì)有優(yōu)先級(jí)倒置,。
這種方法沒有解決毛刺較寬,、一直延續(xù)到別的節(jié)點(diǎn)的SOF到達(dá)的情況,。此時(shí)本節(jié)點(diǎn)仍然因無發(fā)送而出現(xiàn)優(yōu)先級(jí)倒置。
5.2 I.M.3內(nèi)硬同步抗毛刺措施
I.M.3內(nèi)位值采樣點(diǎn)前出現(xiàn)毛刺引起硬同步,,本節(jié)點(diǎn)也繼續(xù)采樣總線,。有“1”時(shí)后繼判斷比較困難,因?yàn)橛餐胶笤儆龅?ldquo;0”的時(shí)刻不確定,,可能是別的節(jié)點(diǎn)發(fā)的SOF在原I.M.3位值采樣點(diǎn)前收到,,也可能在I.M.3原位值采樣點(diǎn)后收到,還可能又是毛刺,。所以,,為處理簡(jiǎn)化起見,有掛起待發(fā)幀的本節(jié)點(diǎn)發(fā)送超載幀,。通過報(bào)超載,,超載幀結(jié)束后總線回到空閑狀態(tài),重新實(shí)現(xiàn)同步,。
這種方法也沒有解決毛刺較寬,、一直延續(xù)到別的節(jié)點(diǎn)的SOF到達(dá)的情況。此時(shí)本節(jié)點(diǎn)仍然因無發(fā)送而出現(xiàn)優(yōu)先級(jí)倒置,。
6 小結(jié)
毛刺濾除和幀開始時(shí)刻的硬同步是為保障通信正常的兩個(gè)不同側(cè)面的要求,,在現(xiàn)有CAN總線協(xié)議的設(shè)計(jì)中出現(xiàn)了沖突,造成在某種特定情境下出現(xiàn)優(yōu)先級(jí)倒置,。由于毛刺引起優(yōu)先級(jí)倒置的危害性與具體應(yīng)用的種類有關(guān),,一般地說,系統(tǒng)設(shè)計(jì)時(shí)已盡量防止毛刺的干擾,,毛刺發(fā)生的概率已比較小,,發(fā)生在特定位置就更小。
在優(yōu)先級(jí)倒置的情況下,,可能下一次競(jìng)爭(zhēng)就不會(huì)發(fā)生倒置,,做最壞送達(dá)時(shí)間分析時(shí)[6],可以將低優(yōu)先級(jí)的阻斷加倍來加以分析,。
但是也可能在下一次競(jìng)爭(zhēng)時(shí)仍發(fā)生倒置,。在車輛安全認(rèn)證分析時(shí),需要確定倒置引起的的每小時(shí)的故障率,,這使分析需要引入誤碼率的假設(shè),,需要進(jìn)一步的工作。
本文提出了在完全兼容CAN總線的條件下的改進(jìn)方案,,但方案只是局部有效,,根本的改進(jìn)可能無法達(dá)到完全兼容。