CAN總線基礎


CAN總線基礎(上)

概述

汽車電子設備的不斷增多,對汽車上的線束分布以及信息共享與交流提出了更高的要求。傳統的電氣系統往往采用單一連接的方式通信,這必將帶來線束的冗余以及維修的成本的提高。


傳統的單一通信的對接方式,已經不能滿足現代汽車電子發展的需求,采用更為先進的總線技術勢在必行。總線技術可以實現信息的實時共享、解決了傳統布線方式中線束多、布線難、成本高等問題,從而提高整車通信的質量與品質。

 

CAN總線(Controller Area Network,控制器局域網絡)由德國博世公司於上世紀80年代提出,近20年來,隨着CAN總線在工業測控與汽車領域的普及,CAN網絡技術不斷優化,取得了長足發展。如今CAN總線已經成為了汽車上不可或缺的重要環節,ECU內部的CAN總線開發也占到了ECU開發中的很大分量。在汽車中為了滿足車載系統的不同要求,主要采用高速CAN和低速CAN。這兩者以不同的總線速率工作以獲得最佳的性價比,在兩條總線之間采用CAN網關進行連接。

 

(1)高速CAN(動力總線)

高速CAN總線的傳輸速率范圍在125kbit/s - 1Mbit/s之間,主要用於傳動系數傳輸的實時性要求(如發動機控制、自動變速箱控制、行駛穩定系統、組合儀表等)。

 

(2)低速CAN(舒適總線)

低速CAN總線的傳輸速率范圍在5kbit/s - 125kbit/s之間。主要用於舒適系統和車身系統的數據傳輸的實時性要求(如空調控制、座椅調節、車窗升降等)。

CAN總線特點

CAN總線是一種串行數據通訊協議,其中包含了CAN協議的物理層以及數據鏈路層。可以完成對數據的位填充,數據塊編碼,循環冗余效驗,幀優先級的判別等工作。其主要特點如下:

(1)多主機方式工作,網絡上任意一個節點(未脫離總線)均可以隨時向總線網絡上發布報文幀。

(2)節點發送的報文幀可以分為不同的優先級,滿足不同實時要求。

(3)采用載波偵聽多路訪問/沖突檢測(CSMA/CD)技術,當兩個節點同時發布信息時,高優先級報文可不受影響地傳輸數據。

(4)節點總數實際可達110個。

(5)采用短幀結構,每一幀最多有8個有效字節。

(6)當某個節點錯誤嚴重時,具有自動關閉功能,切斷與總線的聯系,致使總線上的其他操作不受影響。

CAN總線物理層

(1)總線結構

CAN總線采用雙線傳輸,兩根導線分別作為CAN_H、CAN_L,並在終端配備有120Ω的電阻。收到總線信號時,CAN收發器將信號電平轉化為邏輯狀態,即CAN_H與CAN_L電平相減后,得到一個插值電平。各種干擾(如點火系統)在兩根導線上的作用相同,相減后得到的插值電平可以濾過這些干擾。

(2)總線電平

CAN總線有兩種邏輯電平狀態,即顯性與隱性。顯性電平代表“0”,隱性電平代表“1”。采用非歸零碼編碼,即在兩個相同電平之間並不強制插入一個零狀態電平。

 

高速CAN在傳輸隱性位時,CAN_H與CAN_L上的電平位均為2.5V;在傳輸顯性位時分別為3.5V與1.5V。

 

低速CAN在傳輸隱性狀態位時,CAN_H上的電平為0V,CAN_L上的電平位5V。在傳輸顯性狀態位時,CAN_H上的電平位3.6V,CAN_L的位1.4V。

為了確保通訊的正確性,總線信號必須在一定時間內出現在總線上,並且保證被正確采樣。總線信號傳輸有一定的時間延遲,最大的可靠的總線波特率與總線長度有關。ISO11898中對各種總線長度有着以下定義:

★ 1Mbit/s 總線長度為40m(規范)。

★ 500kbit/s 總線長度最大值為100m(建議值)。

★ 250kbit/s 總線長度最大值為250m。

★ 125kbit/s 總線長度最大值為500m。

★ 40kbit/s 總線長度最大值為1000m。

CAN總線硬件設備

(1)CAN通信線纜,實現節點的互聯,是傳輸數據的通道。主要有:普通雙絞線,同軸電纜,光纖。

(2)CAN驅動/接收器,將信息封裝為幀后發送,接收到的幀將其還原為信息、標定並報告節點狀態。

