首頁/ 汽車/ 正文

一文讀懂CAN匯流排

一文讀懂CAN匯流排

CAN匯流排的汽車

CAN概念

CAN

控制器域網

(Controller Area Network, CAN) 的簡稱,是由研發和生產汽車電子產品著稱的

德國BOSCH

公司開發了的,並最終成為國際標準(

ISO11898

),是ISO國際標準化的

序列通訊協議

。是國際上應用最廣泛的

現場匯流排

之一。 在

北美

西歐

CAN匯流排協議

已經成為汽車

計算機控制系統

和嵌入式工業控制區域網的標準匯流排,並且擁有以CAN為底層協議專為

大型貨車

和重工機械車輛設計的

J1939協議

。近年來,其所具有的高可靠性和良好的錯誤檢測能力受到重視,被廣泛應用於汽車計算機控制系統和環境溫度惡劣、電磁輻射強和振動大的工業環境。

CAN的兩個ISO國際標準:

1)

ISO11898

:定義了通訊速率為 125 kbps~1 Mbps 的

高速 CAN

通訊標準,屬於閉環匯流排,傳輸速率可達1Mbps,匯流排長度 ≤ 40米。

2)

ISO11519

:定義了通訊速率為 10~125 kbps 的

低速 CAN

通訊標準,屬於開環匯流排,傳輸速率為40kbps時,匯流排長度可達1000米。

CAN種類

1)高速CAN:

a。根據線纜的長度提供從5Kbit/s到1Mbit/s的波特率。

b。高速CAN網路在每個網路端點端接一個120歐姆的電阻。

c。電平靜默為2。5V,上下限是3。5V和1。5V。

2) 容錯CAN:

a。提供5Kbit/s到125Kbits/s的波特率。

b。顯性時則為1V和4V。

3)單線CAN:

a。提供5Kbit/s到125Kbits/s的波特率。

b。單線CAN的波特率一般為33。3KHz。

汽車CAN網路

一文讀懂CAN匯流排

汽車CAN網路

一文讀懂CAN匯流排

汽車CAN匯流排

CAN組成

CAN匯流排的一個

主要由

幀資訊

幀ID

幀資料

組成。

1)幀資訊

:分四類,

標準資料幀

(汽油車、電機)、

標準遠端幀

(少見)、

擴充套件資料幀(

廣大柴油車、部分汽油車)、

擴充套件遠端幀

(少見)。

2)幀ID:

是CAN的一種“地址”。CAN有個特點是

競爭機制

幀ID越小越有佔用匯流排資源的權利,越會優先發送。

一文讀懂CAN匯流排

CAN ID

DBC檔案:

車輛行業中,如果對車輛CAN總線上的每個幀ID及每個幀資料都做出了標準的解釋,形成了的檔案就是DBC檔案。

3)幀資料:

和串列埠相比,

CAN的幀資料只有8個位元組,即64個位

,不會再多了。但CAN FD作為新型匯流排解決了僅有8位元組這個問題。

4)終端電阻:

CAN和RS485一樣,要在終端減少差分訊號的反射,如不在兩個終端加電阻,訊號會反彈回來影響通訊。終端電阻在CAN總線上要有兩個,阻值為120歐姆,並聯,最遠的終端一邊一個。如果有多個節點的話,終端電阻應適當加大。

5)波特率

:常見的車輛波特率有500K,250K,125K,100K。

CAN匯流排標準

一文讀懂CAN匯流排

ISO標準

CAN標準分為

底層標準

(物理層和資料鏈路層)和

上層標準

(應用層)兩大類

ISO 11898-1 – CAN協議

ISO 11898-2 – CAN高速物理層

ISO 11898-3 – CAN低速可容錯物理層

ISO 11898-4 – 時間觸發CAN

ISO 11898-5 – “低功率模式高速介質存取單元” – 目前處於起草階段

ISO 11519-2 – 已過時,被11898-3取代。

ISO 14230 – “關鍵字協議2000” – 定義非CAN序列線路診斷的若干部分。

ISO 15765 – CAN總線上定義診斷的標準 – 本質上是CAN總線上的關鍵字協議2000。

J1939 – 卡車和客車領域應用最廣泛的基於CAN的高層協議,由SAE定義。J1939分成幾個部分,描述物理層、資料鏈路層、網路管理和大量預定義的報文。

ISO 11783 – 與J1939相似,但用於農業領域(諸如拖拉機)

ISO 11992 – 定義卡車和拖車之間的介面

NMEA 2000 – 基於J1939的協議,用於海事領域。由NMEA委員會定義。

