細說汽車電子通信總線之CAN 2.0 總線協議詳解

引言

1. CAN總線發展歷史與ISO規範

2. CAN總線主要功能特性

3. CAN 2.0總線協議的物理層電氣特性

4. CAN 2.0總線協議消息報文詳解

4.1 CAN2.0總線的通信報文幀格式(Message Frame Format)

4.2 CAN2.0總線的通信報文幀類型(Message Frame Type)

4.3 CAN2.0總線的通信報文之標準/擴展數據幀

4.4 CAN2.0總線的通信報文之標準/擴展遠程幀

4.5 CAN2.0總線的通信報文之錯誤幀

4.6 CAN2.0總線的通信報文之過載幀

4.7 CAN2.0總線的通信報文之幀間空間

5. CAN 2.0總線協議的總線仲裁(Bus Arbitration)

6. CAN 2.0總線協議的位流編碼(Bit Coding)與位填充(Bit Stuffing)

7. CAN 2.0總線協議的錯誤檢測機制

7.1 CAN 2.0 總線節點的錯誤類型

7.2 CAN 2.0 總線節點的故障界定

7.3 CAN 2.0 總線節點的狀態

8. CAN 2.0總線協議的位定時與同步

8.1 CAN 2.0 總線協議的位時間定義與採用

8.2 CAN 2.0 總線協議的同步機制

總結

引言

CAN 是Controller Area Network 的縮寫(以下稱爲CAN),是ISO國際標準化的串行通信協議。在汽車產業中,出於對安全性、舒適性、方便性、低公害、低成本的要求,各種各樣的電子控制系統被開發了出來。由於這些系統之間通信所用的數據類型及對可靠性的要求不盡相同,由多條總線構成的情況很多,線束的數量也隨之增加。爲適應"減少線束的數量"、"通過多個LAN,進行大量數據的高速通信"的需要,1986 年德國汽車電子巨頭--博世(BOSCH)公司開發出面向汽車的CAN 通信協議。此後,CAN 通過ISO11898 及ISO11519進行了標準化,在歐洲乃至全球已成爲汽車網絡的標準協議,也是目前汽車電子應用中使用最廣泛的通信協議。

CAN 經過30多年的發展,其高性能和可靠性早已被市場所驗證和認可,除汽車電子外,還被廣泛地應用於工業自動化、船舶、醫療設備、工業設備等方面。

但是,很多汽車電子ECU的開發工程師卻並不真正清楚CAN總線協議本身,這讓很多工程師,在實際ECU項目的CAN總線硬件設計和軟件開發過程中遇到CAN總線相關的問題時無從下手,事倍功半。

本文就爲大家詳細梳理一下CAN總線中,目前使用最爲廣泛的CAN 2.0 A/B協議,該版本也被稱作傳統CAN(Classic CAN)協議,希望能夠讓大家對CAN總線協議有一個比較全面深入的瞭解,從而厚積薄發、讓CAN總線開發變得更easy,事倍功半!

1. CAN總線發展歷史與ISO規範

控制器局域網CAN(Controller Area Network),最初是由德國Bosch公司設計的,應用於汽車的監測和控制。

作爲一種技術先進、可靠性高、功能完善、成本合理的遠程網絡通訊控制方式,CAN總線被廣泛應用到各種電磁輻射強和振動大的工業環境和控制領域。

1991年9月,Philips半導體公司制定併發布CAN技術規範:CAN 2.0 A/B。CAN 協議經 ISO 標準化後有 ISO11898 標準和 ISO11519-2 標準兩種。ISO11898 和 ISO11519-2標準對於數據鏈路層的定義相同,但物理層不同。

CAN總線是唯一成爲國際標準的現場總線,也是國際上應用最廣泛的現場總線之一。

CAN總線 規範( Version 2.0 )

  • CAN2.0A :CAN標準報文格式

  • CAN2.0B:CAN標準報文格式和擴展報文格式

CAN總線 技術規範的目的

  • 定義數據鏈路層

  • 定義CAN協議在周圍各層中所發揮的作用

2. CAN總線主要功能特性

