新聞中心

EEPW首頁 > 汽車電子 > 設(shè)計應(yīng)用 > 汽車CAN總線詳解

汽車CAN總線詳解

作者: 時間:2025-03-27 來源:英飛凌汽車電子生態(tài)圈 收藏

CAN(Controller Area Network)總線協(xié)議是由 BOSCH 發(fā)明的一種基于消息廣播模式的串行通信總線,它起初用于實(shí)現(xiàn)汽車內(nèi)ECU之間可靠的通信,后因其簡單實(shí)用可靠等特點(diǎn),而廣泛應(yīng)用于工業(yè)自動化、船舶、醫(yī)療等其它領(lǐng)域。相比于其它網(wǎng)絡(luò)類型,如局域網(wǎng)(LAN, Local Area Network)、廣域網(wǎng)(WAN, Wide Area Network)和個人網(wǎng)(PAN, Personal Area Network)等,CAN 更加適合應(yīng)用于現(xiàn)場控制領(lǐng)域,因此得名。

本文引用地址:http://2s4d.com/article/202503/468732.htm

是一種多主控(Multi-Master)的總線系統(tǒng),它不同于USB或以太網(wǎng)等傳統(tǒng)總線系統(tǒng)是在總線控制器的協(xié)調(diào)下,實(shí)現(xiàn)A節(jié)點(diǎn)到B節(jié)點(diǎn)大量數(shù)據(jù)的傳輸,CAN網(wǎng)絡(luò)的消息是廣播式的,亦即在同一時刻網(wǎng)絡(luò)上所有節(jié)點(diǎn)偵測的數(shù)據(jù)是一致的,因此比較適合傳輸諸如控制、溫度、轉(zhuǎn)速等短消息。

CAN起初由BOSCH提出,后經(jīng)ISO組織確認(rèn)為國際標(biāo)準(zhǔn),根據(jù)特性差異又分不同子標(biāo)準(zhǔn)。CAN國際標(biāo)準(zhǔn)只涉及到 OSI(開放式通信系統(tǒng)參考模型 )的物理層和數(shù)據(jù)鏈路層。上層協(xié)議是在CAN標(biāo)準(zhǔn)基礎(chǔ)上定義的應(yīng)用層,市場上有不同的應(yīng)用層標(biāo)準(zhǔn)。

 

發(fā)展歷史

  • 1983年,BOSCH開始著手開發(fā);

  • 1986年,在SAE會議上,正式發(fā)布;

  • 1987年,Intel和Philips推出第一款CAN控制器芯片;

  • 1991年,奔馳 500E 是世界上第一款基于CAN總線系統(tǒng)的量產(chǎn)車型;

  • 1991年,Bosch發(fā)布CAN 2.0標(biāo)準(zhǔn),分 CAN 2.0A (11位標(biāo)識符)和 CAN 2.0B (29位標(biāo)識符);

  • 1993年,ISO發(fā)布CAN總線標(biāo)準(zhǔn)(ISO 11898),隨后該標(biāo)準(zhǔn)主要有三部分:

  •  ISO 11898-1:數(shù)據(jù)鏈路層協(xié)議

  •   ISO 11898-2:高速CAN總線物理層協(xié)議

  •  ISO 11898-3:低速CAN總線物理層協(xié)議

注意:ISO 11898-2和ISO 11898-3物理層協(xié)議不屬于 BOSCH CAN 2.0標(biāo)準(zhǔn)。

  • 2012年,BOSCH發(fā)布 CAN FD 1.0 標(biāo)準(zhǔn)(CAN with Flexible Data-Rate),CAN FD定義了在仲裁后確使用不同的數(shù)據(jù)幀結(jié)構(gòu),從而達(dá)到最高 12Mbps 數(shù)據(jù)傳輸速率。CAN FD與CAN 2.0協(xié)議兼容,可以與傳統(tǒng)的CAN 2.0設(shè)備共存于同樣的網(wǎng)絡(luò)

 

標(biāo)準(zhǔn)化

CAN標(biāo)準(zhǔn)分為底層標(biāo)準(zhǔn)(物理層和數(shù)據(jù)鏈路層)和上層標(biāo)準(zhǔn)(應(yīng)用層)兩大類。CAN底層標(biāo)準(zhǔn)主要是 ISO 11898 系列的國際標(biāo)準(zhǔn),也就是說不同廠商在CAN總線的物理層和數(shù)據(jù)鏈路層定義基本相同;而上層標(biāo)準(zhǔn),涉及到例如流控制、設(shè)備尋址和大數(shù)據(jù)塊傳輸控制等,不同應(yīng)用領(lǐng)域或制造商會有不同的做法,沒有統(tǒng)一的國際標(biāo)準(zhǔn)。

 

底層標(biāo)準(zhǔn)