(3)CAN控制器,專按協議要求設計制造,經簡單總線連接即可實現CAN的全部功能。包括:SJA1000(Philips),82527(Intel)。

(4)CAN微控制器,嵌有部分或全部CAN控制模塊及相關接口的通用型微控制器現如今很多芯片都配備CAN接口。

 

 

 

 

CAN總線基礎(下)

CAN報文幀結構

在CAN總線上,報文是以“幀”來發送的,每一幀都包含以下幾個部分:

(1)幀起始

在總線空閑時,總線為隱性狀態。幀起始由單個顯性位構成,標志着報文的開始,並在總線上起着同步作用。

(2)仲裁段

仲裁的主要是定義了報文的標識符,也俗稱ID。在CAN2.0A規范中,標識符為11位,而在CAN2.0B中變為了29位。這意味着在2.0B中可以存在更多不同類型的報文,但是也降低了總線的利用率。

(3)控制段

主要定義了數據域字節的長度。通過數據長度碼,接收節點可以判斷報文數據是否完整。

(4)數據域

包含有0~8個字節數據。

(5)CRC域

CRC又稱循環冗余碼效驗(Cyclical Redundancy Check),是數據通信中常見的查錯方法。

(6)ACK域

用於接收節點的反饋應答。

(7)幀結束

由一串7個隱性位組成,表示報文幀的結束。

Ps:在CAN總線的開發中,核心的關注點就是CAN報文ID以及其數據域。根據客戶的要求,ECU接收自己感興趣的ID報文的同時,也向外發送別的ECU所需要的ID報文。一般不同整車廠在開發自己的CAN協議規范的同時,也會有自己的checksum機制,不滿足checksum的報文,數據將不會被ECU所接收。

仲裁機制

仲裁是總線應用中一個相當重要的概念,在CAN總線采用載波偵聽多路訪問/沖突檢測(CSMA/CD)技術。如果總線空閑(隱性位),有報文准備發送,那么每一個節點都可以開始發送報文。報文以顯性位(報文幀開始位)開始,接着是標識符。如果多個節點同時開始發送報文,那么使用“線與”仲裁機制(仲裁用邏輯“與”)來解決總線沖突,確定優先級最高的報文,而不需要損失時間或數據(非破壞性仲裁)。仲裁機制使用標識符為判斷依據,不僅代表報文幀的內容,還代表報文幀發送的優先級。二進制數越小的標識符,優先級越高;反之亦然。

如上圖,ECU單元1和ECU單元2同時開始向總線發送數據,開始部分他們的數據格式是一樣的,故無法區分優先級,直到T時刻,單元1輸出隱性電平,而單元2輸出顯性電平,此時單元1仲裁失利,立刻轉入接收狀態工作,不再與單元2競爭,而單元2則順利獲得總線使用權,繼續發送自己的數據。

 

CAN報文幀種類

CAN總線報文傳輸有以下4種不同的格式:

(1)數據幀:由發送節點發出,包含0 - 8個數據字節。

(2)遠程幀:發送遠程幀向網絡節點請求發送某一標識符的數據幀。

(3)錯誤幀:總線節點發現錯誤時,以錯誤幀的方式通知網絡上的其他節點。

(4)過載幀:發送過載幀,表示當前節點不能處理后續的報文(如幀延遲等)。

Ps:為了保持總線的利用率,在車載總線上數據幀的報文一般均為8字節。

 

CAN總線錯誤

CAN總線將錯誤分為臨時性錯誤和長期性錯誤。前者主要由外部因素引起,如總線上驅動電壓波形不規整、有尖峰或毛刺時,其數據傳輸性能會受到一定程度的短期干擾。長期性錯誤則主要由網絡組建非正常狀況引起,比如接觸不良、線路故障、發送器或接收器失效等。CAN中每個具有數據通信能力的網絡單元內部都集成有一個發送錯誤計數器和接受錯誤計數器,當該單元在數據發送階段出現一次錯誤時,其發送錯誤計數器自加8;在數據接收階段出現一次錯誤時,其接收錯誤計數器自加1。在相應計數器內容非0的情況下,網絡單元每成功發送一幀,發送錯誤計數器自減1;每成功接收一幀,接收錯誤計數內容原本小於127時自減1,大於127時被置為119 - 127之間任意值。這樣,如果某個網絡單元的錯誤計數在不斷增長,就說明該單元的數據通信在頻繁發生故障。當計數器內容超過一定閾值時,可以認為該故障是由長期性錯誤引起的。這種機制保證了當某一個節點出現故障的時候,不會造成總線長時間癱瘓。

 

 

 