CAN總線控制器中集成了CAN協議的物理層和數據鏈路層功能,可完成對通信數據的成幀處理,包括位填充、數據塊編碼、循環冗餘檢驗、優先級判別等項工作。

CAN總線網絡中通信節點個數在理論上不受限制

CAN協議的一個最大特點是廢除了傳統的站地址編碼,而代之以對通信數據塊進行編碼。採用這種方法的優點可使網絡內的節點個數在理論上不受限制,數據塊的標識符可由11位或29位二進制數組成,因此可以定義2或2個以上不同的數據塊,這種按數據塊編碼的方式,還可使不同的節點同時接收到相同的數據,這一點在分佈式控制系統中非常有用。數據段長度最多爲8個字節,可滿足通常工業領域中控制命令、工作狀態及測試數據的一般要求。同時,8個字節不會佔用總線時間過長,從而保證了通信的實時性。CAN協議採用CRC檢驗並可提供相應的錯誤處理功能,保證了數據通信的可靠性。CAN卓越的特性、極高的可靠性和獨特的設計,特別適合工業過程監控設備的互連,因此,越來越受到工業界的重視,並已公認爲最有前途的現場總線之一。

各節點之間可實現自由通信

CAN總線採用了多主競爭式總線結構,具有多主站運行和分散仲裁的串行總線以及廣播通信的特點。CAN總線上任意節點可在任意時刻主動地向網絡上其它節點發送信息而不分主次,因此可在各節點之間實現自由通信。CAN總線協議已被國際標準化組織認證,技術比較成熟,控制的芯片已經商品化,性價比高,特別適用於分佈式測控系統之間的數據通訊。CAN總線插卡可以任意插在PC AT XT兼容機上,方便地構成分佈式監控系統。

CAN 2.0 總線具有如下顯著功能特性

  • 多主(master)架構依據優先權進行總線訪問

  • 無破壞性的基於優先權的逐位仲裁

  • 藉助驗收濾波器的多地址幀傳遞

  • 遠程數據請求

  • 全系統數據相容性

  • 錯誤檢測和出錯信令

  • 很遠的數據傳輸距離(長達10Km@5Kbps)

  • 高速的數據傳輸速率(高達1Mbps)

  • 高度實時性:每幀報文允許傳輸最高8個字節的數據

  • 發送期間丟失仲裁或出錯而遭到破壞的幀可自動重發

  • 暫時錯誤和永久性故障節點的判別以及故障節點的自動脫離

  • 脫離總線的節點不影響總線的正常工作

3. CAN 2.0總線協議的物理層電氣特性

MCU硬件只能提供3.3V/5V的TTL/CMOS電平信號,而CAN總線上傳輸的是差分信號。因此CAN2.0總線規範的物理層規定了CAN總線通信的物理層(Physical Layer, CAN收發器)實現要求:

  • 使用雙絞線通信,一根爲CAN_H,另一根爲CAN_L.

  • 總線上的電平有顯性電平和隱性電平兩種。

  • 總線上執行邏輯上的線“與”時,顯性電平的邏輯值爲“0”,隱性電平爲“1”。

“顯性”具有“優先”的意味,只要有一個單元輸出顯性電平,總線上即爲顯性電平。並且,“隱性”具有“包容”的意味,只有所有的單元都輸出隱性電平,總線上才爲隱性電平。(顯性電平比隱性電平更強)

在一個CAN網絡的最遠兩個節點需要端接120Ω的匹配電阻,才能保證信號傳輸,進行正常通信;

ISO11898和ISO-11519-2兩個不同的CAN總線標準在物理層上規範的通信電平對比如下:

常用的SO11898規範規定:

  • 邏輯“1” 時,總線呈現“隱性”狀態。VCAN-H和VCAN-L固定在平均電壓2.5V,即Vdiff近似爲0。

  • 邏輯“0” 時,總線呈現“顯性”狀態。VCAN-H爲3.5V,VCAN-L爲1.5V,即Vdiff爲2V