CAN底層標(biāo)準(zhǔn)涵蓋OSI模型中的物理層和數(shù)據(jù)鏈路層,底層標(biāo)準(zhǔn)包括:

  • ISO 11898-1: 2015 定義CAN總線的數(shù)據(jù)鏈路層(DLL)和電氣信號標(biāo)準(zhǔn),描述CAN總線的基本架構(gòu),定義不同CAN總線設(shè)備在數(shù)據(jù)鏈路層通信方式,詳細(xì)說明邏輯鏈接控制(LLC)和介質(zhì)訪問控制(MAC)子層部分;

  •  ISO 11898-2: 2003 定義高速CAN總線(HS-CAN)物理層標(biāo)準(zhǔn),最高數(shù)據(jù)傳輸速率 1Mbps ,應(yīng)用為兩線平衡式信號(CAN_H, CAN_L),HS CAN是汽車動力和工業(yè)控制網(wǎng)絡(luò)中應(yīng)用最為廣泛的物理層協(xié)議;

  • ISO 11898-3: 2006 定義低速CAN總線(LS-CAN, Fault-Tolerant CAN)物理層標(biāo)準(zhǔn),數(shù)據(jù)傳輸速率在 40Kbps ~ 125Kbps 。Fault-Tolerant是指總線上一根傳輸信號失效時,依靠另外的單根信號也可以通信,LS CAN主要應(yīng)用于汽車車身電控單元之間通信;

  • ISO 11898-4: 2004 定義CAN總線中的時間觸發(fā)機(jī)制(Time-Triggered CAN, TTCAN),定義與ISO 11898-1 配合的幀同步實(shí)體,實(shí)現(xiàn)汽車ECU之間基于時間觸發(fā)的通信方式。注意,ISO 11898-1 是基于事件驅(qū)動(Event-Driven)的通信,它對于高負(fù)荷總線上,尤其是低優(yōu)先級的消息會造成較大的延遲,而基于時間觸發(fā)的ISO 11898-4 標(biāo)準(zhǔn)的初衷也正是為解決該問題,確保CAN總線上可靠的消息傳輸;

  • ISO 11898-5: 2007 對ISO 11898-2高速CAN總線的補(bǔ)充,并參照ISO 8802-2,定義在總線閑置時的節(jié)電特性;

  • ISO 11898-6: 2013 對ISO 11898-2 和 ISO 11898-5 的補(bǔ)充,并參照ISO 8802-2,定義使用可配置的幀實(shí)現(xiàn)選擇性喚醒總線的機(jī)制;

  • ISO 16845-1: 2004 定義測試符合ISO 11898-1標(biāo)準(zhǔn)CAN應(yīng)用的方法和條件;

  • ISO 16845-2: 2014 定義包括特定功能下可以選擇性喚醒總線的CAN收發(fā)器的測試實(shí)例和測試要求,也稱為CAN總線的一致性測試

 


CAN總線底層標(biāo)準(zhǔn)與ISO/OSI模型的對應(yīng)關(guān)系,如圖1所示。對于媒體專用接口(Medium Dependent Interface, MDI),沒有統(tǒng)一的國際標(biāo)準(zhǔn)。CiA DS-102 (CiA: CAN in Automation )僅定義使用專用連接器(DB9),并對PIN定義作出一定規(guī)范。

P1.png圖1. CAN總線標(biāo)準(zhǔn)

 

 

 

上層標(biāo)準(zhǔn)

雖然底層標(biāo)準(zhǔn)相同,不同應(yīng)用領(lǐng)域和組織會制定不同的上層標(biāo)準(zhǔn)。有的廠商開發(fā)并推廣其應(yīng)用層標(biāo)準(zhǔn),在某些領(lǐng)域得以廣泛應(yīng)用。對于汽車行業(yè)來說,幾乎每家廠商都有自己的CAN上層標(biāo)準(zhǔn)。比較流行的有工業(yè)自動化領(lǐng)域 CiA 的 CANopen ,Rockwell 的 DeviceNet;嵌入式控制領(lǐng)域 Kvaser 的 CAN Kingdom;智能設(shè)備控制 Honeywell 的 SDS;汽車診斷 ISO 14229 定義的 UDS,和中重型汽車CAN總線標(biāo)準(zhǔn) SAE J1939 。如表1示。

Sheet 1.png

 表1. CAN上層標(biāo)準(zhǔn)舉例

 

 

總線特點(diǎn)

  • 符合OSI開放式通信系統(tǒng)參考模型;

  •  兩線式總線結(jié)構(gòu),電氣信號為差分式;

  • 多主控制。在總線空閑時,所有的單元都可開始發(fā)送消息,最先訪問總線的單元可獲得發(fā)送權(quán);

  • 多個單元時開始發(fā)送時,發(fā)送高優(yōu)先級 ID 消息的單元可獲得發(fā)送權(quán);

  •  消息報文不包含源地址或者目標(biāo)地址,僅通過標(biāo)識符表明消息功能和優(yōu)先級;

  • 基于固定消息格式的廣播式總線系統(tǒng),短幀結(jié)構(gòu);

  • 事件觸發(fā)型。只有當(dāng)有消息要發(fā)送時,節(jié)點(diǎn)才向總線上廣播消息;

  • 可以通過發(fā)送遠(yuǎn)程幀請求其它節(jié)點(diǎn)發(fā)送數(shù)據(jù);

  • 消息數(shù)據(jù)長度 0~8 Byte;

  • 錯誤檢測功能。所有節(jié)點(diǎn)均可檢測錯誤,檢測處錯誤的單元會立即通知其它所有單元;

  •  發(fā)送消息出錯后,節(jié)點(diǎn)會自動重發(fā);

  •  故障限制。節(jié)點(diǎn)控制器可以判斷錯誤是暫時的數(shù)據(jù)錯誤還是持續(xù)性錯誤,當(dāng)總線上發(fā)生持續(xù)數(shù)據(jù)錯誤時,控制器可將節(jié)點(diǎn)從總線上隔離;

  •  通信介質(zhì)可采用雙絞線、同軸電纜和光導(dǎo)纖維,一般使用最便宜的雙絞線;

  •  理論上,CAN總線用單根信號線就可以通信,但還是配備了第二根導(dǎo)線,第二根導(dǎo)線與第一根導(dǎo)線信號為差分關(guān)系,可以有效抑制電磁干擾;

  • 在40米線纜條件下,最高數(shù)據(jù)傳輸速率 1Mbps;

  • 總線上可同時連接多個節(jié)點(diǎn),可連接節(jié)點(diǎn)總數(shù)理論上是沒有限制的,但實(shí)際可連接節(jié)點(diǎn)數(shù)受總線上時間延遲及電氣負(fù)載的限制;

  •  未定義標(biāo)準(zhǔn)連接器,但經(jīng)常用9腳 DSUB
     

應(yīng)用

在當(dāng)今汽車應(yīng)用領(lǐng)域,車內(nèi)電控單元(Electrical Control Unit, ECU)可能多達(dá) 70 個,除了引擎控制單元(Engine Control Unit, ECU )外,還存在傳動控制、安全氣囊、ABS、巡航控制、EPS、音響系統(tǒng)、門窗控制和電池管理等模塊,雖然某些模塊是單一的子系統(tǒng),但是模塊之間的互連依然非常重要。例如,有的子系統(tǒng)需要控制執(zhí)行器和接收傳感器反饋,CAN總線可以滿足這些子系統(tǒng)數(shù)據(jù)傳輸?shù)男枨?。汽車?nèi)子模塊的總線互連架構(gòu)使得軟件可以更輕易地實(shí)現(xiàn)安全、經(jīng)濟(jì)和便利等新特性,相比傳統(tǒng)汽車網(wǎng)絡(luò)架構(gòu)中模塊單元直接連接更加經(jīng)濟(jì)。 CAN總線實(shí)現(xiàn)汽車內(nèi)互連系統(tǒng)由傳統(tǒng)的點(diǎn)對點(diǎn)互連向總線式系統(tǒng)的進(jìn)化,大大降低汽車內(nèi)電子系統(tǒng)布線的復(fù)雜度,如圖2所示。