如果沒有詳細說明談論中所使用哪種標準,通常其

預設是指ISO 11898-1定義的資料鏈路層協議和ISO 11898-2定義的物理層。

底層標準:

CAN底層標準都基本一樣,涵蓋OSI模型中的物理層和資料鏈路層,與ISO/OSI模型的對應關係如下圖所示:

一文讀懂CAN匯流排

對應關係

ISO 11898-1:資料鏈路層協議,描述CAN匯流排的基本架構,定義不同CAN匯流排裝置在資料鏈路層通訊方式

ISO 11898-2:高速CAN匯流排物理層協議,最高資料傳輸速率 1Mbps,應用為兩線平衡式訊號(CAN_H, CAN_L)

ISO 11898-3:定義低速CAN匯流排(LS-CAN, Fault-Tolerant CAN)物理層標準,資料傳輸速率在 5Kbps ~ 125Kbps 。Fault-Tolerant是指總線上一根傳輸訊號失效時,依靠另外的單根訊號也可以通訊

ISO 11898-4:定義CAN匯流排中的時間觸發機制(Time-Triggered CAN, TTCAN),定義與ISO 11898-1 配合的幀同步實體,實現汽車ECU之間基於時間觸發的通訊方式。

上層標準:

不同應用領域或製造商有不同的做法,沒有統一的國際標準

一文讀懂CAN匯流排

上層協議對比

CAN的幀種類(四種幀型別)

1)資料幀

用於傳送單元向接收單元傳送資料的幀。

資料幀的幀結構圖:

一文讀懂CAN匯流排

資料幀

SOF:表示資料幀開始;(1 bit),發出一個顯性位邊沿,網路節點以此開始同步

ID:標準格式11 bit,擴充套件格式29 bit包括Base ID(11 bit)和Extended IDr(18 bit),該區段標識資料幀的優先順序,數值越小,優先順序越高;

RTR:遠端傳輸請求位,0時表示為資料幀,1表示為遠端幀,也就是說RTR=1時,訊息幀的Data Field為空;(1 bit)

IDE:(1 bit)識別符號擴充套件位,0時表示為標準格式,1表示為擴充套件格式;擴充套件幀和標準幀格式不同,不能存在於同一can網路

DLC:資料長度程式碼,0-8表示資料長度為0~8 Byte;(4 bit)

Data Field:資料域;(0~8 Byte)

CRC (15 bit):

校驗域,從sof到資料場的所有資料進行encode

由傳送方填

校驗演算法G(x) = x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1;(15 bit)

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

ACK:(1 bit)

應答域,確認資料是否正常接收,所謂正常接收是指不含填充錯誤、格式錯誤、 CRC 錯誤。

傳送節點將此位為1,由接收方進行確認,收到訊息給出一個顯性位0

如果一個節點都沒有確認收到訊息,傳送方監聽此位為隱形位就會報錯

SRR:替代遠端請求位,在擴充套件格式中佔位用,必須為1;(1 bit)

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

ITM(3 bit):

幀間空間,Intermission (ITM),又稱Interframe Space (IFS),連續3個隱性位,但它不屬於資料幀。

幀間空間是用於將資料幀和遠端幀與前面的幀分離開來的幀。資料幀和遠端幀可透過插入幀間空間將本幀與前面的任何幀(資料幀、遙控幀、錯誤幀、過載幀)分開。過載幀和錯誤幀前不能插入幀間空間。

2)遠端幀

用於接收單元向具有相同識別符號的傳送單元請求資料的幀。

遠端幀與資料幀的幀結構類似,區別:

1、資料幀的 RTR 值為“0”,遠端幀的 RTR 值為“1”。

2、遠端幀沒有資料塊。

3、遠端幀的 DLC 塊表示請求傳送單元傳送的資料長度。

格式圖

一文讀懂CAN匯流排

遠端幀

當總線上具有相同識別符號的資料幀和遠端幀同時傳送時,由於資料幀的 RTR 位是顯性的,資料幀將在仲裁中贏得匯流排控制權。

3)錯誤幀

用於當檢測出錯誤時向其它單元通知錯誤的幀。

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

錯誤標誌:6bit,

一文讀懂CAN匯流排

錯誤標誌

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

4)過載幀

接收單元通知傳送單元它尚未完成接收準備。

傳送過載幀的兩種情況:

1、接收單元條件的制約,要求傳送節點延緩下一個資料幀或遠端幀的傳輸。

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

每個節點最多連續傳送兩條過載幀,過載幀由過載標誌和過載界定符(8 個隱性位)構成。

一文讀懂CAN匯流排

過載幀

