CAN(控制器局域網(wǎng)絡(luò))是一種基于消息傳遞的通信協(xié)議,廣泛應(yīng)用于汽車、工業(yè)自動化和嵌入式系統(tǒng)等領(lǐng)域。CAN協(xié)議的數(shù)據(jù)幀是用于傳輸信息的基本單位。
1. CAN數(shù)據(jù)幀概述
CAN數(shù)據(jù)幀是一種用于在CAN總線上傳輸數(shù)據(jù)的格式。一個典型的CAN數(shù)據(jù)幀由多個域組成,包括幀起始、仲裁域、控制域、數(shù)據(jù)域、CRC域和幀結(jié)束。每個域都有其特定的作用和格式。
2. 幀起始
幀起始是CAN數(shù)據(jù)幀的第一個域,用于標(biāo)識一個新幀的開始。幀起始由一個單一的邏輯“0”位組成,持續(xù)一個或多個位時間。當(dāng)CAN控制器檢測到總線上的電平從邏輯“1”變?yōu)檫壿嫛?”時,它將開始接收一個新的數(shù)據(jù)幀。
3. 仲裁域
仲裁域是CAN數(shù)據(jù)幀中用于確定發(fā)送優(yōu)先級的部分。在CAN網(wǎng)絡(luò)中,多個設(shè)備可能會同時發(fā)送數(shù)據(jù)。仲裁域確保只有一個設(shè)備能夠成功發(fā)送其數(shù)據(jù)幀。仲裁域由11位標(biāo)識符(對于標(biāo)準(zhǔn)數(shù)據(jù)幀)或29位標(biāo)識符(對于擴展數(shù)據(jù)幀)組成。
3.1 標(biāo)識符
標(biāo)識符是仲裁域的核心部分,用于區(qū)分不同的數(shù)據(jù)幀。標(biāo)識符由多個字段組成,包括優(yōu)先級字段和消息ID字段。
- 優(yōu)先級字段 :標(biāo)識符的高幾位用于表示優(yōu)先級。在CAN協(xié)議中,優(yōu)先級是倒置的,即數(shù)值越小,優(yōu)先級越高。這意味著標(biāo)識符的高幾位越接近“0”,該數(shù)據(jù)幀的優(yōu)先級就越高。
- 消息ID字段 :標(biāo)識符的其余位用于表示消息ID。消息ID用于唯一標(biāo)識CAN網(wǎng)絡(luò)中的消息類型。
3.2 遠程傳輸請求(RTR)
在CAN協(xié)議中,有兩種類型的數(shù)據(jù)幀:遠程幀和數(shù)據(jù)幀。遠程幀用于請求數(shù)據(jù),而數(shù)據(jù)幀用于傳輸數(shù)據(jù)。遠程傳輸請求(RTR)位用于區(qū)分這兩種類型的數(shù)據(jù)幀。如果RTR位為“0”,則表示該數(shù)據(jù)幀是一個數(shù)據(jù)幀;如果RTR位為“1”,則表示該數(shù)據(jù)幀是一個遠程幀。
4. 控制域
控制域包含有關(guān)數(shù)據(jù)幀的元信息,如數(shù)據(jù)長度和幀類型??刂朴蛴?位組成,包括數(shù)據(jù)長度代碼(DLC)和幀格式指示器(FFI)。
4.1 數(shù)據(jù)長度代碼(DLC)
數(shù)據(jù)長度代碼(DLC)是一個4位的字段,用于指示數(shù)據(jù)域中數(shù)據(jù)字節(jié)的數(shù)量。DLC的取值范圍是0到8,表示數(shù)據(jù)域可以包含0到8個字節(jié)的數(shù)據(jù)。
4.2 幀格式指示器(FFI)
幀格式指示器(FFI)是一個2位的字段,用于指示數(shù)據(jù)幀的類型。FFI的取值如下:
- 00 :標(biāo)準(zhǔn)數(shù)據(jù)幀
- 01 :擴展數(shù)據(jù)幀
- 10 :錯誤幀
- 11 :遠程幀
5. 數(shù)據(jù)域
數(shù)據(jù)域是CAN數(shù)據(jù)幀中用于傳輸實際數(shù)據(jù)的部分。數(shù)據(jù)域的長度由DLC字段確定,可以包含0到8個字節(jié)的數(shù)據(jù)。每個字節(jié)由8位組成,數(shù)據(jù)域的總長度可以是0到64位。
6. CRC域
CRC(循環(huán)冗余校驗)域用于檢測數(shù)據(jù)幀在傳輸過程中的錯誤。CRC域由15位組成,包括CRC序列碼和CRC界定符。
6.1 CRC序列碼
CRC序列碼是一個14位的字段,用于存儲計算得出的CRC值。CAN協(xié)議使用多項式除法算法來計算CRC值,以確保數(shù)據(jù)幀的完整性。
6.2 CRC界定符
CRC界定符是一個單獨的位,用于標(biāo)識CRC序列碼的結(jié)束。當(dāng)CAN控制器接收到CRC界定符時,它將開始計算接收到的數(shù)據(jù)幀的CRC值,并與發(fā)送方發(fā)送的CRC值進行比較,以檢測數(shù)據(jù)幀是否在傳輸過程中發(fā)生錯誤。
7. ACK域
ACK(確認)域是一個可選的域,用于確認數(shù)據(jù)幀的接收。在CAN協(xié)議中,接收方在成功接收到一個數(shù)據(jù)幀后,會發(fā)送一個ACK域,以通知發(fā)送方數(shù)據(jù)幀已被正確接收。
8. 幀結(jié)束
幀結(jié)束是CAN數(shù)據(jù)幀的最后一個域,用于標(biāo)識數(shù)據(jù)幀的結(jié)束。幀結(jié)束由七個連續(xù)的邏輯“1”位組成,確保數(shù)據(jù)幀在傳輸過程中的同步。
-
通信協(xié)議
+關(guān)注
關(guān)注
28文章
879瀏覽量
40295 -
CAN
+關(guān)注
關(guān)注
57文章
2744瀏覽量
463612 -
傳輸數(shù)據(jù)
+關(guān)注
關(guān)注
1文章
122瀏覽量
16101 -
數(shù)據(jù)幀
+關(guān)注
關(guān)注
0文章
45瀏覽量
6739
發(fā)布評論請先 登錄
相關(guān)推薦
評論