一口氣從零讀懂CAN總線 上

概要

上世紀八十年代以來,汽車ECU越來越多,如ABS,電控門窗,電子燃油噴射裝置。如果仍然采用常規的點對點布線方式,即電線一段與開關相接,另一端與用電設備相通,將會導致車上電線數目的急劇增加,從而帶來線束的冗余及維修成本的提高。這就對汽車的線束分布及信息通訊提出了更高的要求。總線技術可以實現信息的實時共享,解決了傳統布線方式中線束多,布線難,成本高等問題,CAN(Controller Area Network)總線技術應運而生。

點對點通信總線通信

CAN總線是由德國研發和生產汽車電子產品著稱的BOSCH公司開發的,並最終成為國際標准(ISO11519),是國際上應用最廣泛的現場總線之一。CAN總線是一種多主控(Multi-Master)的總線系統。傳統總線系統如USB或以太網等是在總線控制器的協調下,實現從A節點到B節點大量數據的傳輸。CAN網絡的消息是廣播式的,即在同一時刻網絡上所有節點偵測的數據是一致的,它是一種基於消息廣播模式的串行通信總線。

 

CAN總線的很多優點,使得它得到了廣泛的應用,如傳輸速度最高到1Mbps, 通信距離最遠到10km,無損位仲裁機制,多主結構。

 

CAN總線標准

CAN總線標准之規定了物理層和數據鏈路層,至於應用層需要用戶自定義。不同的CAN標准僅物理層不同。物理層和數據鏈路層:ISO11898;應用層:不同的應用領域使用不同的應用層標准。

 

 

CAN物理層

CAN拓撲網絡

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

在發送數據時,CAN控制器把要發送的二進制編碼通過CAN_Tx線發送到CAN收發器,然后由收發器把這個普通的邏輯電平信號轉化成差分信號,通過差分線CAN_High和CAN_Low輸出到CAN總線網絡。接收數據過程,相反。采用差分信號,可以取得更好的電磁兼容效果。因此,CAN總線物理傳輸媒介只需要兩根線。

高速CAN總線最高信號傳輸速率為1Mbps,支持最長距離40m。ISO11898-2要求在高速CAN總線兩段安裝端接電阻RL(端接電阻一般為120Ω,因為電纜的特性阻抗為120 Ω,為了模擬無限遠的傳輸線。)以消除反射。低速CAN最高速度只有125Kbps,所以ISO11898-3沒有端接要求。

因為傳輸距離越大,信號時延也越大,為了保證消息的正確采樣,總線上的信號速率相應也要下降。下圖是推薦的信號速率與距離的關系。

CAN收發器

CAN總線分高速CAN和低速CAN,收發器也分為高速CAN收發器(1Mbps)和低速CAN收發器(125Kbps)。低速CAN也叫Fault
Tolerance CAN,指的是即使總線上一根線失效,總線依然可以通信。如同串口中的MAX3232用作電平轉換,CAN收發器的作用則是把邏輯信號轉換為差分信號。

差分信號

CAN總線采用差分信號傳輸,通常情況下只需要兩根信號線就可以進行正常的通信。在差分信號中,邏輯0和邏輯1是用兩根差分信號線的電壓差來表示。當處於邏輯1,CAN_High和CAN_Low的電壓差小於0.5V時,稱為隱性電平(Recessive);當處於邏輯0,CAN_High和CAN_Low的電壓差大於0.9V,稱為顯性電平(Dominant)。

高速CAN

低速容錯CAN (Fault Tolerance CAN)

CAN總線遵從“線與”機制:“顯性”位可以覆 蓋“隱性”位;只有所有節點都發 送“隱性”位, 總線才處於“隱性” 狀態。這種“線與”機制使CAN總線呈現顯性優先的特性。

CAN總線連接器

下一部分將介紹CAN總線數據鏈路層,和CAN總線同步機制。

 

 

一口氣從零讀懂CAN總線 下

上一篇文章講了CAN總線的歷史、標准、物理層,現在接着介紹CAN總線數據鏈路層,和CAN總線同步機制。

CAN數據鏈路層

在SPI通信中,片選、時鍾信號、數據輸入及數據輸出這四個信號都有單獨的信號線。而CAN使用的是兩條差分信號線,只能表達一個信號。簡潔的物理層決定了CAN必然要配上一套更為復雜的協議。如何用一個信號通道實現同樣甚至更強大的功能,答案就是對數據或操作命令進行打包。

通信機制