資料幀和遠端幀比較:

一文讀懂CAN匯流排

比較

CAN匯流排仲裁

仲裁優先順序:

識別符號值越小,訊息的優先順序越高

線與邏輯

:只有節點發送的

全是隱性

,匯流排電平才表現

為隱性

所有傳送節點在傳送資料的同時,也檢測總線上的電平狀態,逐位對比總線上電平與自身傳送的電平。

1)發 0 出現 1 :報錯。

2)發 0 出現 0 :繼續。

3)發 1 出現 1: 繼續。

4)發 1 出現 0: 競爭失敗,轉為接收方。

一文讀懂CAN匯流排

傳送自檢

如下圖,競爭失敗的C節點會自動在檢測到匯流排空閒的第一時間再次嘗試傳送。

一文讀懂CAN匯流排

CAN 節點A和C同時傳送資料幀,CAN匯流排根據優先順序仲裁,C失去權力

CAN條件接收

在CAN總線上

訊息是廣播式

的,節點可以透過設定控制器中過濾碼(Filter Code )和掩碼(Mask Code),再檢驗總線上訊息的識別符號,來判斷是否接收該訊息,對於掩碼,“1”表示該位與本節點相關,“0”表示該位與本節點不相關。

一文讀懂CAN匯流排

CAN-BUS資料流程

一文讀懂CAN匯流排

STM32的can過濾碼

位填充

CAN匯流排採用NRZ編碼,沒有單獨時鐘線,優點是效率高,但卻不易區分哪裡是bit開始,哪裡是bit結束。因此為確保在同步通訊過程中有足夠的電平跳變,規範中應用到

位填充機制

,即在每連續 5個相同電平後插入1個

反相電平

,接收節點在收到訊息後自動將填充位刪除。

一文讀懂CAN匯流排

資料幀位填充比較圖

在幀內除了CRC界定符、ACK域和EOF外,其餘部分均應用到位填充機制,在應用到位填充的域,檢測到連續6個顯性位或隱性位均視為報錯。

CAN錯誤檢驗

CRC錯誤

1)在傳送訊息時,傳送節點會根據特定的多項式計算出由資料幀SOF位到資料域最末位的Checksum值,並將該值放在資料幀的CRC域,隨著資料幀廣播到總線上。

2)接收節點在收到資料後,應用同樣的多項式計算Checksum值,並與收到的Checksum值對比。如果兩者一致,正常接收;如果不一致,則捨棄該訊息,併發送錯誤幀請求傳送節點重傳訊息。

應答錯誤(ACK Error)

接收方會在收到訊息後在ack應答位給出一個顯性電平,如果傳送方檢測到該位為隱性,則報錯。

格式錯誤(Form Error)

檢測出與固定格式的位段相反的格式時所檢測到的錯誤,如檢測crc界定符和ack界定符以及eof區域是否出現顯性位。

位錯誤(Bit Error)

比較輸出電平和匯流排電平(不含填充位),當兩電平不一樣時所檢測到的錯誤。如傳送顯性位,但匯流排是隱性位就報錯。

填充錯誤(Stuff Error)

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

CAN匯流排錯誤檢測機制

CAN總線上的

每個節點控制器都會檢測訊息是否出錯

,如果節點發現訊息出錯,它將傳送錯誤標誌,從而打斷總線上正常的資料傳輸。總線上其它沒有發現原始訊息錯誤的節點,在收到錯誤標誌後將採取必要的措施,比如捨棄當前總線上的訊息。

CAN節點內部有兩種錯誤狀態計數器 :

1)TEC /Transmit Error Counter,傳送錯誤狀態計數器,出現一次錯誤該計數器值 +8

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

3)訊息成功傳送或接收一次,對應的 TEC 或 REC 值相應 -1

一文讀懂CAN匯流排

錯誤計數

CAN規範定義了節點的 3 種錯誤狀態:

1) 主動錯誤:正常狀態,在此狀態下,節點可以傳送所有型別的幀,包括錯誤幀;發現錯誤後會很積極主動地上報錯誤。

2)被動錯誤:節點可以傳送除錯誤幀以外的所有幀;TEC or REC 計數超過127就進入此狀態;此時,該節點發現錯誤後只會傳送6個隱性位,不會把錯誤廣播出去。並且,傳送連續幀時,中間必須間隔8bit的延緩時間。

3)匯流排關閉:節點被控制器從總線上隔離;或者TEC大於255,就會進入這個狀態,需要重啟,或者等待128個11位隱性位電平。

一文讀懂CAN匯流排

CAN匯流排錯誤檢測機制

相關文章

頂部