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