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