P2.png

 P3.png

 

圖2. 傳統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu) VS 總線式結(jié)構(gòu)

在 VW 的定義(SSP 269)中,根據(jù)應(yīng)用范圍將車內(nèi)CAN總線分為三類:

  • Convenience CAN /舒適CAN網(wǎng)絡(luò),主要控制車門窗、空調(diào)等設(shè)備,最高傳輸速度100 kbps

  • Powertrain CAN /動力CAN網(wǎng)絡(luò),主要控制動力相關(guān)設(shè)備,如發(fā)動機(jī)、制動、ABS等,最高傳輸速度500 kbps

  • Infotainment CAN /信息娛樂CAN網(wǎng)絡(luò),主要控制收音機(jī)、電話和導(dǎo)航等設(shè)備,最高傳輸速度100 kbps

根據(jù)數(shù)據(jù)傳輸速度不同CAN總線分兩類:高速CAN(ISO 11898-2)和低速CAN(ISO 11898-3)。

高速CAN(按BOSCH說法,也叫CAN-C),數(shù)據(jù)速率在 125kbps ~ 1Mbps,應(yīng)用在實(shí)時性要求高的節(jié)點(diǎn),如引擎管理單元、電子傳動控制、ESP和儀表盤等;低速CAN(CAN-B),數(shù)據(jù)速率在 5kbps ~ 125kbps,應(yīng)用在實(shí)時性要求低的節(jié)點(diǎn),主要在舒適和娛樂領(lǐng)域,如空調(diào)控制、座椅調(diào)節(jié)、燈光、視鏡調(diào)整等,這些節(jié)點(diǎn)對實(shí)時性要求不高,而且分布較為分散,線纜較易收到損壞,低速CAN的傳輸速度即可滿足要求,而且單根線纜也可以工作,很好地適應(yīng)了以上需求。不同速度類型的CAN總線設(shè)備不能直接連在同一路總線上,它們之間需要通過網(wǎng)關(guān)隔離。

CAN總線在汽車診斷領(lǐng)域的應(yīng)用也非常廣泛,ECU直接掛載在總線上,可以很快地獲取診斷所需的信息。傳統(tǒng)的汽車診斷接口(如KWP2000)應(yīng)用逐漸減少。

圖2a示意了汽車內(nèi)總線系統(tǒng)及電子設(shè)備的邏輯分布,總線系統(tǒng)包括 CAN、LIN、FlexRay 和 MOST 。注意,車載以太網(wǎng)在圖中未列出,但它的應(yīng)用日漸廣泛。以上不同類型和速度的總線,通過網(wǎng)關(guān) Gateway 模塊相互通信。(圖片來源:鏈接)

P4.png

 圖2a. 汽車內(nèi)總線系統(tǒng)舉例

 

局限性

  • 由于CAN總線仲裁的特點(diǎn),即使往總線上周期性發(fā)送消息,也不能保證節(jié)點(diǎn)可以確定(周期) 地收到消息,CAN不適合對時間特別敏感的應(yīng)用;

  •  最高傳輸速率只有 1Mbps ,對于汽車自動駕駛應(yīng)用的數(shù)據(jù)傳輸,或者視頻音頻傳輸帶寬不足。為解決這方面的需求,CAN FD 速度有所上升,另外還有 MOST、LVDS 和以太網(wǎng)等;

  • 對于簡單的應(yīng)用,高成本的CAN總線雖然可靠性很高,但有點(diǎn)浪費(fèi)。LIN 總線相比CAN具有成本優(yōu)勢,更適合應(yīng)用于車窗座椅空調(diào)等設(shè)備
     

電路基礎(chǔ)

硬件拓?fù)?/p>

連接在CAN總線上的設(shè)備叫做節(jié)點(diǎn)設(shè)備(CAN Node),CAN網(wǎng)絡(luò)的拓?fù)湟话銥榫€型。線束最常用為非屏蔽雙絞線(UTP),線上傳輸為對稱的電平信號(差分)。圖3示為CAN總線網(wǎng)絡(luò)示意圖,節(jié)點(diǎn)主要包括Host、控制器和收發(fā)器三部分。Host常集成有CAN控制器,CAN控制器負(fù)責(zé)處理協(xié)議相關(guān)功能,以減輕Host的負(fù)擔(dān)。CAN收發(fā)器將控制器連接到傳輸媒介。通??刂破骱涂偩€收發(fā)器通過光耦或磁耦隔離,這樣即使總線上過壓,損壞收發(fā)器,控制器和Host設(shè)備也可以得到保護(hù)。

P5.png

 圖3. CAN總線節(jié)點(diǎn)示意圖

 

高速CAN總線最高信號傳輸速率為1Mbps,支持最長距離 40m。ISO 11898-2 規(guī)定要求在高速CAN總線的兩端安裝端接電阻(RL)以消除反射,而低速CAN最高速度只有 125Kbps,因此 ISO 11898-3 沒有要求端接。ISO 11898 規(guī)定的CAN總線上最多 32 個節(jié)點(diǎn)。實(shí)際應(yīng)用中要考慮到CAN總線收發(fā)器的性能,以及工作的CAN網(wǎng)絡(luò)是高速CAN還是低速CAN。在傳輸距離方面,由于距離越大,信號時延也越大,為確保消息的正確采樣,總線上的信號速率相應(yīng)也得下降,表2列出推薦的信號速率與距離的關(guān)系。

P6.png

 表2. CAN總線長度與信號速率關(guān)系(推薦)

 

 

收發(fā)器