Tips:ISO11898和ISO-11519-2兩個不同的CAN總線標準的差別還包括:

  • ISO11898 是通信速度爲 5kbps-1Mbps  的 CAN 高速通信標準。

  • ISO11519 是通信速度爲 125kbps以下的 CAN 低速通信標準,也就是容錯CAN(LSFT CAN)。提供從5 Kbit/s到125 Kbits/s的波特率。該標準允許在CAN總線連線失敗時CAN總線通信得以繼續進行。在低速/容錯CAN網絡,每種設備都有它自己的終端。

  • 電平不同,匹配電阻不同。由於終端的類型不同,因此高速和低速/容錯CAN設備不能在同一個網絡中使用。

Tips:不僅是 ISO,SAE(Society of Automotive Engineers)等其它的組織、團體、企業也對 CAN 協議進行了標準化。其他標準介紹下:

Tips:通常使用CAN收發器都是符合ISO11898規範的,比如NXP的TJA1040/2/3/4/5/6以及TJA1050/1/2等;而符合ISO1111519-2規範的CAN收發器使用介紹,只有NXP的TJA1055T;

Tips:兩個CAN節點即使時同一個MCU中的兩個CAN控制器)間(通信必須使用CAN收發器,並連接匹配的端接電阻,否則無法完成CAN報文傳輸;

4. CAN 2.0總線協議消息報文詳解

4.1 CAN2.0總線的通信報文幀格式(Message Frame Format)

CAN2.0總線有兩種不同的CAN幀格式

  • 具有11位標識符的CAN幀稱爲:標準幀(Stand Frame)

  • 具有29位標識符的CAN幀稱爲:擴展幀(Extend Frame)

CAN規範2.0B中引入了第二種報文格式--擴展幀,同時兼容CAN規範2.0A的標準幀:

  • CAN控制器必須完全支持標準幀(收/發),半雙工通信

  • CAN控制器必須支持接收擴展幀

4.2 CAN2.0總線的通信報文幀類型(Message Frame Type)

CAN2.0總線規定了4種不同的通信報文幀類型,用於不同的通信目的:

幀類型

用途

數據幀

從發送節點向其它節點發送數據

遠程幀

向其它節點請求發送具有同一識別符的數據幀

錯誤幀

當檢測出錯誤時向其它節點指明其已檢測到總線錯誤

過載幀

接收單元通知其尚未做好接收準備

4.3 CAN2.0總線的通信報文之標準/擴展數據幀

CAN2.0總線的通信報文的數據幀是使用最大的幀類型,一幀完整的CAN 2.0總線數據幀報文包含如下7個場(Field,也有譯作域):

  • 幀起始(Start Of Frame)

  • 仲裁場(Arbitration Field)

  • 控制場(Control Field )

  • 數據場(Data Field )

  • CRC場(CRC Filed)

  • 應答場(ACK Field)

  • 幀結尾(End Of Frame)

CAN 2.0總線標準數據幀(Standard Data Frame)結構如下:

  • 幀起始 :標誌數據幀和遠程幀的起始,它僅由一個“顯性”位構成。

  • 仲裁場:由標識符(ID)和遠程發送請求(RTR)位組成。

    標識符(Identifier)的長度爲11位。這些位以ID-10至ID-0的順序發送,最低位爲ID-0,其中最高7位(ID-10 ~ID-4)必須不是全“隱性”。

RTR位(Remote Transmission Request Bit)在數據幀中,必須是“顯性”的,而在遠程幀中,RTR位必須是“隱性”的。

  • 控制場:由6位組成,包括兩個用於將來擴展的保留位和4位數據長度碼

  • 數據場:由數據幀中被髮送的數據組成,它可包括0至8個字節,每個字節包括8位,其中首先發送最高有效位(MSB)。

  • CRC場:包括CRC序列、CRC界定符。

參加CRC校驗的位場包括幀起始、仲裁場、控制場、數據場(假若存在)在內的無填充位流。CRC序列後隨CRC界定符,它只包括一個“隱性”位。

  • 應答場:爲兩位長度,包括應答間隙和應答界定符。

在應答場中發送站送出兩個“隱性”位。一個正確地接收到有效報文的接收器,在應答間隙期間,通過傳送一個“顯性”位將此信息報告給發送器(接收器發送“應答”)。所有接收到匹配CRC序列的站,在應答間隙期間通過把“顯性”位寫入發送器的“隱性”位來報告此信息。應答界定符是應答場的第二位,並且必須是“隱性”位。因此,應答間隙被兩個“隱性”位(CRC界定符和應答界定符)包圍。

  • 幀結束:每個數據幀和遠程幀均是由7個“隱性”位組成的標誌序列界定的。

CAN 2.0總線擴展數據幀(Extend Data Frame)結構如下:

相比標準數據幀,擴展數據幀的ID爲29-bit,控制場的IDE-bit爲1:

Tips:兩種幀格式的區別通過“控制場”(Control Field)中的“識別符擴展”位(IDEbit)來實現;

Tips:兩種幀格式可出現在同一總線上。

4.4 CAN2.0總線的通信報文之標準/擴展遠程幀

CAN2.0總線的通信報文的遠程幀是用於請求遠程CAN節點發送本節點所需的數據,一幀完整的CAN 2.0總線遠程幀報文包含如下6個場(Field,也有譯作域):

  • 幀起始(Start Of Frame)

  • 仲裁場(Arbitration Field)

  • 控制場(Control Field )

  • CRC場(CRC Filed)

  • 應答場(ACK Field)

  • 幀結尾(End Of Frame)

與數據幀一樣,遠程幀也有二種--標準遠程幀、擴展遠程幀;

除了沒有數據場(Data field),以及RTR位是隱性(“1”)以外,遠程幀與數據幀完全一樣。

數據幀和遠程幀的不同

  • 遠程幀的RTR位爲隱性位,沒有數據段。

  • 沒有數據段的數據幀和遠程幀可通過RTR位區別開來。

遠程幀沒有數據段,數據長度碼該如何表示?

  • 遠程幀的數據長度碼以所請求數據幀的數據長度碼錶示;

4.5 CAN2.0總線的通信報文之錯誤幀

CAN2.0總線協議中規定:當節點檢測到一個或多個由CAN標準所定義的錯誤時,就產生一個錯誤幀。

錯誤幀由錯誤標誌和錯誤界定符構成。

錯誤標誌包括主動錯誤標誌和被動錯誤標誌兩種:

  • 主動錯誤標誌:6 個位的顯性位。

  • 被動錯誤標誌:6 個位的隱性位。

錯誤界定符

錯誤界定符由 8 個位的隱性位構成。

4.6 CAN2.0總線的通信報文之過載幀

CAN2.0總線協議中規定:過載幀用於在先行和後續的數據幀(或遠程幀)之間提供一附加的延時。

過載幀由過載標誌和過載界定符構成。

  • 過載標誌

6 個位的顯性位。過載標誌的構成與主動錯誤標誌的構成相同。

  • 過載界定符

8 個位的隱性位。過載界定符的構成與錯誤界定符的構成相同。

4.7 CAN2.0總線的通信報文之幀間空間

幀間空間是用於分隔數據幀和遠程幀。數據幀和遠程幀可通過插入幀間隔將本幀與前面的任何幀(數據幀、遠程幀、錯誤幀、過載幀)分開。

過載幀和錯誤幀前不能插入幀間隔。

幀間空間的組成:

間歇場 : 3 個位的隱性位。

總線空閒場 : 隱性電平,無長度限制(0 亦可)。

本狀態下,可視爲總線空閒,要發送的節點可開始訪問總線。

暫停發送場發送暫時停止) :8 個位的隱性位。

