本文主要介紹CAN總線的幀類型及結構。
CAN總線定義五種幀類型,分別為數據幀、遠程幀、錯誤幀、過載幀和幀間隔。數據幀就是總線上傳輸用戶數據的幀,其最高有效載荷是8字節(CAN FD為64字節),除了有效載荷外,數據幀還包括必要的幀頭幀位部分以執行CAN標準通信,比如消息標識符(Identifier)、數據長度代碼、校驗信息等。遠程幀是用來向總線上其它節點請求數據的幀,它的幀結構與數據幀相似,只不過沒有有效載荷部分;錯誤幀是表示通信出錯的幀;幀間隔是用來隔離數據幀或者遙控幀的。
數據幀和遠程幀有標準格式和擴展格式兩種格式。標準格式有11位的標識符,擴展格式有29位標識符。
幀類型 | 幀用途 | 備注 |
數據幀 | 用于發送單元向接收單元傳送數據的幀 | 分為標準格式和擴展格式,標準格式有11位標識符,擴展格式有29位標識符 |
遙控幀 | 用于接收單元向具有相同ID的發送單元請求數據的幀 | |
錯誤幀 | 用于當檢測出錯誤時向其它單元通知錯誤的幀 | |
過載幀 | 用于接收單元通知其尚未做好接收準備的幀 | |
幀間隔 | 用于將數據幀及遙控幀與前面的幀分離開來的幀 | 過載幀和錯誤幀前不能插入幀間隔 |
數據幀
數據幀的幀結構如下圖所示:
各個字段定義及長度分別為:
SOF:表示數據幀開始;(1bit)
Identifier:標準格式11 bit,擴展格式29 bit包括Base Identifier(11bit)和Extended Identifier(18bit),該區段標識數據幀的優先級,數值越小,優先級越高;
RTR:遠程傳輸請求位,0時表示為數據幀,1表示為遠程幀,也就是說RTR=1時,消息幀的Data Field為空;(1bit)
IDE:標識符擴展位,0時表示為標準格式,1表示為擴展格式;(1bit)
DLC:數據長度代碼,0~8表示數據長度為0~8 Byte;(4bit)
Data Field:數據域;(0~8Byte)
CRC Sequence:校驗域,校驗算法G(x) = x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1;(15bit)
DEL:校驗域和應答域的隱性界定符;(1bit)
ACK:應答,確認數據是否正常接收,所謂正常接收是指不含填充錯誤、格式錯誤、 CRC 錯誤。發送節點將此位為1,接收節點正常接收數據后將此位置為0;(1bit)
SRR:替代遠程請求位,在擴展格式中占位用,必須為1;(1bit)
EOF:連續7個隱性位(1)表示幀結束;(7bit)
ITM:幀間隔,Intermission (ITM),又稱Interframe Space (IFS),連續3個隱性位,但它不屬于數據幀。幀間空間是用于將數據幀和遠程幀與前面的幀分離開來的幀。數據幀和遠程幀可通過插入幀間空間將本幀與前面的任何幀(數據幀、遙控幀、錯誤幀、過載幀)分開。過載幀和錯誤幀前不能插入幀間空間。
遠程幀
一般情況,數據是由發送單元主動向總線上發送的,但也存在接收單元主動向發送單元請求數據的情況。遠程幀的作用就在于此,它是接收單元向發送單元請求發送數據的幀。遠程幀與數據幀的幀結構類似,如下圖所示。
遠程幀與數據幀的幀結構區別如下表所示:
幀起始 | 仲裁段 | 控制段 | 數據段 | CRC段 | ACK段 | 幀結束 | |
意義 | 表示幀開始 | 表示數據優先級 | 表示數據段的字節數 | ||||
數據幀 | 1位顯性位 | 11位或29位(RTR位為顯性) | 6位 | 0~8個字節 | 15位CRC值和1位CRC界定符 | 1位ACK槽和1位ACK界定符 | 7位隱性位 |
遙控幀 | 1位顯性位 | 可請求具有相同ID的數據幀(RTR位為隱性) | 6位 | 無 |
當總線上具有相同標識符的數據幀和遠程幀同時發送時,由于數據幀的 RTR 位是顯性的,數據幀將在仲裁中贏得總線控制權。
錯誤幀
用于在接收和發送消息時檢測出錯誤時,通知錯誤的幀。錯誤幀由錯誤標志和錯誤界定符構成。錯誤幀的幀結構如下圖所示。
錯誤標志:6-12 個顯性/隱性重疊位
主動錯誤標志(6個顯性位):處于主動錯誤狀態的單元檢測出錯誤時輸出的錯誤標志
被動錯誤標志(6個隱性位):處于被動錯誤狀態的單元檢測出錯誤時輸出的錯誤標志
錯誤界定符:8 個隱性位
過載幀
過載幀是用于接收單元通知發送單元它尚未完成接收準備的幀。在兩種情況下,節點會發送過載幀:
接收單元條件的制約,要求發送節點延緩下一個數據幀或遠程幀的傳輸;
幀間空間(Intermission)的3 bit內檢測到顯性位
每個節點最多連續發送兩條過載幀。過載幀由過載標志和過載界定符(8 個隱性位)構成。過載幀的結構如下圖所示。
幀間隔
幀間隔是用來隔離數據幀(或者遙控幀)的,也就是說,數據幀(或者遙控幀)通過插入幀間隔可以將本幀與先行幀(數據幀、遙控幀、錯誤幀、過載幀)分隔開來。但是過載幀和錯誤幀的前面不能插入幀間隔。
幀間隔有兩種不同的形式:
主動錯誤狀態的幀間隔
被動錯誤狀態的幀間隔
間隔段:連續三個隱性位;間隔段期間,所有節點不允許發送數據幀或遙控幀,只要在這期間監聽到顯性位,接收節點就會發送過載幀。
空閑段:連續隱性位,個數不一定,0個或者多個都可以。總線空閑的時間是任意長的,只要總線空閑,節點就可以競爭總線。
暫停段:又叫做延遲傳送段,只有處于被動錯誤狀態的節點在發送幀間隔的時候,才會在幀間隔中插入8個連續隱性位的暫停段。
以上就是針對CAN總線的幀結構的介紹。
-
CAN總線
+關注
關注
145文章
1951瀏覽量
130753 -
數據
+關注
關注
8文章
7026瀏覽量
89026 -
通信
+關注
關注
18文章
6032瀏覽量
135990
原文標題:硬件接口協議之“CAN總線報文”
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論