CAN收發(fā)器包括 CANH 和 CANL 兩根信號,CANH和CANL信號采用差分電平,這樣可以取得更好的電磁兼容效果。CAN總線物理傳輸媒介只需要兩根線。

前面的標(biāo)準(zhǔn)部分有介紹,CAN總線分高速CAN和低速CAN,收發(fā)器因之也分為高速CAN收發(fā)器(1Mbps)和低速CAN收發(fā)器(125Kbps)。低速CAN也叫 Fault Tolerant CAN ,指的是即使總線上一根線失效,總線依然可以通信。圖4示例高速CAN收發(fā)器的基本電路結(jié)構(gòu)。當(dāng)兩個晶體管都關(guān)斷時,CANH和CANL上電壓相同,且都為 0.5*VCC ;而當(dāng)兩個晶體管都打開時,CANH 和 CANL 上即存在一定的壓差,且壓差與負(fù)載電阻值相關(guān)。ISO 11898-2 要求此時 CANH 和 CANL 壓差在 2V 左右。

CAN收發(fā)器的特性包括非常低的電磁輻射和很強(qiáng)的抗擊共模噪聲的能力。另外,CAN收發(fā)器可以提供高達(dá) 8KV 的ESD保護(hù),在電路設(shè)計中可以在收發(fā)器附近增加共模電感以進(jìn)一步降低電磁輻射(圖5)。

P7.png

 

 

 

圖4. CAN總線收發(fā)器(MCP2551)

P8.png

 圖5. 共模電感降低輻射

 

 

信號電平

高速CAN和低速CAN總線在物理層信號電平上定義有所不同。圖6和圖7表示高速和低速CAN總線上信號電平與總線邏輯的對應(yīng)關(guān)系。

高速CAN,定義 CANH 和 CANL 電壓相同(CANH = CANL = 2.5V)時為邏輯“1”,CANH和CANL 電壓相差 2V(CANH = 3.5V, CANL = 1.5V) 時為邏輯“0”。高速CAN收發(fā)器在共模電壓范圍內(nèi)(-12V ~ 12V),將CANH和CANL電壓相差大于 0.9V 解釋為顯性狀態(tài)(Dominant),而將CANH和CANL電壓相差小于 0.5V 解釋為為隱性狀態(tài)(Recessive)。收發(fā)器內(nèi)部有遲滯電路可以降低干擾。

低速CAN,定義CANH和CANL電壓相差 5V (CANH = 0V, CANL = 5V)時為邏輯“1”,相差 2.2V (CANH = 3.6V, CANL = 1.4V)時為邏輯“0”。

在CAN總線上,邏輯“0”和“1”之間顯著的電壓差是總線可靠通信的保證。參照上面的描述,CAN總線上兩種電平狀態(tài)分別為:

顯性(Dominant ): 0
 隱性(Recessive ): 1
CAN總線的信號電平具有線與特性,即顯性電平(0)總是會掩蓋隱性電平(1)。如果不同節(jié)點(diǎn)同時發(fā)送顯性和隱性電平,總線上表現(xiàn)出顯性電平(0),只有在總線上所有節(jié)點(diǎn)發(fā)送的都是隱性電平(1)時,總線才表現(xiàn)為隱性。線與特性是CAN總線仲裁的電路基礎(chǔ)。詳細(xì)仲裁過程見下文“仲裁機(jī)制”部分。

P9.png

 圖6. 高速CAN信號電平( ISO 11898-2)

 

P10.png

 圖7. 低速CAN信號電平( ISO 11898-3)

 

連接器

在前文有提到,業(yè)界只規(guī)定了9 Pin D-Sub 類型的CAN總線連接器,其信號定義如圖8所示。

P12.png

 圖8. CAN 9 Pin D-Sub引腳定義

 

 

三種CAN標(biāo)準(zhǔn)物理層比較

除了上文介紹的高速CAN和低速CAN外,還有標(biāo)準(zhǔn)定義另外一種CAN物理層結(jié)構(gòu),即 Single Wire CAN。單線CAN可以減少一根傳輸線,但是要求節(jié)點(diǎn)間有良好的共地特性(相當(dāng)于第二根信號線)。單線CAN的信號抗干擾能力相對較弱,在設(shè)計中需要提高信號幅度以增加信噪比,如此又會讓它自身的輻射能力增加,因此必須降低其信號傳輸速率以達(dá)到電磁兼容的要求。綜上,單線CAN僅適合應(yīng)用在低速的車身電子單元、舒適及娛樂控制領(lǐng)域。低速CAN總線由于信號速度不高,在一根信號線失靈的情況下,仍可工作于單線模式。

三種CAN總線物理層的對比如表3列出??偩€連接拓?fù)鋱D如圖9,對于端接,高速CAN端接是在總線兩端,而低速CAN和單線CAN的端接都是在各節(jié)點(diǎn)位置。

P13.png

 表3. 三種CAN物理層標(biāo)準(zhǔn)比較

 

P14.png

 圖9. 三種CAN總線物理層的比較

 

 

通信原理

Multi-Master

安全敏感的應(yīng)用,比如汽車動力,對通信系統(tǒng)的可靠性要求很高。將總線工作正常與否歸結(jié)到單一節(jié)點(diǎn)是極其危險的,比較合理的方案是對總線接入的去中心化,亦即每個節(jié)點(diǎn)都有接入總線的能力。這也是CAN總線采用多主控(Multi-Master)線性拓?fù)浣Y(jié)構(gòu)的原因。在CAN總線上,每個節(jié)點(diǎn)都有往總線上發(fā)送消息的能力,而且消息的發(fā)送不必遵從任何預(yù)先設(shè)定的時序,通信是事件驅(qū)動的。只有當(dāng)有新的信息傳遞時,CAN總線才處于忙的狀態(tài),這使得節(jié)點(diǎn)接入總線速度非常快。CAN總線理論最高數(shù)據(jù)傳輸速率為1Mbps,對于異步事件反應(yīng)迅速,基本上對于毫秒級的實(shí)時應(yīng)用沒有任何問題。

尋址機(jī)制

