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,可容纳更多报文
四、核心特点
- 优先级仲裁:ID 越小越优先,非破坏性仲裁
- 可靠传输:CRC 校验 + ACK 应答 + 自动重传
- 数据长度:0~8 字节(CAN FD 可达 64 字节)
- 多主通信:任意节点可主动发送
五、总结
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 位结构:
- ID10~ID0:基 ID 11 位
- SRR 位:1 位(隐性 1,替代标准帧 RTR)
- IDE 位:1 位(隐性 1,表示扩展帧)
- ID28~ID11:扩展 ID 18 位
- RTR 位:1 位(0 = 数据帧,1 = 远程帧)
- 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 位 |
| 优先级 | 更高 | 较低 |
| 适用 | 汽车常规信号 | 报文多、复杂系统 |
六、最重要结论
- 扩展帧 = 29 位 ID
- 只有仲裁段结构不同,其余场完全一样
- 标准帧优先级 > 扩展帧(因为 IDE=0 < IDE=1)
- 数据段依然0~8 字节