只在處於被動錯誤狀態的節點剛發送一個消息後的幀間隔中包含。

5. CAN 2.0總線協議的總線仲裁(Bus Arbitration)

總線空閒時,任何節點可以開始發送報文;總線上每條報文都具有唯一的一個11位或29位標識符;報文標識符的值越小,報文具有越高的優先權;

多個節點同時發送時,總線在“仲裁場”進行“逐位仲裁” ;傳送高優先級報文的節點贏得仲裁,並繼續傳輸報文;失去仲裁的節點在總線空閒時重新傳送。

在總線空閒態,最先開始發送消息的單元獲得發送權。多個單元同時開始發送時,各發送單元從仲裁段的第一位開始進行仲裁。連續輸出顯性電平最多的單元可繼續發送。

具有相同 ID 的數據幀和遠程幀在總線上競爭時,仲裁段的最後一位(RTR)爲顯性位的數據幀具有優先權,可繼續發送。

標準格式 ID 與具有相同 ID 的遠程幀或者擴展格式的數據幀在總線上競爭時,標準格式的 RTR 位爲顯性位的具有優先權,可繼續發送。

6. CAN 2.0總線協議的位流編碼(Bit Coding)與位填充(Bit Stuffing)

CAN 2.0總線協議規定位流編碼採用“不歸零”(NRZ)方法編碼。在完整的位時間裏,位電平要麼爲“顯性”,要麼爲“隱性”;