不同于其它類型的總線,CAN總線不設(shè)定節(jié)點(diǎn)的地址,而是通過消息的標(biāo)識符(Identifier)來區(qū)別消息。CAN總線消息是廣播式的,也就是說在同一時刻所有節(jié)點(diǎn)都檢測到同樣的電平信號。接受節(jié)點(diǎn)通過識別消息中的標(biāo)識符,與該節(jié)點(diǎn)預(yù)設(shè)的過濾規(guī)則對比,如果滿足規(guī)則就接收這條消息,發(fā)送應(yīng)答,否則就忽略這條消息,關(guān)于這部分介紹見下文“條件接收”部分。這種機(jī)制雖然會增加消息幀的復(fù)雜度(增加標(biāo)識符),但是節(jié)點(diǎn)在此情況下可以無須了解其它節(jié)點(diǎn)的狀況,而相互間獨(dú)立工作,在總線上增加節(jié)點(diǎn)時僅須關(guān)注消息類型,而非系統(tǒng)上其它節(jié)點(diǎn)的狀況。這種以消息標(biāo)識符尋址的方式,讓在總線上增加節(jié)點(diǎn)變得更加靈活。

CSMA/CD+AMP

CAN總線通信原理可簡單描述為多路載波偵聽+基于消息優(yōu)先級的沖突檢測和仲裁機(jī)制(CSMA/CD+AMP),CSMA(Carrier Sense Multiple Access )指的所有節(jié)點(diǎn)必須都等到總線處于空閑狀態(tài)時才能往總線上發(fā)送消息;CD+AMP(Collision Detection + Arbitration on Message Priority)指的是如果多個節(jié)點(diǎn)往總線上發(fā)送消息時,具備最高優(yōu)先級(標(biāo)識符最?。┑南@得總線占有權(quán)。

 

幀分類

CAN總線定義四種幀類型,分別為數(shù)據(jù)幀、遠(yuǎn)程幀、錯誤幀和過載幀。數(shù)據(jù)幀就是總線上傳輸用戶數(shù)據(jù)的幀,其最高有效載荷是 8 Byte,除了有效載荷外,數(shù)據(jù)幀還包括必要的幀頭幀位部分以執(zhí)行CAN標(biāo)準(zhǔn)通信,比如消息標(biāo)識符(Identifier)、數(shù)據(jù)長度代碼、校驗信息等。遠(yuǎn)程幀是用來向總線上其它節(jié)點(diǎn)請求數(shù)據(jù)的幀,它的幀結(jié)構(gòu)與數(shù)據(jù)幀相似,只不過沒有有效載荷部分;錯誤幀是表示通信出錯的幀。數(shù)據(jù)幀和遠(yuǎn)程幀有標(biāo)準(zhǔn)格式和擴(kuò)展格式兩種格式。標(biāo)準(zhǔn)格式有 11 位的標(biāo)識符 , 擴(kuò)展格式有 29 位標(biāo)識符。

各種幀的用途分別為:

  • 數(shù)據(jù)幀:用于發(fā)送單元向接收單元傳送數(shù)據(jù)的幀;

  • 遠(yuǎn)程幀:用于接收單元向具有相同標(biāo)識符的發(fā)送單元請求數(shù)據(jù)的幀;

  • 錯誤幀:用于當(dāng)檢測出錯誤時向其它單元通知錯誤的幀;

  • 過載幀:用于接收單元通知其尚未做好接收準(zhǔn)備的幀
     

數(shù)據(jù)幀

數(shù)據(jù)幀的幀結(jié)構(gòu)如圖10所示,圖中示例標(biāo)準(zhǔn)數(shù)據(jù)幀(Standard)和擴(kuò)展數(shù)據(jù)幀(Extended)兩種格式。各字段定義及長度分別為:

  • SOF:表示數(shù)據(jù)幀開始;(1 bit)

  • Identifier:標(biāo)準(zhǔn)格式11 bit,擴(kuò)展格式29 bit包括Base Identifier(11 bit)和Extended Identifier(18 bit),該區(qū)段標(biāo)識數(shù)據(jù)幀的優(yōu)先級,數(shù)值越小,優(yōu)先級越高;

  • RTR:遠(yuǎn)程傳輸請求位,0時表示為數(shù)據(jù)幀,1表示為遠(yuǎn)程幀,也就是說RTR=1時,消息幀的Data Field為空;(1 bit)

  • IDE: 標(biāo)識符擴(kuò)展位,0時表示為標(biāo)準(zhǔn)格式,1表示為擴(kuò)展格式;(1 bit)

  • DLC:數(shù)據(jù)長度代碼,0~8表示數(shù)據(jù)長度為0~8 Byte;(4 bit)

  • Data Field:數(shù)據(jù)域;(0~8 Byte)

  • CRC Sequence:校驗域,校驗算法G(x) = x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1;(15 bit)

  • DEL:校驗域和應(yīng)答域的隱性界定符;(1 bit)

  • ACK:應(yīng)答,確認(rèn)數(shù)據(jù)是否正常接收,所謂正常接收是指不含填充錯誤、格式錯誤、 CRC 錯誤。發(fā)送節(jié)點(diǎn)將此位為1,接收節(jié)點(diǎn)正常接收數(shù)據(jù)后將此位置為0;(1 bit)

  • SRR:替代遠(yuǎn)程請求位,在擴(kuò)展格式中占位用,必須為1;(1 bit)

  • EOF:連續(xù)7個隱性位(1)表示幀結(jié)束;(7 bit)

  • ITM:幀間空間,Intermission (ITM),又稱Interframe Space (IFS),連續(xù)3個隱性位,但它不屬于數(shù)據(jù)幀。幀間空間是用于將數(shù)據(jù)幀和遠(yuǎn)程幀與前面的幀分離開來的幀。數(shù)據(jù)幀和遠(yuǎn)程幀可通過插入幀間空間將本幀與前面的任何幀(數(shù)據(jù)幀、遙控幀、錯誤幀、過載幀)分開。過載幀和錯誤幀前不能插入幀間空間。

P15.png

 

圖10. CAN標(biāo)準(zhǔn)格式和擴(kuò)展格式的數(shù)據(jù)幀/遠(yuǎn)程幀格式

 

遠(yuǎn)程幀

一般地,數(shù)據(jù)是由發(fā)送單元主動向總線上發(fā)送的,但也存在接收單元主動向發(fā)送單元請求數(shù)據(jù)的情況。遠(yuǎn)程幀的作用就在于此,它是接收單元向發(fā)送單元請求發(fā)送數(shù)據(jù)的幀。遠(yuǎn)程幀與數(shù)據(jù)幀的幀結(jié)構(gòu)類似,如上圖X所示。遠(yuǎn)程幀與數(shù)據(jù)幀的幀結(jié)構(gòu)區(qū)別有兩點(diǎn):

  • 數(shù)據(jù)幀的 RTR 值為“0”,遠(yuǎn)程幀的 RTR 值為“1”

  • 遠(yuǎn)程幀沒有數(shù)據(jù)塊

遠(yuǎn)程幀的 DLC 塊表示請求發(fā)送單元發(fā)送的數(shù)據(jù)長度(Byte)。當(dāng)總線上具有相同標(biāo)識符的數(shù)據(jù)幀和遠(yuǎn)程幀同時發(fā)送時,由于數(shù)據(jù)幀的 RTR 位是顯性的,數(shù)據(jù)幀將在仲裁中贏得總線控制權(quán)。

 

錯誤幀

用于在接收和發(fā)送消息時檢測出錯誤時,通知錯誤的幀。錯誤幀由錯誤標(biāo)志和錯誤界定符構(gòu)成。錯誤幀的幀結(jié)構(gòu)如圖11示。

  • 錯誤標(biāo)志:6-12 個顯性/隱性重疊位

  • 主動錯誤標(biāo)志(6個顯性位): 處于主動錯誤狀態(tài)的單元檢測出錯誤時輸出的錯誤標(biāo)志

  • 被動錯誤標(biāo)志(6個隱性位): 處于被動錯誤狀態(tài)的單元檢測出錯誤時輸出的錯誤標(biāo)志

  • 錯誤界定符:8 個隱性位

P16.png

 

圖11. 錯誤幀的幀結(jié)構(gòu)

 

過載幀

過載幀是用于接收單元通知發(fā)送單元它尚未完成接收準(zhǔn)備的幀。在兩種情況下,節(jié)點(diǎn)會發(fā)送過載幀:

  • 接收單元條件的制約,要求發(fā)送節(jié)點(diǎn)延緩下一個數(shù)據(jù)幀或遠(yuǎn)程幀的傳輸;

  • 幀間空間(Intermission)的 3 bit 內(nèi)檢測到顯性位

每個節(jié)點(diǎn)最多連續(xù)發(fā)送兩條過載幀。過載幀由過載標(biāo)志和過載界定符(8 個隱性位)構(gòu)成。數(shù)據(jù)幀的幀結(jié)構(gòu)如圖12所示。

P17.png

 圖12. 過載幀的幀結(jié)構(gòu)

 

仲裁機(jī)制

如果多個節(jié)點(diǎn)同時往總線上發(fā)送消息,總線的使用權(quán)是通過消息幀標(biāo)識符的逐位仲裁機(jī)制決定的,在仲裁過程中消息是不會丟失的。這里的不會丟失的意思是指仲裁完成后,獲得總線控制權(quán)的消息內(nèi)容沒有被仲裁過程篡改,將繼續(xù)在總線上發(fā)送沒有傳輸完的消息。
在CAN總線上,標(biāo)識符值越小,消息的優(yōu)先級越高。標(biāo)識符全零的消息,由于它將總線電平保持在顯性的時間最長,因此優(yōu)先級最高。CAN總線的仲裁機(jī)制如圖13所示,幾點(diǎn)說明:

  • Wire-AND Bus Logic:只有節(jié)點(diǎn)發(fā)送的全是隱性,總線電平才表現(xiàn)為隱性;

  • Arbitration Logic:所有發(fā)送節(jié)點(diǎn)在發(fā)送數(shù)據(jù)的同時,也檢測總線上的電平狀態(tài)。如果總線電平狀態(tài)與它發(fā)送的電平狀態(tài)一致,則繼續(xù)發(fā)送(Next);如果發(fā)送為顯性,總線電平狀態(tài)為隱性,則傳輸出現(xiàn)故障(Fault);如果發(fā)送為隱性,總線電平狀態(tài)為顯性,則該節(jié)點(diǎn)退出對總線占用權(quán)的競爭(Stop);

  • 節(jié)點(diǎn)A和節(jié)點(diǎn)C同時向總線上發(fā)送數(shù)據(jù),在仲裁階段,逐位對比總線上電平與自身發(fā)送的電平,在標(biāo)識符的第四位(ID7),節(jié)點(diǎn)C檢測到總線上電平與其自身發(fā)送電平不一致,它自動退出對總線的競爭,節(jié)點(diǎn)A則繼續(xù)發(fā)送數(shù)據(jù)

p24.png

 圖13. CAN總線仲裁機(jī)制

如上介紹,CAN總線上的逐位仲裁機(jī)制與 I2C 總線的仲裁都應(yīng)用到線與邏輯的電路基礎(chǔ),不同的是I2C的仲裁只是在主機(jī)間進(jìn)行,而CAN總線沒有主從機(jī)的概念。另外I2C的消息本身是不分優(yōu)先級的;CAN消息則是帶優(yōu)先級,有的消息出身高貴(標(biāo)識符值越?。?,在仲裁中總會取勝。

為消息劃分優(yōu)先級比較適合于實(shí)時控制系統(tǒng),這樣可以確保重要的信息優(yōu)先發(fā)送,相對次要的消息延遲發(fā)送,系統(tǒng)設(shè)計師應(yīng)該根據(jù)應(yīng)用的特點(diǎn)為不同消息確定不同的優(yōu)先級(標(biāo)識符),在類似 DeviceNet 這些規(guī)范組織的定義中,對于同樣類型的消息,比如溫度傳感器,即使它們可能來自不同的供應(yīng)商,但消息標(biāo)識符是一致的。

對于車身控制CAN網(wǎng)絡(luò)(舒適+信息娛樂),其特點(diǎn)是消息標(biāo)識符種類多,而且消息發(fā)送沒有固定頻率或規(guī)律,在此類應(yīng)用的CAN控制器,例如 Freescale 的 MSCAN(Motorola Scalable Controller Area Network)的設(shè)計中,控制器內(nèi)部包括 FIFO 寄存器,它將具有相同標(biāo)識符的消息按順序保存,從而避免接收緩沖器溢出。而對于動力系統(tǒng)控制的CAN網(wǎng)絡(luò),總線上的消息特點(diǎn)是速度快,但是存在一定規(guī)律,此類應(yīng)用的CAN控制器,例如 Freescale 的 FlexCAN(CAN 2.0B-Compliant),它包括 16 ~ 64 個稱為“mailbox”的接收緩沖器,運(yùn)行時根據(jù)特定的過濾規(guī)則,將不同標(biāo)識符的消息送到各自對應(yīng)的 mailbox 。

 

條件接收

前面有提到消息在CAN總線上是廣播式的,但并不是所有節(jié)點(diǎn)都會對總線上所有消息感興趣。節(jié)點(diǎn)通過控制器中過濾碼(Filter Code )和掩碼(Mask Code),再檢驗總線上消息的標(biāo)識符,來判斷是否接收該消息(Message Filtering)。

對于掩碼,“1”表示該位與本節(jié)點(diǎn)相關(guān),“0”表示該位與本節(jié)點(diǎn)不相關(guān)。舉例如下:

例1:僅接收消息標(biāo)識符為00001567(十六進(jìn)制)的幀

  • 設(shè)置過濾碼為00001567

  • 設(shè)置掩碼為1FFFFFFF

 

節(jié)點(diǎn)檢測消息的標(biāo)識符的所有位(29位),如果標(biāo)識符為00001567接收,否則舍棄。

例2:接收消息標(biāo)識符為00001567 到 0000156F 的幀

  • 設(shè)置過濾碼為00001560

  • 設(shè)置掩碼為1FFFFFF0

節(jié)點(diǎn)檢測消息的標(biāo)識符的高25位,最低的4位則不care。如果標(biāo)識符最高25位相同則接收,否則舍棄。

例3:接收消息標(biāo)識符為00001560 到 00001567 的幀

  • 設(shè)置過濾碼為00001560

  • 設(shè)置掩碼為1FFFFFF8

節(jié)點(diǎn)檢測消息的標(biāo)識符的高26位,最低的3位則不care。如果標(biāo)識符最高26位相同則接收,否則舍棄。

例4:接收所有消息幀幀

  • 設(shè)置過濾碼為0

  • 設(shè)置掩碼為0

節(jié)點(diǎn)接收總線上所有消息。

 

應(yīng)答機(jī)制

應(yīng)答位(ACK)用來表示節(jié)點(diǎn)已經(jīng)收到有效的幀。任何節(jié)點(diǎn)如果準(zhǔn)確無誤地接收到幀,則要向總線上發(fā)送顯性位,該顯性位將掩蓋發(fā)送節(jié)點(diǎn)輸出的隱性位,使總線上表現(xiàn)為顯性。如果發(fā)送節(jié)點(diǎn)檢測應(yīng)答位為隱性,那么說明沒有節(jié)點(diǎn)收到有效幀。接收節(jié)點(diǎn)可能在應(yīng)答位輸出隱性表示它沒有收到有效幀,但另外有收到有效幀的節(jié)點(diǎn)也可能輸出顯性表示它收到有效幀,這樣總線上總體上表現(xiàn)為顯性,發(fā)送節(jié)點(diǎn)也無從得知是否總線上所有節(jié)點(diǎn)都收到有效的幀。

 

位填充

CAN總線使用到的是非歸零編碼(NRZ),NRZ編碼的優(yōu)點(diǎn)是效率高,但卻不易區(qū)分哪里是bit開始,哪里是bit結(jié)束。因此為確保在同步通信過程中有足夠的電平跳變,規(guī)范中應(yīng)用到位填充機(jī)制,即在每連續(xù) 5 個相同電平后插入 1個反相電平,接收節(jié)點(diǎn)在收到消息后自動將填充位刪除。在幀內(nèi)除了CRC界定符、ACK域和EOF外,其余部分均應(yīng)用到位填充機(jī)制。在應(yīng)用到位填充的域,檢測到連續(xù) 6 個顯性位或隱性位均視為報錯。檢測到錯誤后,節(jié)點(diǎn)將發(fā)出主動錯誤標(biāo)志。注意如前文述,主動錯誤標(biāo)志為連續(xù)6個顯性位,它是不符合位填充規(guī)則的,因此檢測到該電平的所有節(jié)點(diǎn)都會報錯。
位填充意味著實(shí)際傳輸?shù)臄?shù)據(jù)幀長度可能更長,圖14示例位填充前后的數(shù)據(jù)幀的變化,紫色位是位填充增加的位,接收節(jié)點(diǎn)收到消息后會自動刪除這些位。

