博客專欄

        EEPW首頁 > 博客 > 詳解CAN總線:CAN總線報文格式—數據幀

        詳解CAN總線:CAN總線報文格式—數據幀

        發布人:美男子玩編程 時間:2022-10-11 來源:工程師 發布文章

        CAN總線上傳輸的信息稱為報文,當總線空閑時任何連接的單元都可以開始發送新的報文。

        CAN通信是通過以下5種類型的幀進行的:

        • 數據幀 

        • 遙控幀 

        • 錯誤幀 

        • 過載幀 

        • 幀間隔


        另外,數據幀和遙控幀有標準格式和擴展格式兩種格式。標準格式有 11 個位的標識符(Identifier: 以下簡稱 ID), 擴展格式有 29 個位的 ID。


        各種幀的用途如下表所示:


        圖片

        近期打算寫5篇文章,分別詳細介紹這5種類型的CAN總線報文格式,本篇博文將詳細講解CAN數據幀格式,創作不易,請各位朋友多多點贊、收藏、關注支持~


        關注公眾號:美男子玩編程,優先推送最新技術博文~


        數據幀由7個段構成,圖解說明如下所示:


        圖片
        • 幀起始:表示數據幀開始的段;

        • 仲裁段:表示該幀優先級的段,根據仲裁段ID碼長度的不同,分為標準幀(CAN 2.0A)和擴展幀(CAN 2.0B);

        • 控制段:表示數據的字節數及保留位的段;

        • 數據段:數據的內容,可發送0~8個字節的數據;

        • CRC段:檢查幀的傳輸錯誤的段;

        • ACK段:表示確認正常接收的段;

        • 幀結束:表示數據幀結束的段。


        1


        幀起始

        幀起始由1個顯性位組成。總線空閑時,發送節點發送幀起始,其他接收節點同步于該幀起始位。


        圖片

        總線上的電平有顯性電平和隱性電平兩種。


        總線上執行邏輯上的線“與”時,顯性電平的邏輯值為“0”,隱性電平為“1”。


        “顯性”具有“優先”的意味,只要有一個單元輸出顯性電平,總線上即為顯性電平。并且,“隱性”具有“包容”的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平。(顯性電平比隱性電平更強。)


        2


        仲裁段

        仲裁段用于寫明需要發送到目的CAN節點的地址、確定發送的幀類型(當前發送的是數據幀還是遙控幀),并確定發送的幀格式是標準幀還是擴展幀。


        仲裁段在標準格式幀和擴展格式幀中有所不同。標準格式幀的仲裁段由11位標識符和遠程發送請求位RTR組成,擴展格式幀的仲裁段由29位標識符和遠程發送請求位RTR組成。


        圖片

        圖片


        圖片


        圖片


        2.1、標準數據幀

        標準數據幀基于早期的CAN規格(1.0和2.0A版),使用了11位的識別域。


        CAN標準幀幀信息是11字節,包括幀描述符和幀數據兩部分。如下表所列:


        圖片

        前3字節為幀描述部分。字節1為幀信息,第7位(FF)表示幀格式,在標準幀中FF=0,第6位(RTR)表示幀的類型,RTR=0表示為數據幀,RTR=1表示為遠程幀。DLC表示在數據幀時實際的數據長度。


        標準數據幀的 ID 有 11 個位。從 ID10 到 ID0 依次發送。禁止高 7 位都為隱性(禁止設定:ID=1111111XXXX)。


        字節2~3為報文識別碼,其高11位有效。


        字節4~11為數據幀的實際數據,遠程幀時無效。


        2.2、擴展數據幀

        CAN擴展幀幀信息是13字節,包括幀描述符和幀數據兩部分,如下表所示:


        圖片

        前5字節為幀描述部分。字節1為幀信息,第7位(FF)表示幀格式,在擴展幀中FF=1,第6位(RTR)表示幀的類型,RTR=0表示為數據幀,RTR=1表示為遠程幀。DLC表示在數據幀時實際的數據長度。


        擴展格式的 ID 有 29 個位。基本 ID 從 ID28 到 ID18,擴展 ID 由 ID17 到 ID0 表示。基本 ID 和 標準格式的 ID 相同。禁止高 7 位都為隱性(禁止設定:基本 ID=1111111XXXX)。


        字節2~5為報文識別碼,其高28位有效。


        字節6~13為數據幀的實際數據,遠程幀時無效。


        3


        控制段

        控制段由6個位組成,包括數據長度代碼和兩個將來作為擴展用的保留位,標準格式和擴展格式的構成有所不同。


        數據長度代碼指示了數據段中的字節數量。數據長度代碼為4個位,在控制段里被發送,數據幀長度允許的字節數為0、1、2、3、4、5、6、7、8,其他數值為非法的。


        圖片

        保留位(r0、r1)必須全部以顯性電平發送。但接收方可以接收顯性、隱性及其任意組合的電平。


        數據長度碼(DLC)與數據的字節數的對應關系如下表所示:


        圖片

        數據的字節數必須為 0~8 字節,但接收方對 DLC = 9~15 的情況并不視為錯誤。


        4


        數據段

        數據段由數據幀中的發送數據組成,它可以為0~8字節,每字節包含了8位,首先發送最高有效位MSB,依次發送至最低有效位LSB。


        圖片

        5


        CRC段

        CRC段是檢查幀傳輸錯誤的幀,包括:15 個位的 CRC序列(CRC SEQUENCE)和1 個位的CRC界定符(CRC DELIMITER)構成。


        圖片

        CRC序列是根據多項式生成的 CRC 值,CRC 的計算范圍包括:幀起始、仲裁段、控制段、數據 段。接收方以同樣的算法計算 CRC 值并進行比較,不一致時會通報錯誤。


        圖片

        6


        ACK段

        ACK段用來確認是否正常接收。由 ACK 槽(ACK SLOT)和 ACK 界定符(ACK DELIMITER)2 個位構成。


        圖片

        發送單元在 ACK 段發送 2 個位的隱性位。當接收器正確地接收到有效的報文時,接收器就會在應答間隙(ACK SLOT)期間(發送ACK 信號)向發送器發送一個“顯性”的位以示應答,通知發送單元正常接收結束,這稱作“發送 ACK”或者“返回 ACK”。


        發送 ACK/返回 ACK是在既不處于總線關閉態也不處于休眠態的所有接收單元中,接收到正常消息的單元 (發送單元不發送 ACK)。所謂正常消息是指不含填充錯誤、格式錯誤、CRC 錯誤的消息。


        7


        幀結束

        幀結束是由每一個數據幀和遠程幀的標志序列界定的,這個標志序列由7個“隱性”位組成。


        圖片


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

        高通濾波器相關文章:高通濾波器原理


        關鍵詞: CAN總線 汽車

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 玉龙| 二连浩特市| 化德县| 出国| 新河县| 无锡市| 河间市| 正安县| 亚东县| 嘉兴市| 博罗县| 观塘区| 孝义市| 鹰潭市| 铁力市| 安徽省| 化州市| 新邵县| 济宁市| 丰顺县| 汶上县| 榆社县| 香港 | 琼中| 子长县| 辰溪县| 田阳县| 集安市| 临汾市| 文山县| 奉化市| 库车县| 新乡市| 长乐市| 融水| 金溪县| 出国| SHOW| 中超| 常州市| 铅山县|