各個位的開頭或者結尾都沒有附加同步信號。發送單元以與位時序同步的方式開始發送數據。接收單元則根據總線上電平的變化進行同步並進行接收工作。

另外,發送單元和接收單元存在的時鐘頻率誤差及傳輸路徑上的(電纜、驅動器等)相位延遲會引起同步偏差。因此接收單元通過硬件同步或者再同步的方法調整時序進行接收。

爲了保證通信過程中時鐘有足夠的跳邊沿以實現總線各節點重新同步;要求CAN控制器採取“位填充”(Bit Stuffing):

當發送器檢測到位流裏有5個連續相同值的位,便會自動在位流裏插入一補充位,接收器會自動刪除這個補充位。

最多經過5個位時間,各節點可以重同步;

能夠通過總線上的錯誤標誌(Error Flag  6個連續相同的位)反映發送錯誤。

在固定的位場中不使用位填充,只對在發送數據幀和遠程幀時,SOF~CRC 場間的數據進行位填充。

下圖爲一個具體的位填充實現結果,在發送系列的BIT8和BIT16分別自動加入了一個隱性位(邏輯"1"):

7. CAN 2.0總線協議的錯誤檢測機制

爲了保證通信的正常,CAN 2.0 總線協議總線中各節點需要採取以下措施進行錯誤檢測:

  • 監視(對發送位的電平與被監控的總線電平進行比較)

  • 循環冗餘檢查

  • 位填充

  • 報文格式檢查

CAN 2.0 總線協議的錯誤檢測機制具有以下屬性:

  • 檢測到所有的全局錯誤

  • 檢測到發送器所有的局部錯誤

  • 可以檢測到報文裏多達5個任意分佈的錯誤

  • 檢測到報文里長度低於15-bit的突發性錯誤

  • 檢測到報文裏任一奇數個錯誤

  • 對於沒有被檢測到的錯誤報文,其剩餘的錯誤可能性概率低於:報文錯誤率4.7 x 10-11

7.1 CAN 2.0 總線節點的錯誤類型

CAN 2.0 總線協議定義參與通信的CAN節點錯誤類型如下:

  • 位錯誤(Bit  Error)

發送的位值和總線監視的位值不相符合時,檢測到一個位錯誤(除仲裁場、應答場外);

  • 填充錯誤(Stuff Error)

    如果在使用位填充編碼的位流中,出現了第六個連續相同的位電平,將檢測到一個位填充錯誤;

  • 形式錯誤 (Form Error)

   當一個固定形式的位場含有一個或多個非法位時,將檢測到一個形式錯誤;

  • 應答錯誤 (Acknowledgment Error)

    在應答間隙(ACK SLOT)所監視的位不爲“顯性”,則會檢測到一個應答錯誤;

  • CRC 錯誤(CRC Error)

    如果接收器的CRC結果和發送器的CRC結果不同,將檢測到一個CRC錯誤。

7.2 CAN 2.0 總線節點的故障界定

CAN 2.0 總線節點使用兩種錯誤計數器進行故障界定:

  • 發送錯誤計數(TEC)

  • 接收錯誤計數(REC)

CAN 2.0 總線協議規定了12條錯誤計數規則:

  • 節點發送時產生錯誤,將導致TEC加8;

  • 節點成功發送1幀報文後,TEC將減1 ,直到0;

  • 節點接收時檢測到錯誤,將導致REC加8;

  • 節點成功接收1幀報文後,REC將減1,直到0;

