4. CAN总线协议基础:CAN 2.0与CAN FD的区别、CAN帧结构、位时序与仲裁机制
在嵌入式网关开发中,CAN(Controller Area Network)总线是连接车辆电子控制单元(ECU)与网关的核心通信媒介。本章从协议底层出发,系统讲解CAN 2.0与CAN FD的差异、帧结构分类、位时序参数以及非破坏性仲裁机制,为后续设备树中CAN控制器节点配置与驱动集成奠定理论基础。
4.1 CAN 2.0 与 CAN FD 的核心区别
CAN 2.0(包括2.0A与2.0B)是经典CAN协议,最大数据场为8字节,固定位速率1 Mbps。CAN FD(Flexible Data-Rate)在CAN 2.0基础上扩展了数据场长度(最多64字节),并在数据段引入可变位速率,显著提升吞吐量。两者在物理层兼容,但数据链路层存在关键差异。
| 对比维度 | CAN 2.0(经典CAN) | CAN FD(灵活数据速率) |
|---|---|---|
| 数据场长度 | 0 ~ 8 字节 | 0 ~ 64 字节 |
| 位速率 | 固定速率(最高 1 Mbps) | 仲裁段固定 + 数据段可变(最高 8 Mbps) |
| 帧格式 | 标准帧(11位ID)/ 扩展帧(29位ID) | 兼容标准/扩展ID,新增FDF、BRS标志位 |
| CRC校验 | 15位 CRC | 17位(≤16字节)或 21位(>16字节)CRC |
| 错误状态 | 无额外状态位 | 新增ESI(错误状态指示)位 |
| 向后兼容 | — | 物理层兼容,数据链路层需显式支持 |
bosch,mram-cfg 或 can-transceiver 节点以启用 FD 模式;若仅需 CAN 2.0,则保持默认配置以降低功耗与延迟。
4.2 CAN 帧结构详解
CAN总线定义了四种帧类型:数据帧、远程帧、错误帧和过载帧。其中数据帧和远程帧由用户层生成,错误帧和过载帧由硬件控制器自动处理。理解帧结构是配置CAN控制器寄存器与解析设备树中“can-transceiver”时序参数的前提。
4.2.1 数据帧(Data Frame)
数据帧用于发送节点向总线广播数据。标准格式(CAN 2.0A)使用11位标识符,扩展格式(CAN 2.0B)使用29位标识符。帧结构包括:帧起始(SOF)、仲裁场、控制场、数据场、CRC场、应答场(ACK)和帧结束(EOF)。
4.2.2 远程帧(Remote Frame)
远程帧用于请求其他节点发送具有相同ID的数据帧。远程帧的RTR位为隐性(1),且数据场为空。接收节点收到远程帧后,若本地有对应ID的数据,则发送数据帧响应。
4.2.3 错误帧(Error Frame)
当节点检测到总线错误时,主动发送6个连续显性位(主动错误标志)或6个连续隐性位(被动错误标志),随后是8个隐性位的错误界定符。错误帧由硬件自动生成,驱动层通过读取错误计数器(TXERR、RXERR)获取状态。
4.3 位时序与采样点
CAN总线的位时序由四个段组成:同步段(Sync_Seg)、传播段(Prop_Seg)、相位缓冲段1(Phase_Seg1)和相位缓冲段2(Phase_Seg2)。采样点位于Phase_Seg1与Phase_Seg2之间。位时序参数直接影响总线通信的稳定性和最大速率。
| 段名称 | 作用 | 典型长度(Tq) |
|---|---|---|
| Sync_Seg | 同步所有节点时钟边沿 | 1 Tq |
| Prop_Seg | 补偿物理传输延迟 | 1 ~ 8 Tq |
| Phase_Seg1 | 采样前相位缓冲,可被SJW延长 | 1 ~ 8 Tq |
| Phase_Seg2 | 采样后相位缓冲,可被SJW缩短 | 1 ~ 8 Tq |
| SJW(同步跳转宽度) | 最大相位调整步长 | 1 ~ 4 Tq |
4.4 非破坏性仲裁机制
CAN总线采用载波监听多路访问/冲突检测(CSMA/CD)结合非破坏性逐位仲裁(Non-Destructive Bitwise Arbitration)机制。当多个节点同时发送时,ID值越小(显性位越多)的帧优先级越高,仲裁失败的节点自动转为接收模式,不破坏总线数据。
- 显性位(Dominant): 逻辑0,电平为差分高(CAN_H > CAN_L),可覆盖隐性位。
- 隐性位(Recessive): 逻辑1,电平为差分低(CAN_H ≈ CAN_L),被显性位覆盖。
- 仲裁过程: 每个节点在发送ID位时监听总线电平,若发送隐性位但读到显性位,则判定仲裁失败,立即停止发送。
- 优先级规则: 标准帧(11位ID)优先级高于扩展帧(29位ID);数据帧(RTR=0)优先级高于远程帧(RTR=1)。
4.5 本章小结
本章从CAN 2.0与CAN FD的协议差异出发,深入解析了数据帧、远程帧、错误帧的结构与用途,并详细说明了位时序的四个段及采样点计算方法,最后阐述了非破坏性逐位仲裁机制。这些知识是后续设备树中CAN控制器节点配置(如bosch,mram-cfg、can-transceiver时序参数)以及驱动层中断处理、错误恢复策略实现的直接理论基础。