P19.png圖14. 數(shù)據(jù)幀在位填充前后的比較

 

 

錯誤檢驗

完善的錯誤校驗機(jī)制是CAN總線高可靠性的有效保證。CAN總線包括 5 種錯誤校驗機(jī)制,其中 3 種在消息層面(Message Level),2 種在比特層面(Bit Level) 。如果消息出現(xiàn)五種錯誤中的任何一種,接收節(jié)點(diǎn)將不接收消息,并且產(chǎn)生錯誤幀通知發(fā)送節(jié)點(diǎn)重新發(fā)送消息,直到接收節(jié)點(diǎn)正確地收到消息。如果失效的節(jié)點(diǎn)持續(xù)不斷地報錯,導(dǎo)致總線掛死,那么在報錯次數(shù)達(dá)到設(shè)定的上限時,它將被控制器從總線上移除(詳見“故障限制”部分)。
消息層面的錯誤校驗機(jī)制體現(xiàn)在數(shù)據(jù)幀(圖10)中的 CRC 校驗域和 ACK 域。CRC校驗域包括傳輸數(shù)據(jù)的 15 bit Checksum值和 1 bit 界定符。ACK域包括 1 bit ACK位和 1 bit 界定符。消息層面的校驗還包括格式錯誤校驗,格式錯誤校驗會檢查消息幀中必須為隱性的位,如果這些位表現(xiàn)為顯性,那么節(jié)點(diǎn)將報格式錯誤。格式錯誤檢查的隱性位包括SOF、EOF、ACK界定符和CRC界定符。
在比特層面,發(fā)送節(jié)點(diǎn)在發(fā)送消息的同時會檢測總線電平,如果檢測到總線的狀態(tài)和它發(fā)送的狀態(tài)不符,則發(fā)送節(jié)點(diǎn)將報錯。該過程的兩處例外是消息幀處于標(biāo)識符仲裁階段和消息應(yīng)答階段。
最后一種錯誤校驗機(jī)制源于CAN總線的位填充機(jī)制。除了錯誤標(biāo)志和EOF,如果節(jié)點(diǎn)檢測到連續(xù) 6 個相同電平,它即報填充錯誤。主動錯誤標(biāo)志包括連續(xù)6個顯性位,總線上所有檢測到主動錯誤標(biāo)志的節(jié)點(diǎn)都會報錯,而產(chǎn)生各自的錯誤幀,這意味著總線上的錯誤幀可能由原先的 6 bit 到反饋疊加至 12 bit 不等。錯誤幀后面緊接著8個隱性位界定符(如圖10)。在總線空閑時,消息通過競爭仲裁獲得總線占用權(quán)后將重新傳送。

