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