標準CAN幀介紹

標準CAN幀介紹

  • 標準CAN(Controller Area Network)結構
    • 1.幀起始(SOF-Start Of Frame)
    • 2.仲裁段(Arbitration Field)
    • 3.控制段(Control Field)
    • 4.數據段(Data Field)
    • 5.CRC段(CRC Field)
    • 6.應答段(ACK Field)
    • 7.結束段(EOF-End Of Frame)
    • 8.幀間間隔(IFS-Inter Frame Space)
  • 總結與特點
  • 具體例子
    • 場景設定
    • 步驟1:組幀前的準備
    • 步驟2:構建標準數據幀
  • 步驟3:總線上的傳輸與仲裁過程
    • 步驟4:接收與應答過程
    • 步驟5數據處理

標準CAN(Controller Area Network)結構

CAN總線通信的核心就是節點間通過發送和接收符合特定格式的“幀”來實現。標準CAN有兩種主要的幀格式:標準幀(11位標識符)和擴展幀(29位標識符)。這里我們首先聚焦于最基礎的標準數據幀
一個標準CAN數據幀由以下7個不同的位字段(Bit Fields)組成,如下圖所示:
在這里插入圖片描述

圖1 標準CAN數據幀(Standard Data Frame)

1.幀起始(SOF-Start Of Frame)

  • 長度:1 bit
  • :顯性位(Dominant Bit,邏輯0)
  • 作用:標志著數據幀的開始。它同步所有總線上的節點,表示一個新的報文即將開始傳輸。在總線空閑時,第一個發送顯性位的節點獲得總線訪問權。

2.仲裁段(Arbitration Field)

這個字段決定了報文的優先級,并在多個節點同時發送時解決沖突(仲裁)。
它由兩部分組成:

  • 標識符(Identifier)
    長度:11 bits
    作用標識報文的含義和優先級。ID值越小,優先級越高(因為顯性位0優先)。例如,ID為0x000的報文優先級最高,ID為0x7FF的優先級最低。接收節點根據ID來決定是否接收該報文。
  • 遠程傳輸請求位(RTR-Remote Transmission Request)
    長度:1 bit
    作用:區分是 數據幀 還是 遠程幀
    數據幀(Data Frame):RTR = 顯性位(0)。表示該幀帶有數據。
    遠程幀(Remote Frame):RTR = 隱性位(1)。用于向其他節點請求發送具有相同ID的數據幀。遠程幀沒有數據段

3.控制段(Control Field)

這個字段提供了關于數據長度的信息。
它由三部分組成:

  • 標識符擴展位(IDE-Identifier Extension)
    長度:1 bit
    作用:區分標準幀和擴展幀。
    標準幀:IDE = 顯性位(0)
    擴展幀:IDE = 隱性位(1)。(擴展幀的仲裁段結構不同)

  • 保留位(r0)
    長度:1 bit
    作用:保留位,必須發送顯性位(0),但接收器可以接收顯性或隱性位。

  • 數據長度碼(DLC-Data Length Code)
    長度:4 bit
    作用指示數據段中包含的字節數。取值范圍從0到8。DLC值大于8的情況在CAN FD中定義,經典CAN中無效。

4.數據段(Data Field)

  • 長度:0-8 bytes(由DLC決定)
  • 作用:包含實際要傳輸的數據內容。這是報文的有效載荷。CAN協議允許靈活的數據長度,非常適合傳輸控制命令、傳感器讀數等短小精悍的信息。

5.CRC段(CRC Field)

這個字段用于檢測傳輸錯誤。
它由兩部分組成:

  • CRC序列(CRC Sequence)
    長度:15 bits
    作用:循環冗余校驗值。由發送器根據幀起始、仲裁段、控制段和數據段的內容計算得出。

  • CRC界定符(CRC Dilimiter)
    長度:1 bit
    隱性位(1)
    作用:作為一個固定的分隔符,標志著CRC序列的結束。

6.應答段(ACK Field)

這個字段用于接收節點確認是否接收到報文。
它由兩部分組成:

  • 應答間隙(ACK Slot)
    長度:1 bit
    發送器行為:發送一個隱性位(1)
    接收器行為:任何正確接收到報文(通過CRC校驗)的接收節點,都會在ACK Slot時間段內發送一個**顯性位(0)**來覆蓋它。

  • 應答界定符(ACK Dilimiter)
    長度:1 bit
    隱性位(1)
    作用:標志著應答段的結束。它必須為隱性位。

ACK段的工作方式:發送器發送隱性位(1),如果至少有一個接收器正確接收了幀,它就會用顯性位(0)覆蓋這個位。因此,發送器如果在ACK Slot讀到隱性位(1),就知道沒有節點成功接收,會觸發錯誤并重發。