綜上,CAN總線的錯誤類型包括以下五種:

  • CRC錯誤(CRC Error)

在發(fā)送消息時,發(fā)送節(jié)點(diǎn)會根據(jù)特定的多項式計算出由數(shù)據(jù)幀SOF位到數(shù)據(jù)域最末位的Checksum值,并將該值放在數(shù)據(jù)幀的CRC域,隨著數(shù)據(jù)幀廣播到總線上。接收節(jié)點(diǎn)在收到數(shù)據(jù)后,應(yīng)用同樣的多項式計算Checksum值,并與收到的Checksum值對比。如果兩者一致,正常接收;如果不一致,則舍棄該消息,并發(fā)送錯誤幀請求發(fā)送節(jié)點(diǎn)重傳消息。CRC校驗過程如圖15所示。

CAN 2.0 規(guī)范定義CRC校驗應(yīng)用的多項式為:

P20.png

 

P21.png

 圖15. CRC校驗機(jī)制

  • 應(yīng)答錯誤(ACK Error)

發(fā)送單元在ACK位中檢測到隱性電平時所檢測到的錯誤(ACK沒被傳送過來時所檢測到的錯誤)。

  • 格式錯誤(Form Error)

檢測出與固定格式的位段相反的格式時所檢測到的錯誤。

  • 位錯誤(Bit Error)