多主機(Multi-Master)

安全敏感的應用(如汽車動力)對通信系統的可靠性要求很高。將總線能否正常工作歸結到單一節點是非常危險的,比較合理的方案是對總線接入的去中心化,即每個節點都有接入總線的能力。這也是CAN總線采用多主控(Multi-Master)線性拓撲結構的原因。

在CAN總線上,每個節點都有往總線上發送消息的能力,而消息的發送不必遵從任何預先設定的時序,通信是事件驅動的。只有當有新的信息傳遞時,CAN總線才處於忙碌的狀態,這使得節點接入總線速度非常快。CAN總線理論最高數據傳輸速率為1Mbps,對於異步事件反應迅速,基本對於ms級別的實時應用沒有任何問題。

 

尋址機制

不同於其它類型的總線,CAN總線不設定節點的地址,而是通過消息的標識符(Identifier)來區別消息。這種機制雖然會增加消息的復雜度(增加標識符),但是節點在此情況下可以無需了解其他節點的狀況,而相互間獨立工作。在總線上增加節點時僅需關注消息類型,而非系統上其他節點的狀況。這種以消息標識符尋址的方式,讓總線上增加節點變得更加靈活。

總線訪問CSMA/CD+AMP

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

  • 多路載波偵聽:網絡上所有節點以多點接入的方式連接在同一根總線上,且發送數據是廣播式的。網絡上各個節點在發送數據前都要檢測總線上是否有數據傳輸:若網絡上有數據,暫時不發送數據,等待網絡空閑時再發;若網絡上無數據,立即發送已經准備好的數據。
  • 沖突檢測:節點在發送數據時,要不停的檢測發送的數據,確定是否與其他節點數據發送沖突,如果有沖突,則保證優先級高的報文先發送。
  • 非破壞性仲裁機制:通過ID仲裁,ID數值越小,報文優先級越高。

 

發送低優先級報文的節點退出仲裁后,在下次總線空閑時自動重發報文。

高優先級的報文不能中斷低優先級報文的發送。

報文接收過濾

CAN控制器大多具有根據ID過濾報文的功能,即只接收某些ID的報文。節點對接收到的報文進行過濾:比較消息ID與選擇器(Accepter)中和接受過濾相關位是否相同。如果相同,接收;如果不相同,則過濾。

CAN的報文種類及結構

報文的種類

在原始數據段的前面加上傳輸起始標簽、片選(識別)標簽、控制標簽,在數據的尾段加上CRC校驗標簽、應答標簽和傳輸結束標簽。把這些內容按特定的格式打包好,就可以用一個通道表達各種信號了。各種各樣的標簽,起到了協同傳輸的作用。當整個數據包被傳輸到其他設備時,只要這些設備按格式去解讀,就能還原出原始數據。類似這樣的數據包就被稱為CAN的數據幀。

為了更有效的控制通信,CAN一共規定了5中類型的幀,幀也稱為報文。

數據幀

數據幀在CAN通信中最主要,也最復雜。數據幀以一個顯性位(邏輯0)開始,以7個連續的隱性位(邏輯1)結束。CAN總線的數據幀有標准格式(Standard
Format)和擴展格式(Extended
Format)的區分。

數據幀可以分為七段:

  • 幀起始(SOF)

標識一個數據幀的開始,固定一個顯性位。

用於同步, 總線空閑期間的任何隱性到顯性的跳變都將引起節點進行 硬同步。只有總線在空閑期間節點才能夠發送SOF。

  • 仲裁段(Arbitration Field)

仲裁段的內容主要為本數據幀的ID信息。數據幀分為標准格式和擴展格式兩種,區別就在於ID信息的長度:標准格式的ID為11位;擴展格式為29位。在CAN協議中,ID決定着數據幀發送的優先級,也決定着其他設備是否會接收這個數據幀。

仲裁段除了報文ID外,還有RTR, IDE, SRR位。

  • 控制段

在控制段,r1(reserved1)和r0(reserved0)為保留位,默認設置為顯性位。最主要的是DLC(Data Length Code)段,它是用二進制編碼表示本報文中的數據段包含多少個字節。DLC段由4位組成,DLC3−DLC0,表示的數字為0-8.

  • 數據段

數據幀的核心內容,有0-8個字節長度,由DLC確定。

  • CRC段

為了保證報文的正確傳輸,CAN的報文包含了一段15位的CRC校驗碼,一旦接收端計算出的CRC碼跟接收到的CRC碼不同,就會向發送端反饋出錯信息以及重新發送。CRC部分的計算和出錯處理一般由CAN控制器硬件完成,或由軟件控制最大重發數。

