CAN数据帧详解

CAN 数据帧(Data Frame) 是 CAN 总线最核心、最常用的报文类型,用于节点间传输有效数据。数据帧如下图

CAN2.0A 标准帧

一、整体结构

一帧由 7 个字段 组成:SOF → 仲裁段 → 控制段 → 数据段 → CRC 段 → ACK 段 → EOF

二、逐字段详解

1. 帧起始 (SOF)
  • 1 位显性位(逻辑 0)
  • 作用:标志帧开始,同步所有节点时钟
2. 仲裁段 (Arbitration Field)
  • 12 位(标准帧)
  • ID (11 位)
    • 报文唯一标识,决定优先级
    • ID 越小,优先级越高
  • RTR (1 位)
    • 0 = 数据帧(发送数据)
    • 1 = 远程帧(请求数据)
3. 控制段 (Control Field)
  • 6 位
  • IDE (1 位)
    • 0 = 标准帧(11 位 ID)
    • 1 = 扩展帧(29 位 ID)
  • r0 (1 位) :保留位,固定为 0
  • DLC (4 位) :数据长度码
    • 取值 0~8,表示数据场字节数
4. 数据段 (Data Field)
  • 0~8 字节(0~64 位)
  • 作用:承载实际传输数据
  • 规则:高位字节先发送(MSB first)
5. CRC 段 (CRC Field)
  • 16 位
  • 15 位 CRC 校验码:从 SOF 到数据场计算
  • 1 位 CRC 界定符:隐性位(1)
  • 作用:检测传输错误
6. ACK 段 (ACK Field)
  • 2 位
  • ACK 槽 (1 位)
    • 发送方发 隐性位(1)
    • 接收正确 → 拉低为 显性位(0)应答成功
  • ACK 界定符 (1 位):隐性位(1)
7. 帧结束 (EOF)
  • 7 位 ,全为 隐性位(1)
  • 作用:标志帧结束

三、标准帧 vs 扩展帧

  • 标准帧 (CAN2.0A)11 位 ID,结构简单、常用
  • 扩展帧 (CAN2.0B)29 位 ID,可容纳更多报文

四、核心特点

  1. 优先级仲裁 :ID 越小越优先,非破坏性仲裁
  2. 可靠传输:CRC 校验 + ACK 应答 + 自动重传
  3. 数据长度0~8 字节(CAN FD 可达 64 字节)
  4. 多主通信:任意节点可主动发送

五、总结

SOF 起、ID 定、数据传、CRC 检、ACK 答、EOF 收。

CAN2.0B 扩展数据帧(Extended Frame)

一、核心区别一句话

  • 标准帧:11 位 ID
  • 扩展帧:11 位基础 ID + 18 位扩展 ID = 29 位 ID

二、扩展帧完整结构

SOF → 仲裁段(变长) → 控制段 → 数据段 → CRC 段 → ACK 段 → EOF

只有仲裁场段 和标准帧不一样,其他字段完全相同

三、扩展帧仲裁段(最重要)

29 位 ID + 3 位控制位 = 32 位结构:

  1. ID10~ID0基 ID 11 位
  2. SRR 位 :1 位(隐性 1,替代标准帧 RTR)
  3. IDE 位 :1 位(隐性 1,表示扩展帧)
  4. ID28~ID11扩展 ID 18 位
  5. RTR 位 :1 位(0 = 数据帧,1 = 远程帧
  6. r1、r0:保留位,固定 0

四、关键位含义

  • SRR = 1 :替代标准帧的 RTR,一定是隐性
  • IDE = 1表示这是扩展帧
    • 标准帧 IDE=0
    • 扩展帧 IDE=1
  • 总 ID = 11+18 = 29 位

五、标准帧 vs 扩展帧

项目 标准帧 扩展帧
ID 长度 11 位 29 位
IDE 位 0(显性) 1(隐性)
仲裁场长度 19 位 32 位
优先级 更高 较低
适用 汽车常规信号 报文多、复杂系统

六、最重要结论

  1. 扩展帧 = 29 位 ID
  2. 只有仲裁段结构不同,其余场完全一样
  3. 标准帧优先级 > 扩展帧(因为 IDE=0 < IDE=1)
  4. 数据段依然 0~8 字节
相关推荐
dogstarhuang1 小时前
OpenAI GPT-5.6 降价后如何重算 API 账单?多模型路由与成本治理实战
服务器·网络·人工智能·大模型·api·ai应用开发·接口管理
苏宸啊2 小时前
linux网络编程udp服务器和客户端代码编写(echo版本和字典版本)
linux·网络
奇树谦3 小时前
HDD 为什么适合顺序大文件读写:从 RAID 5 到 RAID 50 的原理与性能分析
linux·运维·网络
嵌入式阿蔡4 小时前
Linux_01:交叉编译与开发环境实战——从单片机跨到 Linux 的第一道坎
linux·运维·网络·单片机·嵌入式硬件·嵌入式实时数据库
雷电小将军5 小时前
诡秘之主手游占卜家序列加点 诡秘之主手游占卜家怎么加点
服务器·网络·游戏·电脑·玩游戏
陈皮波比茶5 小时前
Python项目实战-网络机器人(爬虫)
开发语言·网络·爬虫·python·机器人
白猫不黑5 小时前
网络安全/信息安全专业学习路线与入行指南:从大学到岗位的完整规划
网络·学习·安全·web安全·网络安全·黑客技术
wWYy.6 小时前
Linux发送数据包的过程
linux·网络
云飞云共享云桌面6 小时前
自动化设备厂 10 人研发团队,如何共用一台服务器做 SolidWorks 建模?
运维·服务器·网络·3d·自动化·制造
小谢取证6 小时前
实战案例分享:用 AI 绕过模拟器反取证进行动态抓包,落地 APK 真实 IP
大数据·网络·人工智能