7.結束段(EOF-End Of Frame)

長度:7 bits
:全部為隱性位(1)
作用:明確標志該幀的傳輸結束。

8.幀間間隔(IFS-Inter Frame Space)

雖然嚴格來說不屬于幀的一部分,但它是幀與幀之間必需的間隔。

  • 長度:3 bits(或更多,具體由控制器實現決定)
  • 作用:在幀結束和下一幀開始(或總線空閑)之間提供一個最小間隔,讓控制器內部有足夠的時間處理剛接收到的幀。

總結與特點

  • 非破壞性仲裁:基于標識符(ID)的優先級仲裁機制。優先級高的報文繼續發送,優先級低的自動退出發送并在總線空閑時重試,沒有任何數據損失或丟失。
  • 高可靠性:通過CRC校驗、應答位(ACK)和強大的錯誤檢測與信令機制,保證了數據傳輸的極高可靠性。
  • 廣播與過濾:報文被廣播到所有節點,每個節點通過標識符過濾來決定是否接收和處理該報文。
  • 短小高效:數據長度最高為8字節,開銷小,非常適合高實時性要求的控制系統。

具體例子

下面,我將通過一個具體的例子來詳細說明標準CAN幀的每一部分。

場景設定

假設我們有一個簡單的汽車網絡,里面有兩個節點:
1.發動機控制單元(ECU_Engine):負責報告發動機轉速。
2.儀表盤單元(ECU_Dashboard):負責接收轉速并顯示在轉速表上。
ECU_Engine需要沒秒發送100次發動機轉速數據。我們假設當前發動機轉速為 3000 RPM

步驟1:組幀前的準備

1.報文標識符(ID):我們需要為轉速報文分配一個唯一的ID。假設我們分配 ID = 0x123(十六進制)。這個ID決定了報文的優先級。0x123是一個中等偏高的優先級(因為數值較小)。
2.數據:轉速數據為3000。我們需要用2個字節(16位)來表示它。假設我們使用大端模式(Big-endian)(即高位字節在前):

  • 3000的十六進制是0x0BB8
  • 因此,數據段的兩個字節為:
    Byte 0 = 0x0B(高字節)
    Byte 1 = 0xB8(低字節)
    3.數據長度:我們有2個字節的數據,所以數據長度碼(DLC)為2

步驟2:構建標準數據幀

現在,我們來逐字段構建這個轉速數據幀。

字段值(二進制)值(十六進制)說明
1.幀起始(SOF)0-一個顯性位(0),標志開始。
2.仲裁段
標識符(11位)001 0010 00110x123這是報文的ID。注意最高7位是0x090010010),最低4位是0x3(0011),合起來是0x123
RTR位0-顯性位(0),表面這是一個數據幀
3.控制段
IDE位0-顯性位(0),表面這是標準幀(11位ID)。
保留位r00-必須發送顯性位(0)。
DLC(4位)01000x2數據長度為 2個字節
4.數據段(2字節)
數據字節00000 10110x0B轉速數據的高字節(3000的高位部分)。
數據字節11011 10000xB8轉速數據的低字節(3000的低位部分)。
5.CRC段
CRC序列(15位)CRC算法(計算得出)e.g., 0x7FAC發送器根據前面所有位計算出的校驗值。假設這里是 0x7FAC
CRC界定符1-隱性位(1),固定格式。
6.應答段(ACK)
ACK間隙1 →\to 0-發送器發送隱性位(1),但被接收器用顯性位(0)覆蓋
ACK界定符1-隱性位(1),固定格式。
7.結束段(EOF)1111111-7個連續的隱性位(1),標志幀結束。
8.幀間間隔(IFS)--總線短暫空閑,為下一幀做準備。

步驟3:總線上的傳輸與仲裁過程

1.發送:ECU_Engine開始將上述比特流逐位放到CAN總線上,從SOF開始。
2.仲裁(假設此時有另一個節點要發送低優先級消息)

  • 在發送仲裁段(ID+RTR)時,ECU_Engine也在監聽總線。

  • 它發送ID0x12300100100011)。

  • 如果另一個節點同時發送一個ID為0x12400100100100)的報文,仲裁會發生:
    – 前8位(00100100)兩者完全相同,總線狀態也一致,沒有勝負。
    – 比較第9位:ECU_Engine發0,另一個節點發0,還是平手。
    – 比較第10位:ECU_Engine發0,另一個節點發1
    顯性位(0)優先于隱性位(1)。因此,ECU_Engine贏得仲裁,繼續發送。
    – 另一個節點檢測到它發送的是隱性位(1),但讀到的是顯性位(0),意識到自己優先級更低,立即退出發送模式轉為接收模式,等待下次重試。

  • 這就是非破壞性仲裁:高優先級報文無延遲地繼續發送,低優先級報文自動退出,沒有任何數據損壞。

