新聞中心

        EEPW首頁 > 汽車電子 > 設計應用 > 汽車CAN總線詳解

        汽車CAN總線詳解

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

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

        本文引用地址:http://www.104case.com/article/202503/468732.htm

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

        CAN起初由BOSCH提出,后經ISO組織確認為國際標準,根據特性差異又分不同子標準。CAN國際標準只涉及到 OSI(開放式通信系統參考模型 )的物理層和數據鏈路層。上層協議是在CAN標準基礎上定義的應用層,市場上有不同的應用層標準。

         

        發展歷史

        • 1983年,BOSCH開始著手開發

        • 1986年,在SAE會議上,正式發布;

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

        • 1991年,奔馳 500E 是世界上第一款基于CAN總線系統的量產車型;

        • 1991年,Bosch發布CAN 2.0標準,分 CAN 2.0A (11位標識符)和 CAN 2.0B (29位標識符);

        • 1993年,ISO發布CAN總線標準(ISO 11898),隨后該標準主要有三部分:

        •  ISO 11898-1:數據鏈路層協議

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

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

        注意:ISO 11898-2和ISO 11898-3物理層協議不屬于 BOSCH CAN 2.0標準。

        • 2012年,BOSCH發布 CAN FD 1.0 標準(CAN with Flexible Data-Rate),CAN FD定義了在仲裁后確使用不同的數據幀結構,從而達到最高 12Mbps 數據傳輸速率。CAN FD與CAN 2.0協議兼容,可以與傳統的CAN 2.0設備共存于同樣的網絡

         

        標準化

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

         

        底層標準

        CAN底層標準涵蓋OSI模型中的物理層和數據鏈路層,底層標準包括:

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

        •  ISO 11898-2: 2003 定義高速CAN總線(HS-CAN)物理層標準,最高數據傳輸速率 1Mbps ,應用為兩線平衡式信號(CAN_H, CAN_L),HS CAN是汽車動力和工業控制網絡中應用最為廣泛的物理層協議;

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

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

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

        • ISO 11898-6: 2013 對ISO 11898-2 和 ISO 11898-5 的補充,并參照ISO 8802-2,定義使用可配置的幀實現選擇性喚醒總線的機制;

        • ISO 16845-1: 2004 定義測試符合ISO 11898-1標準CAN應用的方法和條件;

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

         


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

        P1.png圖1. CAN總線標準

         

         

         

        上層標準

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

        Sheet 1.png

         表1. CAN上層標準舉例

         

         

        總線特點

        • 符合OSI開放式通信系統參考模型;

        •  兩線式總線結構,電氣信號為差分式;

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

        • 多個單元時開始發送時,發送高優先級 ID 消息的單元可獲得發送權;

        •  消息報文不包含源地址或者目標地址,僅通過標識符表明消息功能和優先級;

        • 基于固定消息格式的廣播式總線系統,短幀結構;

        • 事件觸發型。只有當有消息要發送時,節點才向總線上廣播消息;

        • 可以通過發送遠程幀請求其它節點發送數據;

        • 消息數據長度 0~8 Byte;

        • 錯誤檢測功能。所有節點均可檢測錯誤,檢測處錯誤的單元會立即通知其它所有單元;

        •  發送消息出錯后,節點會自動重發;

        •  故障限制。節點控制器可以判斷錯誤是暫時的數據錯誤還是持續性錯誤,當總線上發生持續數據錯誤時,控制器可將節點從總線上隔離;

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

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

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

        • 總線上可同時連接多個節點,可連接節點總數理論上是沒有限制的,但實際可連接節點數受總線上時間延遲及電氣負載的限制;

        •  未定義標準連接器,但經常用9腳 DSUB
           

        應用

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

        P2.png

         P3.png

         

        圖2. 傳統網絡結構 VS 總線式結構

        在 VW 的定義(SSP 269)中,根據應用范圍將車內CAN總線分為三類:

        • Convenience CAN /舒適CAN網絡,主要控制車門窗、空調等設備,最高傳輸速度100 kbps

        • Powertrain CAN /動力CAN網絡,主要控制動力相關設備,如發動機、制動、ABS等,最高傳輸速度500 kbps

        • Infotainment CAN /信息娛樂CAN網絡,主要控制收音機、電話和導航等設備,最高傳輸速度100 kbps

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

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

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

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

        P4.png

         圖2a. 汽車內總線系統舉例

         

        局限性

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

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

        • 對于簡單的應用,高成本的CAN總線雖然可靠性很高,但有點浪費。LIN 總線相比CAN具有成本優勢,更適合應用于車窗座椅空調等設備
           

        電路基礎

        硬件拓撲

        連接在CAN總線上的設備叫做節點設備(CAN Node),CAN網絡的拓撲一般為線型。線束最常用為非屏蔽雙絞線(UTP),線上傳輸為對稱的電平信號(差分)。圖3示為CAN總線網絡示意圖,節點主要包括Host、控制器和收發器三部分。Host常集成有CAN控制器,CAN控制器負責處理協議相關功能,以減輕Host的負擔。CAN收發器將控制器連接到傳輸媒介。通常控制器和總線收發器通過光耦或磁耦隔離,這樣即使總線上過壓,損壞收發器,控制器和Host設備也可以得到保護。

        P5.png

         圖3. CAN總線節點示意圖

         

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

        P6.png

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

         

         

        收發器

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

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

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

        P7.png

         

         

         

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

        P8.png

         圖5. 共模電感降低輻射

         

         

        信號電平

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

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

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

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

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

        P9.png

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

         

        P10.png

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

         

        連接器

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

        P12.png

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

         

         

        三種CAN標準物理層比較

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

        三種CAN總線物理層的對比如表3列出。總線連接拓撲圖如圖9,對于端接,高速CAN端接是在總線兩端,而低速CAN和單線CAN的端接都是在各節點位置。

        P13.png

         表3. 三種CAN物理層標準比較

         

        P14.png

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

         

         

        通信原理

        Multi-Master

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

        尋址機制

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

        CSMA/CD+AMP

        CAN總線通信原理可簡單描述為多路載波偵聽+基于消息優先級的沖突檢測和仲裁機制(CSMA/CD+AMP),CSMA(Carrier Sense Multiple Access )指的所有節點必須都等到總線處于空閑狀態時才能往總線上發送消息;CD+AMP(Collision Detection + Arbitration on Message Priority)指的是如果多個節點往總線上發送消息時,具備最高優先級(標識符最小)的消息獲得總線占有權。

         

        幀分類

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

        各種幀的用途分別為:

        • 數據幀:用于發送單元向接收單元傳送數據的幀;

        • 遠程幀:用于接收單元向具有相同標識符的發送單元請求數據的幀;

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

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

        數據幀

        數據幀的幀結構如圖10所示,圖中示例標準數據幀(Standard)和擴展數據幀(Extended)兩種格式。各字段定義及長度分別為:

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

        • Identifier:標準格式11 bit,擴展格式29 bit包括Base Identifier(11 bit)和Extended Identifier(18 bit),該區段標識數據幀的優先級,數值越小,優先級越高;

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

        • IDE: 標識符擴展位,0時表示為標準格式,1表示為擴展格式;(1 bit)

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

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

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

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

        • ACK:應答,確認數據是否正常接收,所謂正常接收是指不含填充錯誤、格式錯誤、 CRC 錯誤。發送節點將此位為1,接收節點正常接收數據后將此位置為0;(1 bit)

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

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

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

        P15.png

         

        圖10. CAN標準格式和擴展格式的數據幀/遠程幀格式

         

        遠程幀

        一般地,數據是由發送單元主動向總線上發送的,但也存在接收單元主動向發送單元請求數據的情況。遠程幀的作用就在于此,它是接收單元向發送單元請求發送數據的幀。遠程幀與數據幀的幀結構類似,如上圖X所示。遠程幀與數據幀的幀結構區別有兩點:

        • 數據幀的 RTR 值為“0”,遠程幀的 RTR 值為“1”

        • 遠程幀沒有數據塊

        遠程幀的 DLC 塊表示請求發送單元發送的數據長度(Byte)。當總線上具有相同標識符的數據幀和遠程幀同時發送時,由于數據幀的 RTR 位是顯性的,數據幀將在仲裁中贏得總線控制權。

         

        錯誤幀

        用于在接收和發送消息時檢測出錯誤時,通知錯誤的幀。錯誤幀由錯誤標志和錯誤界定符構成。錯誤幀的幀結構如圖11示。

        • 錯誤標志:6-12 個顯性/隱性重疊位

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

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

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

        P16.png

         

        圖11. 錯誤幀的幀結構

         

        過載幀

        過載幀是用于接收單元通知發送單元它尚未完成接收準備的幀。在兩種情況下,節點會發送過載幀:

        • 接收單元條件的制約,要求發送節點延緩下一個數據幀或遠程幀的傳輸;

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

        每個節點最多連續發送兩條過載幀。過載幀由過載標志和過載界定符(8 個隱性位)構成。數據幀的幀結構如圖12所示。

        P17.png

         圖12. 過載幀的幀結構

         

        仲裁機制

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

        • Wire-AND Bus Logic:只有節點發送的全是隱性,總線電平才表現為隱性;

        • Arbitration Logic:所有發送節點在發送數據的同時,也檢測總線上的電平狀態。如果總線電平狀態與它發送的電平狀態一致,則繼續發送(Next);如果發送為顯性,總線電平狀態為隱性,則傳輸出現故障(Fault);如果發送為隱性,總線電平狀態為顯性,則該節點退出對總線占用權的競爭(Stop);

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

        p24.png

         圖13. CAN總線仲裁機制

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

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

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

         

        條件接收

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

        對于掩碼,“1”表示該位與本節點相關,“0”表示該位與本節點不相關。舉例如下:

        例1:僅接收消息標識符為00001567(十六進制)的幀

        • 設置過濾碼為00001567

        • 設置掩碼為1FFFFFFF

         

        節點檢測消息的標識符的所有位(29位),如果標識符為00001567接收,否則舍棄。

        例2:接收消息標識符為00001567 到 0000156F 的幀

        • 設置過濾碼為00001560

        • 設置掩碼為1FFFFFF0

        節點檢測消息的標識符的高25位,最低的4位則不care。如果標識符最高25位相同則接收,否則舍棄。

        例3:接收消息標識符為00001560 到 00001567 的幀

        • 設置過濾碼為00001560

        • 設置掩碼為1FFFFFF8

        節點檢測消息的標識符的高26位,最低的3位則不care。如果標識符最高26位相同則接收,否則舍棄。

        例4:接收所有消息幀幀

        • 設置過濾碼為0

        • 設置掩碼為0

        節點接收總線上所有消息。

         

        應答機制

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

         

        位填充

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

        P19.png圖14. 數據幀在位填充前后的比較

         

         

        錯誤檢驗

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

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

        • CRC錯誤(CRC Error)

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

        CAN 2.0 規范定義CRC校驗應用的多項式為:

        P20.png

         

        P21.png

         圖15. CRC校驗機制

        • 應答錯誤(ACK Error)

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

        • 格式錯誤(Form Error)

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

        • 位錯誤(Bit Error)

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

        • 填充錯誤(Stuff Error)

        在需要位填充的段內,連續檢測到 6 位相同的電平時所檢測到的錯誤。

         

        故障限制

        CAN總線上的每個節點控制器都會檢測消息是否出錯,如果節點發現消息出錯,它將發送錯誤標志,從而打斷總線上正常的數據傳輸。總線上其它沒有發現原始消息錯誤的節點,在收到錯誤標志后將采取必要的措施,比如舍棄當前總線上的消息。CAN節點內部有兩種錯誤狀態計數器 TEC 和 REC 。節點通過特定的規則管理這兩個計數器的值,其中:

        • TEC /Transmit Error Counter,發送錯誤狀態計數器,出現一次錯誤該計數器值 +8;

        • REC /Receive Error Counter,接收錯誤狀態計數器,出現一次錯誤該計數器值 +1;

        • 消息成功發送或接收一次,對應的 TEC 或 REC 值相應 -1


        TEC 增加的速度快于 REC 增加的速度,這是因為有很大概率地是發送節點,而不是接受節點出錯!基于 TEC 和 REC數值的變化,CAN規范定義了節點的 3 種基本錯誤狀態:

        • Error Active:正常狀態,在此狀態下,節點可以發送所有類型的幀,包括錯誤幀;

        •  Error Passive:節點可以發送除錯誤幀以外的所有幀;

        • Bus Off:節點被控制器從總線上隔離

        節點的三種錯誤狀態切換關系如圖16所示。

        P22.png

         圖16. CAN總線節點錯誤狀態切換圖

         

        波形舉例

        圖17示例CAN通信過程信號波形。在 1 時刻,節點A向總線上發送消息;在 2 時刻,節點B和C收到消息,發送響應應答;在 3 時刻,節點B和C同時向總線上發送消息,競爭仲裁后節點C獲得總線占用權,在 4 時刻繼續發送未傳輸完畢的數據;節點A和B在 5 時刻響應C發送的消息;在總線空閑的 6 時刻,B發送消息到總線上;在 7 時刻節點A和B響應節點B發送的消息;在 8 時刻,節點A向空閑總線上發送消息。

        P23.png

         圖17. CAN通信過程舉例

         




        關鍵詞: CAN總線

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 响水县| 石林| 任丘市| 奉贤区| 阿拉善盟| 沙河市| 江油市| 博野县| 定南县| 亚东县| 英德市| 蒙自县| 峨边| 丰台区| 如皋市| 金溪县| 镇平县| 安吉县| 兖州市| 南安市| 新昌县| 密云县| 彭阳县| 海南省| 堆龙德庆县| 潞西市| 五莲县| 凉城县| 武宣县| 香港 | 金溪县| 张家港市| 阿坝| 东阳市| 华蓥市| 黑河市| 瑞昌市| 桐梓县| 平利县| 武清区| 蛟河市|