比較輸出電平和總線電平(不含填充位),當(dāng)兩電平不一樣時所檢測到的錯誤。

  • 填充錯誤(Stuff Error)

在需要位填充的段內(nèi),連續(xù)檢測到 6 位相同的電平時所檢測到的錯誤。

 

故障限制

CAN總線上的每個節(jié)點(diǎn)控制器都會檢測消息是否出錯,如果節(jié)點(diǎn)發(fā)現(xiàn)消息出錯,它將發(fā)送錯誤標(biāo)志,從而打斷總線上正常的數(shù)據(jù)傳輸??偩€上其它沒有發(fā)現(xiàn)原始消息錯誤的節(jié)點(diǎn),在收到錯誤標(biāo)志后將采取必要的措施,比如舍棄當(dāng)前總線上的消息。CAN節(jié)點(diǎn)內(nèi)部有兩種錯誤狀態(tài)計數(shù)器 TEC 和 REC 。節(jié)點(diǎn)通過特定的規(guī)則管理這兩個計數(shù)器的值,其中:

  • TEC /Transmit Error Counter,發(fā)送錯誤狀態(tài)計數(shù)器,出現(xiàn)一次錯誤該計數(shù)器值 +8;

  • REC /Receive Error Counter,接收錯誤狀態(tài)計數(shù)器,出現(xiàn)一次錯誤該計數(shù)器值 +1;

  • 消息成功發(fā)送或接收一次,對應(yīng)的 TEC 或 REC 值相應(yīng) -1


TEC 增加的速度快于 REC 增加的速度,這是因為有很大概率地是發(fā)送節(jié)點(diǎn),而不是接受節(jié)點(diǎn)出錯!基于 TEC 和 REC數(shù)值的變化,CAN規(guī)范定義了節(jié)點(diǎn)的 3 種基本錯誤狀態(tài):

  • Error Active:正常狀態(tài),在此狀態(tài)下,節(jié)點(diǎn)可以發(fā)送所有類型的幀,包括錯誤幀;

  •  Error Passive:節(jié)點(diǎn)可以發(fā)送除錯誤幀以外的所有幀;

  • Bus Off:節(jié)點(diǎn)被控制器從總線上隔離

節(jié)點(diǎn)的三種錯誤狀態(tài)切換關(guān)系如圖16所示。

P22.png

 圖16. CAN總線節(jié)點(diǎn)錯誤狀態(tài)切換圖

 

波形舉例

圖17示例CAN通信過程信號波形。在 1 時刻,節(jié)點(diǎn)A向總線上發(fā)送消息;在 2 時刻,節(jié)點(diǎn)B和C收到消息,發(fā)送響應(yīng)應(yīng)答;在 3 時刻,節(jié)點(diǎn)B和C同時向總線上發(fā)送消息,競爭仲裁后節(jié)點(diǎn)C獲得總線占用權(quán),在 4 時刻繼續(xù)發(fā)送未傳輸完畢的數(shù)據(jù);節(jié)點(diǎn)A和B在 5 時刻響應(yīng)C發(fā)送的消息;在總線空閑的 6 時刻,B發(fā)送消息到總線上;在 7 時刻節(jié)點(diǎn)A和B響應(yīng)節(jié)點(diǎn)B發(fā)送的消息;在 8 時刻,節(jié)點(diǎn)A向空閑總線上發(fā)送消息。

P23.png

 圖17. CAN通信過程舉例

 




關(guān)鍵詞: CAN總線

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