3. CAN与CAN FD协议基础

CAN FD(Flexible Data-rate)并不是“更快的CAN”这么简单,它在保留经典CAN仲裁机制的同时,对帧格式、数据场速率和校验方式做了系统性扩展。理解这些差异,是后续在AURIX TC3xx上配置MCMCAN模块、分析总线负载和排查通信故障的前提。

一、帧格式:从经典CAN到CAN FD

经典CAN帧由帧起始、仲裁场、控制场、数据场、CRC场、应答场和帧结束组成。CAN FD在此基础上引入了三个关键变化:控制场中的FDF位标识FD帧,BRS位控制速率切换,ESI位指示发送节点是错误主动还是错误被动;数据场长度由DLC编码扩展到最大64字节;CRC场根据数据长度采用17位或21位多项式,并加入填充位计数校验。

经典CAN的DLC仅支持0~8字节,而CAN FD的DLC编码可表示12、16、20、24、32、48、64字节。这意味着同一帧可以承载更多应用层数据,减少协议开销和总线占用。但要注意,DLC编码并非线性,配置时需按标准表映射,不能简单按字节数直接赋值。

经典CAN与CAN FD帧结构对比 经典CAN帧 SOF 仲裁场 11/29位 控制场 数据场 0~8B CRC 15位 ACK EOF CAN FD帧 SOF 仲裁场 11/29位 控制场 FDF BRS ESI DLC 数据场 0~64B CRC 17/21位 +填充计数 ACK EOF BRS=1 速率切换 位定时与采样点 SYNC_SEG PROP_SEG PHASE_SEG1 PHASE_SEG2 采样点

二、仲裁机制:非破坏性逐位仲裁

CAN总线采用“线与”逻辑,显性位(逻辑0)会覆盖隐性位(逻辑1)。当多个节点同时发送时,每个节点在发送仲裁场的同时回读总线电平。若某节点发送隐性位却读到显性位,说明有更高优先级报文正在竞争,该节点立即退出仲裁,转为接收状态,且不会破坏已获胜报文的传输。这就是非破坏性逐位仲裁。

仲裁场包含标识符和RTR位。标识符数值越小,优先级越高。CAN FD中,FDF位在仲裁场之后,因此经典CAN帧和FD帧可以在同一总线上共存,但FD帧的FDF为隐性,经典帧为显性,这会影响仲裁结果。工程中若混用经典CAN和CAN FD节点,必须确认所有节点对FDF位的处理一致,否则可能出现仲裁异常。

三、位定时与采样点

位定时由SYNC_SEG、PROP_SEG、PHASE_SEG1和PHASE_SEG2组成,单位为时间份额Tq。采样点位于PHASE_SEG1结束处,通常建议设置在75%~80%位置。CAN FD在数据段使用更短的位时间,因此采样点配置需要分别针对仲裁段和数据段设置。

在AURIX TC3xx的MCMCAN模块中,位定时通过NBTP和DBTP寄存器分别配置仲裁段和数据段。典型配置如下:

/* 仲裁段:500 kbps,采样点80% */
NBTP = (1 << 16) | (2 << 8) | 1;   // SJW=1, TSEG2=2, TSEG1=1
/* 数据段:2 Mbps,采样点75% */
DBTP = (1 << 16) | (3 << 8) | 2;   // SJW=1, TSEG2=3, TSEG1=2
/* 注意:实际值需结合fCAN时钟和预分频计算 */
采样点不是越高越好。采样点过晚,容易受相位误差影响;采样点过早,则对传播延迟和晶振偏差的容忍度下降。建议用示波器或CAN分析仪实测波形,确认采样点落在位时间稳定区域。

四、数据场速率切换与CRC改进

CAN FD的核心优势在于数据段速率切换。BRS位为隐性时,从仲裁段结束后切换到数据段位速率;CRC场结束后再切回仲裁段速率。这样既保证了仲裁阶段的兼容性和抗干扰能力,又提升了数据载荷的传输效率。

CRC方面,经典CAN使用15位CRC,CAN FD根据数据长度使用17位或21位CRC,并引入填充位计数器。发送端将填充位计数与CRC校验值一起发送,接收端重新计算并比对。这一改进显著降低了长帧在填充位翻转时的漏检概率。

特性 经典CAN CAN FD
数据场长度 0~8字节 0~64字节
速率切换 不支持 BRS位控制
CRC 15位 17位/21位 + 填充计数
帧格式标识 无 FDF位
错误状态指示 无 ESI位
仲裁机制 非破坏性逐位仲裁 相同,兼容经典帧

五、典型误区与复盘

  • 误区一:所有节点都支持CAN FD即可随意混用。实际上,若总线上存在经典CAN节点,FD帧的FDF位可能被误判,导致仲裁失败或错误帧。混用前需确认节点兼容性。
  • 误区二:数据段速率越高越好。速率越高,位时间越短,对收发器、线束和终端匹配要求越高。2 Mbps以上建议使用专用CAN FD收发器,并控制支线长度。
  • 误区三:忽略采样点配置。仲裁段和数据段采样点需分别优化,否则高速数据段误码率会明显上升。
  • 误区四:DLC直接按字节数填写。CAN FD的DLC编码是非线性的,必须按标准映射表配置,否则数据长度错误。
在AURIX TC3xx上调试CAN FD时,建议先用回环模式验证位定时和DLC映射,再接入真实总线。若出现频繁错误帧,优先检查采样点、终端电阻和BRS切换时序,而不是盲目降低速率。

掌握帧格式、仲裁、位定时、速率切换和CRC改进这五个要点后,就能在AURIX MCMCAN模块中正确配置CAN FD通信,并为后续总线负载分析和故障排查打下基础。