步驟4:接收與應答過程

1.接收:總線上所有節點(包括ECU_Dashboard)都接收這個幀。
2.CRC校驗:每個接收節點都用同樣的算法對接收到的數據(SOF,仲裁段,控制段,數據段)進行計算,得到一個CRC值。
3.發送應答(ACK)

  • 在ACK Slot時間段,發送器ECU_Engine會釋放總線,發送一個隱性位(1)
  • 所有正確接收到該幀(即CRC校驗通過)的節點(在這個例子中,ECU_Dashboard肯定會的),都會在ACK Slot時間段內**發送一個顯性位(0)**來覆蓋這個隱性位。

4.確認

  • 發送器ECU_Engine在ACK Slot讀總線。如果它讀到了顯性位(0),它就知道至少有一個節點成功接收了它的報文,于是認為發送成功。
  • 如果它讀到的仍然是隱性位(1),就意味著沒有一個節點成功接收,這將出發錯誤計數器,ECU_Engine會稍后自動重發該報文。

步驟5數據處理

ECU_Dashboard成功接收幀后:
1.通過ID0x123識別出這是發動機轉速報文。
2.根據DLC2知道數據段有2個字節。
3.從數據段提出兩個字節0x0B0xB8
4.將它們組合成0x0BB8,轉換為十進制數字 3000
5.最后,驅動轉速表指針指向3000 RPM的位置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/922381.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/922381.shtml
英文地址,請注明出處:http://en.pswp.cn/news/922381.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

easyPoi實現動表頭Excel的導入和導出

easyPoi實現動表頭Excel的導入和導出 Maven依賴 !-- EasyPoi 核心依賴 --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.4.0</version></dependency><!-- EasyPoi Web…

瘋狂星期四文案網第67天運營日記

網站運營第67天&#xff0c;點擊觀站&#xff1a; 瘋狂星期四 crazy-thursday.com 全網最全的瘋狂星期四文案網站 運營報告 今日訪問量 今日搜索引擎收錄情況

CAS理解

CAS&#xff08;Compare And Swap&#xff09; 是非阻塞同步的實現原理&#xff0c;它是CPU硬件層面的一種指令&#xff1b; CAS制定操作包含三個參數 內存值&#xff08;內存地址&#xff09;v預期值E新增值N 當CAS指令執行時&#xff0c;當且僅當預期值E和內存值V相同時&…

【SQL】指定日期的產品價格