7.3 CAN 2.0 總線節點的狀態

根據以上錯誤檢測機制和故障界定方法,CAN 2.0總線節點存在以下三種狀態:

  • 錯誤主動(Error Active):“錯誤主動”的節點可以正常地參與總線通訊,並在錯誤被檢測到時發出主動錯誤標誌。

  • 錯誤被動(Error Passive):“錯誤被動”的節點不允許發送主動錯誤標誌。“錯誤被動”的單元參與總線通訊,在錯誤被檢測到時只發出被動錯誤標誌。

  • 總線關閉(Bus Off):“總線關閉”的單元不允許在總線上有任何的影響 (比如,關閉輸出驅動器)。

Tips:一個特例:如果CAN總線上只有一個節點,該節點發送數據幀後得不到響應(ACK),其發送計數器TEC最大隻能計到128,即該節點只能進入錯誤被動狀態,而不會進入總線關閉狀態;

CAN通信節點的狀態分爲暫時錯誤(Error active和Error Passive)和永久性故障(Bus Off);

永久性故障節點自動脫離總線,防止網絡鎖定。

處於暫時錯誤(Error active和Error Passive)狀態的CAN 2.0總線節點,其狀態可以根據其發送錯誤計數器(TEC)和接收錯誤計數器(REC)值的變化,自動切換,而進入永久性故障(Bus Off))狀態的節點,必須進入重新初始化才能恢復:

Tips:Bus Off恢復需要滿足於以下兩個條件:

①在bus off發生後,總線上已經檢測到了128次11個連續的隱性位(邏輯"1");

②用戶程序請求恢復,通常MCU中的CAN控制器都可以支持自動恢復和手動恢復兩種方式。CAN總線的bus off恢復需要滿足整車的網絡管理規範。

8. CAN 2.0總線協議的位定時與同步

8.1 CAN 2.0 總線協議的位時間定義與採用

CAN 2.0 總線協議定義一個標稱的位時間分爲:同步段、傳播段、相位緩衝段1、相位緩衝段2。

同步段用於同步各節點,正常情況下跳變沿落在此段內;

傳播段用於補償網絡內的傳輸延時;

採樣點時刻讀取的電平代表這個位的電平;

CAN總線的時間份額通常由振盪器週期分頻而得

    各時間段長度爲:同步段1份額,傳播段1~8份額,相位緩衝段1,1~8份額,相位緩衝段2,Max(相位緩衝段1,信息處理時間),其中信息處理時間<=2份額。一個位的總時間份額數爲8~25,可以編程靈活配置。

8.2 CAN 2.0 總線協議的同步機制

CAN 2.0 總線協議定義位同步的規則如下:

    (1)在總線空閒時,只要檢測到一個隱性到顯性的邊沿,就執行一次硬同步(以該邊沿作爲同步段)

    (2)在總線不空閒時,若邊沿落在同步段以外,則按其與同步段之差執行再同步:

  • 再同步情況①:邊沿落在同步段以後,則把所差份額加到相位緩衝段1

  • 再同步情況② :邊沿落在同步段以前,則從相位緩衝段2減去所差份額

    再同步所加減的份額有個上限,該上限可取值1~4個時間份額,但不可大於相位緩衝段1。

      (3)因爲有位填充規則,所以可用於再同步的邊沿在一定時間內總會出現。最大可能時間間隔是29個位。

Tips:一個位時間內只能執行一次同步,且一般只把隱性到顯性的邊沿用於同步。

總結

本文詳細介紹了BOSCH的CAN 2.0總線協議,主要包括CAN總線主要特性、物理層電氣特性、幀格式與幀類型、總線仲裁機制、位流編碼、位填充、錯誤檢測機制、錯誤類型、故障界定與節點狀態以及位定時與同步等。

除了CAN 2.0外,BOSCH還定義了一種與之兼容的CAN-FD總線協議--能夠提供更高的速率(數據場通信速率可達8/10Mbit/s)和更大的報文幀有效載荷(支持最大64字節),以滿足汽車電子日益發展對ECU間高速通信的需求,我將在下篇文章中給大家介紹,敬請關注!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章