在CRC校驗碼之后,有一個CRC界定符,它為隱性位,主要作用是把CRC校驗碼與后面的ACK段隔開。

  • ACK段

包含確認位(ACK slot)和界定符(Delimiter,
DEL)。ACK在發送節點發送時,為隱性位。當接收節點正確接收到報文時,對其用顯性位覆蓋。DEL界定符同樣為隱性位,用於隔開。

  • 幀結束段(End-of-Frame, EOF)

幀結束段由發送端發送7個隱性位表示結束。

同步

CAN總線使用位同步的方式來確保通信時序,以及對總線的電平進行正確采樣。

位時序

在講位時序之前,先介紹幾個基本概念。

Time Quantum 時間份額tQ :CAN控制器工作的最小時間單位,通常對系統時鍾分頻得到。

波特率:單位時間內(1s)傳輸的數據位,公式:1/位時間。舉個栗子,系統時鍾頻率36MHz,預分頻因子為4,則CAN時鍾頻率9MHz,則Tq=1/9M。假設一個CAN位包含10個Tq,則一個位周期T=10Tq,從而波特率為1/T=0.9MHz.

為了實現位同步,CAN協議把每一位的時序分解成下圖所示的四段。這四段的長度加起來即為一個CAN數據位的長度。一個完整的位由8-25個Tq組成。

  • 同步端(SS,Synchronization Segment)

一個位的輸出從同步段開始。若總線的跳變沿被包含在SS段的范圍之內,則表示節點與總線的時序同步。節點與總線同步時,采樣點采集到的總線電平即可被確定為該電平的電位。SS段的大小為1Tq.

  • ·傳播段(PTS,Propagation Time Segment)

用於補償信號在網絡和節點傳播的物理延時時間,是總線上輸入比較器延時和輸出驅動器延時總和的兩倍。通常1-8Tq

  • ·相位緩沖段1(PBS1, Phase Buffer Segment 1)

主要用於補償邊沿階段的誤差,其時間長度在重新同步時可以加長。初始大小1-8Tq.

  • 相位緩沖段2(PBS2,Phase Buffer Segment 2)

也是用於補償邊沿階段的誤差,其時間長度在重新同步時可以縮短。初始大小2-8Tq.

 

同步

CAN同步分為硬同步和重新同步。

同步規則:

  • 一個位時間內只允許一種同步方式
  • 任何一個“隱性”到“顯性”的跳變都可用於同步
  • 硬同步發生在SOF階段,所有接收節點調整各自當前位的同步段,使其位於發送的SOF位內。
  • ·重新同步發生在一個幀的其他階段,即當跳變沿落在同步段之外。

硬同步

當總線上出現幀起始信號(SOF,即隱性到顯性的邊沿)時,其他節點的控制器根據總線上的這個下降沿對自己的位時序進行調整,把該下降沿包含到SS段內。這樣根據起始幀來進行的同步稱為硬同步。

可以看到在總線出現幀起始信號時,該節點原來的位時序與總線時序不同步,因而這個狀態的采樣點采集到的數據是不正確的。所以節點以硬同步的方式調整,把自己的位時序中的SS段平移至總線出現下降沿的部分,獲得同步,這時采樣點采集到的數據是正確數據。

同步前同步后

 

重新同步

因為硬同步時只是在有幀起始信號時起作用,無法確保后續一連串的位時序都是同步的,所以CAN引入了重新同步的方式。在檢測到總線上的時序與節點使用的時序有相位差時(即總線上的跳變沿不在節點時序的SS段范圍),通過延長PBS1段或縮短PBS2段來獲得同步,這樣的方式稱為重新同步。

分兩種情況:第一種, 節點從總線的邊沿跳變中,檢測到它的時序比總線的時序相對滯后2個Tq,這是控制器在下一個時序中的PBS1段增加2Tq的時間長度,使得節點與總線時序重新同步。

第二種,節點從總線的邊沿跳變中,檢測到它的時序相對超前2Tq,這時控制器在前一個位時序中的PBS2段減少2Tq的時間長度,獲得同步。

在重新同步的時候,PBS1和PBS2段的允許加長或縮短的時間長度定義為,重新同步補償寬度(SJW,reSynchronization Jump Width)。這里設置的PBS1和PBS2能夠增減的最大時間長度SJW=2Tq,若SJW設置的太小則重新同步的調整速度慢,若太大,則影響傳輸速率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM