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