探討CAN總線的抗干擾能力
1 物理層[13]
本文引用地址:http://m.butianyuan.cn/article/201612/329613.htm1.1 信號(hào)狀態(tài)
CAN總線的信號(hào)狀態(tài)為2種:隱位與顯位。當(dāng)總線上出現(xiàn)隱位與顯位發(fā)送的競爭時(shí),總線上的最終結(jié)果是顯位。這種二值特性對CAN總線的可靠性與其他特性有很大貢獻(xiàn)。CAN總線信號(hào)的二值且“單穩(wěn)態(tài)”的特性為它的數(shù)據(jù)鏈路層創(chuàng)造了條件,即CAN總線上可以容許多主發(fā)送、競爭占線的方式。這極大簡化了消息的調(diào)度。為使總線上的節(jié)點(diǎn)均有機(jī)會(huì)發(fā)送,有些總線采用“主從方式”,這種方法使總線的利用率較低,且從節(jié)點(diǎn)消息發(fā)送的等待時(shí)間較長。有些總線采用“令牌方式”,但令牌的丟失和重復(fù)需要特別的處理機(jī)制。
許多總線是不容許總線上有沖突的,因?yàn)闆_突發(fā)生后,不同的接收節(jié)點(diǎn)得到的電平結(jié)果是不同的。這使它們對總線上發(fā)生的事件在時(shí)間上與內(nèi)容上產(chǎn)生不同的解釋,退出沖突就會(huì)有時(shí)間的先后,從而導(dǎo)致節(jié)點(diǎn)間狀態(tài)的不同步。但是由于干擾的存在,節(jié)點(diǎn)可能會(huì)有誤動(dòng)作,發(fā)生不希望的沖突。為此,要增加需多輔助的設(shè)備來防止沖突,例如在時(shí)間觸發(fā)協(xié)議中經(jīng)常采用的總線監(jiān)守。在CAN總線里,沖突的處理由于該信號(hào)的二值且“單穩(wěn)態(tài)”的特性變得簡單,報(bào)錯(cuò)幀可以使所有節(jié)點(diǎn)(包括發(fā)生沖突的節(jié)點(diǎn))容易地取得數(shù)據(jù)的一致性和節(jié)點(diǎn)狀態(tài)的同步。
FlexRay總線的狀態(tài)有低功耗閑置、閑置、“0”、“1”四種。在正常工作模式時(shí),總線接收部分只認(rèn)可后3種狀態(tài)。與RS485總線不同的是,F(xiàn)lexRay收發(fā)器有一個(gè)判斷閑置狀態(tài)的機(jī)制。當(dāng)總線電平差處于某范圍內(nèi)——uBusActiveLow(最低-450 mV)~uBusActiveHigh(最高450 mV)一段時(shí)間(dIdleDetection,最小50 ns,最大250 ns)后,它就將RxEN引腳置”1”,并將RxD置”1”。當(dāng)總線電平超出該范圍一段時(shí)間(dActivityDetection,最小100 ns,最大300 ns)后,就退出閑置狀態(tài)。因此它不會(huì)在閑置狀態(tài)受干擾而輕易地誤判為新幀的開始。而總線上因干擾而引起沖突的情形可由另設(shè)的總線監(jiān)守加以防止。當(dāng)然,這些功能的添加意味著成本的增加。
1.2 信號(hào)電平與共模電壓
信號(hào)電平的高低有兩層影響: 一是閑置時(shí)有干擾被誤認(rèn)為是傳送的啟動(dòng)信號(hào);二是傳送邏輯信號(hào)時(shí)因干擾而產(chǎn)生誤碼。
RS485接收器的閾值很小,總線電壓差小于-200 mV時(shí)為“0”,大于200 mV時(shí)為“1”。因此,200 mV幅度的干擾就可能引起誤啟動(dòng),而造成誤碼的干擾幅度為400 mV。RS485總線的共模電壓為-7~+12 V。
CAN只有2種狀態(tài): 當(dāng)總線電壓差小于0.5 V時(shí),接收為隱位(即邏輯“1”);大于0.9 V時(shí),為顯位(即邏輯“0”)。0.5~0.9 V為變化的過渡區(qū)??偩€隱位電壓差的正常值為0 V,因此可能引起誤啟動(dòng)的最小干擾為0.5 V;顯位電壓差的正常值為2.0 V,合格的網(wǎng)絡(luò)顯位電壓差的最小值為1.2 V,引起誤碼的最小干擾為0.3 V。CAN總線的共模電壓為-2~+7 V。
前面已介紹了FlexRay總線在總線閑置與正常通信的過渡情況,不再重復(fù)。它的接收器邏輯“1”電平為uData1(最低150 mV,最高300 mV),邏輯“0”電平為uData0(最低-300 mV,最高-150 mV)。因此引起誤碼的最小干擾為0.3 V。FlexRay總線的共模電壓為-10~+15 V。
1.3 采樣
采用RS485收發(fā)器的總線往往與UART相連,它們一般在啟動(dòng)電平負(fù)跳變后的1/2位處對總線的邏輯值作采樣判斷。因此,當(dāng)總線閑置時(shí),若干擾的幅度足夠大,且持續(xù)時(shí)間大于1/2位,就可能產(chǎn)生誤啟動(dòng)。
CAN總線的位值一般在80%~90%位處采樣[4],因此它能容忍的誤啟動(dòng)干擾不但幅度大,而且時(shí)間長。正常傳送時(shí),高速CAN的位采樣為1次,低速時(shí)可以有3次(例如TJA1000中由SAM位控制)。這意味著可以抵御1次干擾引起的錯(cuò)誤,因?yàn)闆]有看到這3次采樣的間隔有多大,只能估計(jì)它是以Tq為單位。高速時(shí)實(shí)現(xiàn)3次采樣的可能性在于廠家產(chǎn)品的設(shè)計(jì),與CAN標(biāo)準(zhǔn)無關(guān),如果以1 Mbps計(jì)算,每位分為25個(gè)Tq,那么在3次采樣下,可以抵御的干擾持續(xù)時(shí)間為40 ns。
FlexRay總線容許的誤啟動(dòng)時(shí)間與位采樣點(diǎn)位置無關(guān),由dActivityDetection決定,最小為100 ns。正常傳送時(shí),根據(jù)FlexRay數(shù)據(jù)鏈路層3.2.2的規(guī)定,每一位采樣cSamplesPerBit(=8)次,將最近的cVotingSamples(=5)次按多數(shù)進(jìn)行表決,即可得到當(dāng)時(shí)的總線接收值(zVotedVal)。因此這種方法可以抵御1/4位長度的干擾,按FlexRay 10 Mbps計(jì)算,抵御的干擾持續(xù)時(shí)間為25 ns。
2 媒體存取與邏輯鏈路層[2,5]
2.1 位填充
CAN總線的位填充是在以前的位填充做法的基礎(chǔ)上發(fā)展起來的。在高級(jí)數(shù)據(jù)鏈路控制規(guī)程(HDLC)中用01111110作報(bào)頭與報(bào)尾的標(biāo)志位;在其他部分為了不致引起誤解,采用每連續(xù)5個(gè)“1”之后填入一個(gè)“0”的辦法,接收后將填入的0去掉。CAN總線不僅在連續(xù)5個(gè)“1“之后填入一個(gè)“0“,而且在5個(gè)“0“之后填入一個(gè)“1”,接收后將填入位丟掉。CAN總線這樣做不僅為報(bào)錯(cuò)機(jī)制(報(bào)錯(cuò)幀)創(chuàng)造了條件,而且還有2個(gè)對信號(hào)傳遞有利的方面:一是為CAN總線的位同步創(chuàng)造了較短的同步間隔,有利于提高同步精確度;二是有利于在總線上引入適時(shí)的反向放電,減少因總線長期同一極性充電造成的物理層誤判。
但是位填充方法減弱了CAN總線的CRC防止錯(cuò)誤漏檢的能力[6]。發(fā)生在填充位的錯(cuò)誤會(huì)改變位流的相位,只要有2次填充位錯(cuò)就會(huì)使原來的部分位流提前或推后1位,而此時(shí)仍有CRC檢查通過的可能。通過仿真方法注入位錯(cuò),求出CRC檢查漏檢出錯(cuò)的概率為1.3×10-7,而不是CAN總線聲稱的所有5位以下的錯(cuò)誤均能檢出。位填充的另一個(gè)缺點(diǎn)是造成數(shù)據(jù)輸送率的下降以及幀長度的不確定性。FlexRay總線沒有用位填充的方法,使用其他方法實(shí)現(xiàn)位同步。
2.2 幀編碼與解碼
關(guān)于CAN總線的幀已有大量文獻(xiàn)介紹,這里不再贅述。FlexRay總線則復(fù)雜得多,其中對用戶安排帶寬起關(guān)鍵作用的是擴(kuò)展字節(jié)的概念。根據(jù)FlexRay總線數(shù)據(jù)鏈路層3.2.1.1.3的規(guī)定,每一個(gè)字節(jié)開始處要有一個(gè)由“1”和“0”組成的字節(jié)開始序列(Byte Start Sequence,BSS),然后才是要傳送的8位數(shù)據(jù)。FlexRay容許的最大時(shí)鐘變化cClockDeviationMax為1 500×10-6(0.15%),因此收發(fā)之間可能差0.3%,每333次就可能差1次采樣。如前所述,1位要采樣8次,那么不到44位就會(huì)差1次采樣,因此除了時(shí)鐘本身的偏移與速率要校正外,F(xiàn)lexRay中也有位同步的機(jī)制。
位同步有2個(gè)條件:同步機(jī)制已使能;zVotedVal由高到低的跳變。正常傳送時(shí),同步機(jī)制的使能發(fā)生在BSS的zVotedVal為高時(shí)。當(dāng)同步時(shí),將保存zVotedVal的cSamplesPerBit位循環(huán)計(jì)數(shù)器置2;當(dāng)循環(huán)計(jì)數(shù)器計(jì)數(shù)為cStrobeOffset(=5)時(shí),將該zVotedVal取作真正送到協(xié)議其他部分的位置??紤]到實(shí)現(xiàn)位同步必須有BSS這個(gè)因素,一個(gè)FlexRay信道即使不算其他開銷,至多只能傳送8 Mbps的實(shí)際數(shù)據(jù);再加上其他的開銷,例如發(fā)送幀之間的間隔cChannelIdleDelimiter(=11位)等,有效的負(fù)載更小。
2.3 回讀
CAN總線發(fā)送節(jié)點(diǎn)能夠在送出1位時(shí)又把它從總線上讀回來,其他總線沒有這個(gè)功能。這個(gè)功能提供了無損位仲裁的基礎(chǔ),讓優(yōu)先級(jí)高的消息獲得在總線上繼續(xù)傳送的權(quán)力;同時(shí),增強(qiáng)了發(fā)送節(jié)點(diǎn)早一點(diǎn)檢測出錯(cuò)誤的能力,一旦有錯(cuò)就可發(fā)送報(bào)錯(cuò)幀并停止原來幀的傳送,節(jié)省了出錯(cuò)后無用部分的繼續(xù)傳送帶寬。
2.4 錯(cuò)誤約束
CAN總線對錯(cuò)誤的檢測主要是編碼與解碼的過程,例如bit錯(cuò)、填充錯(cuò)、ACK錯(cuò)、CRC錯(cuò)和格式錯(cuò)。對于時(shí)間同步,并未將其視為重要問題。例如當(dāng)重同步誤差大于重同步跳躍寬度時(shí),肯定會(huì)出現(xiàn)位同步的失敗,造成數(shù)據(jù)傳送的錯(cuò)誤。這種錯(cuò)誤會(huì)被誤認(rèn)為是由其他原因引起,而不能及時(shí)發(fā)現(xiàn)。有時(shí)候它也成為Babbling idiot失效的原因。CAN總線對瞬態(tài)故障與永久性故障采用分類的約束辦法。有錯(cuò)時(shí)收發(fā)錯(cuò)計(jì)數(shù)器增加快,正常時(shí)收發(fā)錯(cuò)計(jì)數(shù)器減少慢,按收發(fā)錯(cuò)計(jì)數(shù)器的值把節(jié)點(diǎn)分為主動(dòng)報(bào)錯(cuò)狀態(tài)、消極報(bào)錯(cuò)狀態(tài)和離線狀態(tài)。處于消極報(bào)錯(cuò)狀態(tài)的節(jié)點(diǎn)有可能無法正確接收到幀。出錯(cuò)過于頻繁時(shí)把有永久性故障傾向的節(jié)點(diǎn)從總線上切除,雖然被切除的節(jié)點(diǎn)失去了通信能力,但其他節(jié)點(diǎn)間的通信可能免除了騷擾,這不失為一種有效的故障時(shí)性能逐步退化的策略(scalable degradation)。
FlexRay 總線的檢錯(cuò)包括解碼過程中的錯(cuò)以及時(shí)間同步過程中的錯(cuò),例如數(shù)據(jù)幀接收時(shí)是否有格式錯(cuò)、CRC錯(cuò),符號(hào)(symbol)傳送時(shí)高、低的時(shí)間長度是否在范圍內(nèi)。由于是時(shí)間觸發(fā)協(xié)議,通過各分散的節(jié)點(diǎn)預(yù)定發(fā)送時(shí)間與實(shí)際發(fā)送時(shí)間的差進(jìn)行修正,建立同步時(shí)基,對發(fā)送時(shí)間的超限要求更嚴(yán)。它對時(shí)間同步中產(chǎn)生的問題也采取了一種逐步退化的策略。它有一個(gè)協(xié)議運(yùn)行控制的機(jī)制(POC),POC有3個(gè)狀態(tài),為POC: normal active(積極),POC: normal passive(消極)和POC: halt(停止)。其中,積極狀態(tài)下,同步處于容許界限內(nèi),不會(huì)破壞其他節(jié)點(diǎn)的同步;消極狀態(tài)下,同步已惡化到不能再發(fā)送的地步,若再發(fā)送就有可能超出它的窗口而與其他節(jié)點(diǎn)沖突,但它容許接收,以取得足夠的同步重返積極狀態(tài)。在自檢或完好性檢查(sanity check)未通過,或POC與其他核心機(jī)制發(fā)現(xiàn)嚴(yán)重錯(cuò),或host檢查到錯(cuò)誤給出命令的情況下,POC會(huì)進(jìn)入停止?fàn)顟B(tài),此時(shí)只有重新初始化了。
從上面的簡述可見,在保證所有節(jié)點(diǎn)數(shù)據(jù)的一致性上,二者都是要靠其他措施的,而這些可能的措施(例如組籍算法,membership algorithm)都有待討論,對錯(cuò)誤的約束僅限于逐步退化的策略。
2.5 幀出錯(cuò)率
總線傳送中的出錯(cuò)來源于各種干擾,除了前面分析的信號(hào)電平、采樣過程、共模電壓以外,來自電源的傳導(dǎo)干擾也可能使通信控制器工作異常而通信失效,所以不能僅以物理層的一些指標(biāo)作完整的判斷。幀的出錯(cuò)概率對應(yīng)用有很大影響,它涉及出錯(cuò)以后該怎么辦的問題。幀的出錯(cuò)概率與幀長成比例關(guān)系,CAN2.0A的最大幀長為133位,F(xiàn)lexRay的最大幀長為2 625位(254字節(jié)數(shù)據(jù)+8字節(jié)開銷+5個(gè)起始/停止位,這里1字節(jié)=10位)。假設(shè)二者的誤碼率相同,那么FlexRay的幀出錯(cuò)率PF約為CAN(PC)的20倍。雖然FlexRay幀可傳送的數(shù)據(jù)多得多,但是一個(gè)幀錯(cuò)了,其中的消息便全部不能利用,這種消息捆綁在一起的特性,大大增加了出錯(cuò)的機(jī)會(huì)。如果將FlexRay像CAN那樣傳送短幀,那么幀的效率會(huì)比CAN還低,存放靜態(tài)段調(diào)度表的硬件部分更大。如果將來由于ECU內(nèi)處理器更強(qiáng)大,一個(gè)節(jié)點(diǎn)發(fā)送的消息更多,那么這種長幀有用途,但是出錯(cuò)概率的增大仍是缺點(diǎn)。另外,用長幀傳短消息涉及消息在幀內(nèi)的編排方法,這種靈活性必然要求有高級(jí)通信層的統(tǒng)一約束,否則會(huì)帶來修理、供貨、管理上的不便與成本的增加。這可能是漫長的路,在統(tǒng)一之前仍然是各汽車廠專用的封閉的高層協(xié)議,幾乎沒有留給外人插足的空間。
3 與FlexRay總線的比較
3.1 單信道應(yīng)用
出錯(cuò)自動(dòng)重發(fā)是CAN總線的一大特點(diǎn)。FlexRay協(xié)議的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)包括總線方式,但是用2個(gè)信道還是1個(gè)與性能和成本關(guān)系很大。FlexRay的設(shè)計(jì)是用2個(gè)信道同時(shí)傳送來保證傳送的正確性,因?yàn)樗幌馛AN有出錯(cuò)重發(fā)的功能。2個(gè)通道同時(shí)出錯(cuò)的概率比較小,不考慮出錯(cuò)重發(fā)時(shí)丟幀也不多。如果考慮2個(gè)信道同時(shí)出錯(cuò)而要求重發(fā),則必須在應(yīng)用層處理,而在動(dòng)態(tài)時(shí)隙中傳送請求與重發(fā),不是一件容易的事,也推遲了送達(dá)時(shí)間。如果FlexRay只用一個(gè)信道來完成,出錯(cuò)概率較大,為了簡化應(yīng)用可以采用重復(fù)傳送的方法(即時(shí)間冗余),在2次或多次傳送中只要有1次成功便可。但是這樣做相當(dāng)于把FlexRay的帶寬降了下來,例如減為1/2或1/3。這并不意味著2個(gè)信道時(shí)吞吐量僅為10 Mbps或更小,因?yàn)榭梢栽谄渲幸粋€(gè)信道安排較多的動(dòng)態(tài)段,用于出錯(cuò)消息的重發(fā)請求與重發(fā),即僅傳送出錯(cuò)的部分。
3.2 安全攸關(guān)應(yīng)用的額外要求
對FlexRay這樣的時(shí)間觸發(fā)通信協(xié)議,其錯(cuò)誤約束機(jī)制中已盡量考慮了各種可能的出錯(cuò)情況,防止一個(gè)節(jié)點(diǎn)的發(fā)送超出預(yù)定給它的時(shí)間窗口。為了提高防錯(cuò)的能力,另外設(shè)計(jì)了總線監(jiān)守??偩€監(jiān)守有自己的時(shí)鐘線路和與節(jié)點(diǎn)發(fā)送的調(diào)度表,它控制該節(jié)點(diǎn)的總線驅(qū)動(dòng)器,僅在容許的時(shí)間窗口里讓總線驅(qū)動(dòng)器工作。這種機(jī)制給防止沖突構(gòu)成了雙保險(xiǎn),但是增加了系統(tǒng)的成本,所以把它作為選件。在FlexRay中有2種總線監(jiān)守: 一種是本地總線監(jiān)守,即與節(jié)點(diǎn)靠近的地方,甚至是可以做在同一硅片上的總線監(jiān)守;另一種是遠(yuǎn)方的星型耦合器中的集中式總線監(jiān)守。在總線式應(yīng)用中有關(guān)的是本地總線監(jiān)守。雖然總線監(jiān)守要做的事少一些,但是它也要有時(shí)間同步的相關(guān)機(jī)制,以及啟動(dòng)和從休眠中喚醒的算法。為實(shí)現(xiàn)這些功能,從總線上接收數(shù)據(jù)的部分就是必不可少的。由于僅少了發(fā)送部分,F(xiàn)lexRay甚至提到過一種可能:將控制芯片設(shè)計(jì)成可組態(tài)的,既可用作通信控制器,又可以用作總線監(jiān)守。這就說明了總線監(jiān)守的結(jié)構(gòu)是復(fù)雜的、高成本的。有的FlexRay文獻(xiàn)中提到,可以將安全攸關(guān)的節(jié)點(diǎn)與要求稍低的節(jié)點(diǎn)連在同一總線上,要求低的節(jié)點(diǎn)可以不配總線監(jiān)守。這種講法是不正確的,因?yàn)楦鶕?jù)木桶原理,一段總線上通信的沖突可能性由最有可能引起沖突的節(jié)點(diǎn)決定,安全要求低的節(jié)點(diǎn)發(fā)送超時(shí)會(huì)引起總線上的沖突,影響安全攸關(guān)消息的傳送。
4 小結(jié)
目前在車內(nèi)總線技術(shù)的競爭方面,CAN總線的主要對手是FlexRay總線,因此與FlexRay總線在單信道應(yīng)用上的比較是不可避免的。因?yàn)樵谝粋€(gè)信道上傳送FlexRay 的幀出錯(cuò)率高很多,又沒有出錯(cuò)自動(dòng)重發(fā)的機(jī)制,所以FlexRay總線要減少出錯(cuò)就必須重復(fù)發(fā)送,以時(shí)間備份的方式糾錯(cuò)。經(jīng)過FlexRay擴(kuò)展字節(jié)與時(shí)間備份的折扣,有效的數(shù)據(jù)傳送速率已降到4 Mbps;再加上其他開銷,帶寬還會(huì)減小。另一方面,時(shí)間觸發(fā)協(xié)議的調(diào)度表的求解在負(fù)載越大時(shí)越困難,不可能用足4 Mbps。FlexRay總線的通道長度最長為24 m[3],如果CAN總線也限于24 m,則根據(jù)每米信號(hào)傳送遲后約5 ns計(jì)算,CAN位時(shí)間中傳送段的通道傳送部分為240 ns。若設(shè)計(jì)驅(qū)動(dòng)器的響應(yīng)時(shí)間為40 ns左右(如SJA1000),那么CAN總線的數(shù)據(jù)傳輸速率達(dá)到2~3 Mbps也是可能的,雖然ISO118981限定1 Mbps為上限,但它并非技術(shù)的極限。
FlexRay總線在抗共模干擾上比CAN總線強(qiáng),但是出錯(cuò)并不僅由共模干擾引起,例如來自電源的傳導(dǎo)干擾也會(huì)引起包括比較器在內(nèi)的的所有電路出錯(cuò),所以并不能確定FlexRay總線的硬件可靠性高于CAN總線。在保證傳送數(shù)據(jù)的一致性方面,2種協(xié)議都要有應(yīng)用層的解決辦法,F(xiàn)lexRay總線并未提供直接可用的機(jī)制。作為通信的下層,它們都采取的是性能逐步退化的策略。也有人在研究冗余通道、星形拓?fù)?/strong>等措施在CAN總線中如何實(shí)現(xiàn),并非不可能。
就CAN總線而言,F(xiàn)lexRay總線是一種挑戰(zhàn),但是在單信道的總線拓?fù)鋺?yīng)用中FlexRay總線并不構(gòu)成威脅。由于目前高檔車內(nèi)已經(jīng)用了不止一個(gè)CAN總線系統(tǒng),用雙信道的FlexRay取代多個(gè)CAN總線系統(tǒng)有可能在性價(jià)比上取得進(jìn)展,但是與現(xiàn)在生產(chǎn)的應(yīng)用CAN總線的ECU存在兼容問題,且成本較高,這些問題的解決還有待時(shí)日。盡管CAN總線有一定局限,甚至還有漏洞,但對CAN總線的改進(jìn)還在繼續(xù),在未來的5~10年里CAN總線仍然有很大的性價(jià)比優(yōu)勢。
評(píng)論