2. CAN FD基础

经典CAN(ISO 11898-1:2003)在汽车电子领域服役超过三十年,其1 Mbps仲裁段速率与8字节数据场在智能驾驶、域控制器、OTA刷写等场景下逐渐成为瓶颈。CAN FD(Flexible Data-rate,ISO 11898-1:2015)在保持仲裁机制与拓扑兼容的前提下,通过"可变速率+扩展数据场+改进CRC"三项核心改造,把单帧有效载荷提升到64字节、数据段速率提升到5~8 Mbps,成为RH850等车规MCU上UDS诊断与大数据传输的主力总线。

一、核心差异:从"定速定长"到"分段变速变长"

CAN FD并非全新协议,而是对经典CAN帧结构的"选择性增强"。理解差异的关键在于:一帧之内存在两个速率区段。仲裁段(含SOF、仲裁场、控制场前段)仍以标称位速率(Nominal Bit Rate,典型500 kbps)运行,保证多节点非破坏性仲裁的时序一致性;一旦进入数据段(BRS位之后到CRC界定符前),可切换到数据位速率(Data Bit Rate,典型2 Mbps或5 Mbps),实现"仲裁慢、数据快"。

数据场长度由DLC编码扩展:经典CAN的DLC=9~15非法,而CAN FD中DLC=9~15分别映射到12、16、20、24、32、48、64字节,且允许不填充到标准长度。CRC多项式从15位升级为17位(≤16字节)或21位(>16字节),并引入固定填充位与奇偶校验,使残差错误概率显著降低。

CAN FD帧与经典CAN帧在物理层可共存于同一对双绞线,但要求所有节点均支持FD;若总线上存在经典CAN节点,它将无法识别FD帧的BRS/ESI位,可能产生错误帧,因此工程上通常按"全网FD化"或"FD与经典CAN物理隔离"两种策略部署。
CAN 与 CAN FD 帧结构对比与位速率切换 经典 CAN 帧(定速 500 kbps,最大 8 字节) SOF 仲裁场 11/29b 控制场 数据场 0~8 字节 CRC 15b ACK EOF 全程 500 kbps(单一速率) CAN FD 帧(仲裁 500 kbps + 数据 2/5 Mbps,最大 64 字节) SOF 仲裁场 11/29b 控制场 数据场 0~64 字节 CRC 17/21b ACK EOF BRS=1 切换至数据位速率 仲裁段 500 kbps 数据段 2/5 Mbps CRC/ACK 500 kbps 关键控制位:FDF(FD帧标识)、BRS(位速率切换)、ESI(错误状态指示)

二、位速率切换与数据场扩展的工程约束

位速率切换不是"想切就切",收发器与网络拓扑必须满足数据段信号完整性。数据段速率越高,位时间越短,对振铃、反射、传播延迟越敏感。工程上常用约束如下:

  • 收发器带宽:需选用支持FD的收发器(如TJA1044、TJA1051),其环路延迟与对称性满足2~5 Mbps。
  • 拓扑与终端:分支长度尽量短,两端120 Ω终端电阻必须匹配;星型或长分支会显著恶化眼图。
  • 采样点:数据段采样点通常设在75%~80%,需与所有节点一致,否则位错误率上升。
  • 时钟精度:数据段对晶振容差更敏感,RH850的CAN FD模块支持SSP(二次采样点)配置以补偿。

数据场扩展带来的收益不仅是"单帧装更多",更在于协议效率。以UDS诊断为例,经典CAN传输64字节需8帧,而CAN FD一帧即可承载,帧头开销从约47%降至约12%,刷写与标定效率提升数倍。

三、CRC改进与错误检测

数据场变长后,15位CRC对长帧的漏检概率不再可接受。CAN FD采用两种CRC:数据≤16字节用17位CRC,>16字节用21位CRC,并加入填充位计数器与奇偶校验位。其核心改进是:

对比项 经典 CAN CAN FD
最大数据场8 字节64 字节
位速率单一速率,≤1 Mbps仲裁段 + 数据段双速率,数据段可达5~8 Mbps
CRC 长度15 位17 位(≤16B)/ 21 位(>16B)
DLC 编码0~8 有效0~15 映射到 0~64 字节
控制位无 FDF/BRS/ESIFDF、BRS、ESI
典型应用车身控制、简单信号UDS 诊断、OTA、域控大数据

四、典型应用场景与常见误区

在RH850平台上,CAN FD常用于三类场景:UDS诊断刷写(0x36 TransferData 一次传64字节)、域控制器间大数据同步(传感器融合、地图数据)、标定与测量(XCP on CAN FD)。

实操建议:在RH850的CAN FD初始化中,先配置标称位速率(如500 kbps,采样点80%),再配置数据位速率(如2 Mbps,采样点75%),并开启TDC(Transmitter Delay Compensation)以补偿收发器环路延迟。
/* RH850 CAN FD 位速率配置示例(伪代码) */
CANFD0.NBTP  = 0x0A0B;   /* 标称段:500 kbps,采样点 80% */
CANFD0.DBTP  = 0x0506;   /* 数据段:2 Mbps,采样点 75% */
CANFD0.TDCT  = 0x0010;   /* 开启 TDC,补偿收发器延迟 */
CANFD0.GCFG  = 0x0001;   /* 使能 FD 模式,DLC 扩展 */
常见误区:认为"CAN FD节点可以随意与经典CAN节点混挂"。实际上,经典CAN节点收到FD帧的BRS位会判为错误,可能持续发送错误帧导致总线瘫痪。正确做法是全网统一FD,或通过网关隔离。

复盘要点:CAN FD的价值不在"更快",而在"更高效地承载大数据"。理解帧结构差异、位速率切换点、CRC改进与拓扑约束,是后续在RH850上实现UDS over CAN FD与Bootloader刷写的基础。