CAN 总线的数据帧是实现设备间数据传输的核心载体,其格式设计兼顾了实时性、可靠性和灵活性。以下从经典 CAN(CAN 2.0)和增强型 CAN FD两个维度,详细解析数据帧的结构、字段功能及版本差异。
一、经典 CAN 数据帧格式(ISO 11898)
经典 CAN 数据帧由 7 个字段组成,支持 ** 标准帧(11 位 ID)和扩展帧(29 位 ID)** 两种格式,核心差异体现在仲裁场和控制场。
1. 标准帧(CAN 2.0A)
字段 | 长度(位) | 说明 |
帧起始(SOF) | 1 | 显性位(0),标志帧的开始,所有节点同步于此位。 |
仲裁场 | 12 | - 11 位标识符(ID):数值越小优先级越高,ID 高 7 位不能全为隐性(1)- RTR 位:数据帧为显性(0),远程帧为隐性(1),用于区分帧类型。 |
控制场 | 6 | - DLC(数据长度码):4 位,编码 0-8 字节(0b0000=0 字节,0b1000=8 字节)- 保留位(r0):1 位,发送时置显性(0),接收时忽略。 |
数据场 | 0-64 | 实际传输的数据,经典 CAN 固定为 0-8 字节,CAN FD 扩展至 64 字节。 |
CRC 场 | 16 | - 15 位 CRC 校验码:校验范围包括 SOF、仲裁场、控制场、数据场(不包含填充位)- 1 位 CRC 界定符:隐性位(1)。 |
ACK 场 | 2 | - 1 位 ACK 槽:发送方释放总线(隐性位),接收方正确接收则发送显性位(0)- 1 位 ACK 界定符:隐性位(1)。 |
帧结束(EOF) | 7 | 隐性位(1),标志帧的结束。 |
2. 扩展帧(CAN 2.0B)
字段 | 长度(位) | 说明 |
仲裁场 | 32 | - 11 位基本 ID:与标准帧 ID 兼容- SRR 位:隐性位(1),替代远程帧的 RTR 位- IDE 位:显性(0)表示标准帧,隐性(1)表示扩展帧- 18 位扩展 ID:与基本 ID 共同构成 29 位标识符。 |
控制场 | 6 | - DLC:同标准帧- 保留位(r1, r0):发送时置显性(0),接收时忽略。 |
3. 仲裁场优先级机制
标识符优先级:ID 数值越小优先级越高。例如,ID=0x001(二进制 00000000001)的优先级高于 ID=0x100(00010000000)。
帧类型优先级:数据帧(RTR=0)的优先级高于同 ID 的远程帧(RTR=1)。
标准帧与扩展帧优先级:当基本 ID 相同时,标准帧的 RTR 位为显性(0),扩展帧的 SRR 位为隐性(1),因此标准帧优先级更高。
二、CAN FD 数据帧格式(ISO 11898-1:2015)
CAN FD 在兼容经典 CAN 的基础上,通过以下改进提升性能:
更高数据吞吐量:数据场扩展至 64 字节,DLC 支持非线性编码(如 DLC=9 对应 12 字节)。
双速率传输:仲裁段保持 1Mbps,数据段速率可切换至 8Mbps。
增强错误校验:采用 CRC17/CRC21 算法,校验范围包括填充位和填充计数位。
1. 控制场扩展
字段 | 长度(位) | 说明 |
BRS 位 | 1 | 位速率切换标志:隐性(1)时数据段切换至高速率。 |
ESI 位 | 1 | 错误状态指示:显性(0)表示主动错误节点,隐性(1)表示被动错误节点。 |
EDL 位 | 1 | 帧格式指示:显性(0)表示经典 CAN,隐性(1)表示 CAN FD。 |
DLC | 4 | - 线性编码(0-8 字节):同经典 CAN- 非线性编码(9-15 字节):DLC=9→12 字节,DLC=10→16 字节,依此类推至 DLC=15→64 字节。 |
2. CRC 场改进
校验范围:包括填充位(连续 5 位相同值后插入的反码位)和 3 位填充计数(格雷码)及 1 位奇偶校验位。
算法选择:数据长度≤16 字节时使用 CRC17,>16 字节时使用 CRC21。
3. ACK 场增强
CAN FD 允许接收方在2 个位时间内发送 ACK 确认,补偿速率切换带来的延迟。
三、关键字段深度解析
1. 仲裁场:标识符与优先级的核心
标识符(ID):
标准帧 ID 范围为 0x000-0x7FF(11 位),扩展帧 ID 为 0x0000000-0x1FFFFFF(29 位)。
ID 的二进制值直接决定优先级。例如,ID=0x001(00000000001)的优先级高于 ID=0x100(00010000000),因为前者第一个隐性位出现在第 11 位,而后者在第 8 位。
RTR 位:数据帧为显性(0),远程帧为隐性(1)。当 ID 相同时,数据帧优先传输。
2. 控制场:数据长度与协议扩展
DLC 编码:
经典 CAN:DLC=0-8 对应 0-8 字节,接收方对 DLC=9-15 视为无效但不报错。
CAN FD:DLC=9-15 采用非线性编码,例如 DLC=9→12 字节,DLC=10→16 字节,DLC=15→64 字节。
保留位(r0, r1):
标准帧中仅 r0 保留,发送时置 0,接收时忽略。
扩展帧中 r1 和 r0 均保留,发送时置 0,接收时期望为 1(隐性),用于未来协议扩展。
3. CRC 场:错误检测的核心
经典 CAN:
使用 CRC15 算法,校验范围包括 SOF 至数据场(不含填充位)。
示例:数据场为 0x12 0x34 时,CRC 校验码为 0x7B3(15 位)。
CAN FD:
新增 3 位填充计数(格雷码)和 1 位奇偶校验位,固定填充位插入在 CRC 域中(每 4 位插入 1 位反码)。
示例:数据长度 12 字节(DLC=9)时,使用 CRC17,校验码为 0x1234(17 位)。
4. 物理层:信号与速率的载体
差分信号:
显性位:CAN_H=3.5V,CAN_L=1.5V(差分电压 2V),表示逻辑 0。
隐性位:CAN_H=CAN_L=2.5V(差分电压 0V),表示逻辑 1。
速率与总线长度:
经典 CAN:1Mbps 时总线长度≤40m,125kbps 时可达 1km。
CAN FD:仲裁段保持 1Mbps,数据段速率可切换至 8Mbps,总线长度受速率影响。
四、帧格式示例
1. 标准帧(数据帧)
帧结束:7个隐性位
2. 扩展帧(数据帧)
CRC场:0x456(15位) + 界定符=1
3. CAN FD 帧
- 固定填充位=0x55
五、CAN FD 与经典 CAN 的兼容性
仲裁兼容性:
CAN FD 帧的仲裁场前 11 位与经典 CAN 兼容,确保混合网络中优先级仲裁正常。
当 ID 相同时,经典 CAN 数据帧的优先级高于 CAN FD 数据帧。
物理层兼容:
CAN FD 复用经典 CAN 的双绞线和终端电阻(120Ω),但支持更高的数据段速率(最高 8Mbps)。
错误处理:
CAN FD 节点检测到经典 CAN 帧时,自动切换至经典模式处理。
错误帧和过载帧保持与经典 CAN 相同的格式,但发送时机受速率切换影响。
总结
CAN 总线的数据帧格式设计体现了高效仲裁、可靠传输、灵活扩展的特点:
经典 CAN:通过标识符优先级和非破坏性仲裁,满足汽车电子等实时性场景需求。
CAN FD:通过数据场扩展(64 字节)、双速率传输(最高 8Mbps)和增强 CRC 校验,适应智能设备对大数据量和高带宽的需求。
理解数据帧格式是开发 CAN 应用的基础,尤其在汽车电子、工业自动化等领域,需根据具体场景选择帧类型并合理配置 DLC、CRC 等参数,以实现最优通信性能。
家具维修培训