目錄 題目 分析 代碼 題目 產品數據表: Products ------------------------ | Column Name | Type | ------------------------ | product_id | int | | new_price | int | | change_date | date | ------------------------ (product_id, chang…

《突破Unity+騰訊云聯機瓶頸:多人游戲同步延遲與數據安全的雙維度優化》

在Unity開發的多人聯機游戲中&#xff0c;騰訊云的云服務器&#xff08;CVM&#xff09;、游戲多媒體引擎&#xff08;GME&#xff09;與云數據庫&#xff08;CDB&#xff09;共同構成了聯機體驗的核心支撐。但隨著玩家并發量提升與游戲玩法復雜度增加&#xff0c;“實時同步延…

BisenetV1/2網絡以及模型推理轉換

BisenetV1/2網絡以及模型推理轉換 文章目錄BisenetV1/2網絡以及模型推理轉換1 BiSenetV11.1 Contex Path1.2 Spatial Path1.3 ARM1.4 FFM1.5 backbone2 模型推理代碼流程分析2.1 加載模型2.2 模型推理① 轉換張量② 輸入尺寸調整③ 模型推理④ 輸出尺寸還原⑤ 類別預測⑥ 保存繪…

Android開發-文本輸入

一、EditText 基礎&#xff1a;不僅僅是輸入框EditText 是 TextView 的子類&#xff0c;允許用戶輸入和編輯文本。1. 基本布局<EditTextandroid:id"id/et_username"android:layout_width"match_parent"android:layout_height"wrap_content"an…

數據化存儲菜單,國際化方案

djangoclass Menu(models.Model):parent_id models.BigIntegerField(default0, verbose_name父菜單ID)name models.CharField(max_length50, verbose_name菜單名稱)icon models.CharField(max_length50, blankTrue, nullTrue, verbose_name菜單圖標)path models.CharField(…

SQL-用戶管理與操作權限

在 SQL 中&#xff0c;用戶管理和權限操作是數據庫安全管理的核心組成部分&#xff0c;用于控制 “誰能訪問數據庫” 以及 “能對數據庫做什么”。它們共同保障數據庫的安全性、完整性和合規性。一、用戶管理&#xff1a;控制 “誰能訪問數據庫”用戶管理是指對數據庫用戶的創建…

計算機視覺案例分享之答題卡識別

目錄 一、基本流程 二、代碼實現 1. 導入工具包和定義常量 2. 輔助函數定義 2.1 坐標點排序函數 2.2 透視變換函數 2.3 輪廓排序函數 2.4 圖像顯示函數 3. 主程序處理流程 3.1 圖像預處理 3.2 輪廓檢測與透視變換 3.3 閾值處理與選項檢測 3.4 答案識別與評分 我們…

Java面試問題記錄(四)

四、設計模式1、設計模式6大原則1&#xff09;單一職責(一個類和方法只做一件事)、2&#xff09;里氏替換(多態&#xff0c;子類可擴展父類)、3&#xff09;依賴倒置(細節依賴抽象&#xff0c;下層依賴上層)、4&#xff09;接口隔離(建立單一接口)、迪米特原則(最少知道&#x…

高等教育學

高等教育學第一章 高等教育與高等教育學第二章 高等教育發展史2-1西方高等教育發展史2-2中國高等教育發展史第三章 高等教育理念3.1-王一軍-高等教育理念的構成要素3.2-王一軍-高等教育理念的主要流派第四章 高等學校教育4.1 高等學校教育制度4.2-陳何芳-高等教育辦學體制 &…

unordered_map使用MFC的CString作為鍵值遇到C2056和C2064錯誤

文章目錄unordered_map使用MFC的CString作為鍵值遇到C2056和C2064錯誤問題出現的背景解決方案總結unordered_map使用MFC的CString作為鍵值遇到C2056和C2064錯誤 問題出現的背景 在我的一個老工程項目中&#xff0c;使用C的std::unordered_map時&#xff0c;使用了MFC的CStrin…

Maven 本地倉庫的 settings.xml 文件

本地倉庫目錄位置&#xff1a;C:/用戶/用戶名/.m2/repository 需要修改配置&#xff0c;具體的修改方法請看 ↓↓↓ 2024版 IDEA 用 Maven 創建 java 項目&#xff08;Maven 安裝和配置&#xff09; <?xml version"1.0" encoding"UTF-8"?><!…

vue動畫內置組件

文章目錄vue動畫的官方類名EnterLeaveTransition組件注意事項觸發實例TransitionGroup組件注意事項觸發機制實例拓展vue動畫的官方類名 如下來自vue官方文檔&#xff0c;提供了dom元素&#xff0c;插入Enter和刪除Leave的類名 Enter v-enter-from&#xff1a;進入動畫的起始…

軟考中級信息安全與病毒防護知識點

### 一、核心知識點梳理這部分內容可以大致分為三個方面&#xff1a;**信息安全基本概念**、**加解密技術** 和 **惡意代碼&#xff08;病毒&#xff09;防護**。#### 1. 信息安全的基本目標&#xff08;CIA三元組&#xff09; 這是所有信息安全問題的基石&#xff0c;必須熟練…

數組存儲 · 行主序與列主序 | 應用 / 基地址 / 選擇策略

注&#xff1a;本文為 “數組存儲 行主序與列主序” 相關合輯。 英文引文&#xff0c;機翻未校。 中文引文&#xff0c;略作重排。 未整理去重&#xff0c;如有內容異常&#xff0c;請看原文。 Row major and Column Major Address calculations 按行主序和按列主序的地址計算…

在 CentOS 中安裝 VirtualBox 增強功能的步驟

很好&#xff0c;你看到 /run/media/asfor/VBox_GAs_7.2.2&#xff0c;這說明你已經在 VirtualBox 中掛載了“增強功能&#xff08;Guest Additions&#xff09;”光盤&#xff0c;接下來只要手動安裝就可以啟用共享剪貼板、全屏分辨率、鼠標無縫移動等功能。&#x1f4dd; 在 …

Python快速入門專業版(三十):函數進階:函數嵌套與作用域(內部函數訪問外部變量)

目錄引一、函數嵌套&#xff1a;在函數內部定義函數1. 基本語法與調用方式示例1&#xff1a;簡單的函數嵌套結構2. 嵌套函數的典型應用&#xff1a;隱藏輔助邏輯示例2&#xff1a;用嵌套函數隱藏輔助邏輯二、嵌套函數的作用域&#xff1a;變量訪問規則1. 內部函數訪問外部函數的…

C++數組與字符串:從基礎到實戰技巧

C中的數組和字符串是處理數據集合和文本的基礎工具。數組用于存儲相同類型的元素集合&#xff0c;而字符串則專門用于處理文本數據。C提供了兩種主要的字符串處理方式&#xff1a;C風格字符串&#xff08;字符數組&#xff09;和C的std::string類。 &#x1f4ca; 1. 數組 (Arr…