CAN总线技术 | 数据链路层02 - 帧结构
文章目錄
- 一、前言
- 二、幀開始
- 三、仲裁段
- 四、控制段
- 五、數據段
- 六、CRC段(校驗)
- 七、ACK段(應答段)
- 八、幀結束
- 九、幀間隔ITM
- 十、一個數據段長度為8的標準幀,總共多少個位呢?是108位嗎?
一、前言
一個標準的數據幀由以下組成:
以上的元素,缺一不可,否則沒法通過CAN控制器的校驗,應用程序無法獲取CAN報文。
二、幀開始
幀起始由1個顯性位(邏輯0)組成,用于CAN總線上各個CAN節點的同步。在CAN總線空閑時,總線是隱性(1)。由于CAN總線是電平邏輯是"線與原理",所以當其中一個CAN節點發送幀起始(顯性0),CAN總線會從隱形1變成顯性0,各個節點進行同步。
三、仲裁段
標準幀與拓展幀在這里有區別,CANID的過濾器與CANID的優先級都在仲裁段完成。在STM32的CAN控制與FDCAN控制上,發送CAN報文之前需要對RTR寄存器賦值,表示即將發送的CAN報文是標準幀還是遠程幀。
實際工作上,分配CAN_ID時(或者Node_ID)時需要從仲裁段思考。哪些CAN節點的通訊優先級比較高,通訊優先級高的CAN節點配置較小的CAN_ID(或者Node_ID)。
四、控制段
標準幀與拓展幀在這里有區別,DLC規定了數據段的長度。在STM32的CAN控制與FDCAN控制器,發送CAN報文之前需要對DLC寄存器賦值,表示即將發送的CAN報文的數據段有多少個字節。
其中DLC段需要應用程序控制,決定數據段有多少個字節的數據。
五、數據段
數據段比較簡單,最大8個字節(當DCL設置8時)。當DCL設置0時,數據段為0個字節。
應用程序的大部分工作都是處理數據段里的數據。
六、CRC段(校驗)
校驗的算法由CAN控制器完成,應用程序不用管它,了解一下即可。
校驗的流程是發送端先計算CRC值,接收端接著也計算CRC值。如果接收端發現CRC值不對,接著就會產生CRC校驗錯誤。
七、ACK段(應答段)
當沒有CAN節點應答時,ACK段為隱性(1),當有CAN節點應答時,ACK段位顯性(0)。
八、幀結束
幀結束由7個隱性位組成。
九、幀間隔ITM
1個隱性位(ACK界定符)+7個隱性位(幀結束)+3個隱性位(幀間隔ITM) = 11個隱性位。11個隱形位后,CAN總線進入空閑狀態。
十、一個數據段長度為8的標準幀,總共多少個位呢?是108位嗎?
答案是不止108位,因為還需要考慮位填充(連續5個相同位后,CAN控制器會填入一個相反的位)。
一般CAN示波器就能捕捉到位填充。
總結
以上是生活随笔為你收集整理的CAN总线技术 | 数据链路层02 - 帧结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32+CubeMX开发工程笔记汇总
- 下一篇: fileitem方法_FileItem类