CAN FD 介绍(转载)
CAN FD 基础知识
随着车辆ECU的数量不断增多,总线上传输的报文数量也越来越多,而在传统CAN网络中,每帧报文只能携带8个字节的数据,CAN总线最大只能支持1Mb/s的传输速率,为了增加CAN总线的利用率,在CAN的基础上推出了CAN FD(Flexible Data-rate)标准。
CAN FD 相较于传统CAN,支持更高的传输数率,并且支持变速功能,即在仲裁段使用较低的传输数率进行总线仲裁,赢得仲裁后,再以高速率传输数据段中的数据,最高支持8Mb/s的传输速率,CAN FD的数据场长度也得到了扩充,一次最大可传输64个字节。
在硬件方面的改动相对较小,若是ECU自身的CAN控制器与CAN收发器支持CAN FD功能,硬件方面则不需要作任何修改。
在通信协议方面发生了一定的变动,CAN FD消息帧包括CAN FD标准帧和CAN FD扩展帧,取消了远程帧功能。
CAN FD消息帧
CANFD 标准帧格式:
CANFD 扩展帧格式
前言
本文主要介绍实际开发中与 CAN FD 波特率参数相关的配置要点。在使用标准 CAN 时,由于通信速率较低,只需确保采样点配置合理,通常不会遇到明显问题。然而在切换至 CAN FD 后,尽管在使用单独的 CAN 卡进行通信测试时一切正常,但在整车网络测试或 HIL 台架(包含多个 CAN 节点)环境下却频繁出现错误帧。在错误帧较多的情况下,可能导致总线通信完全中断,无法发送任何报文。
CAN 波特率基础知识
CAN 位时间的 4 个段
根据 CAN 协议规范,每一个 CAN 位时间(bit time)都被划分为 4 个连续且不重叠的时间段,每个段由若干个时间量化单位(Tq,Time Quantum)构成:
段名 | 中文名 | 作用说明 |
---|---|---|
Sync_Seg | 同步段 | 用于对节点进行位同步(bit synchronization),它 总是固定为 1 个 Tq。理想情况下,这个段内应该检测到信号的边沿(如下降沿),以实现对所有节点的时钟对齐。 |
Prop_Seg | 传播延迟段 | 补偿 CAN 网络中从发送节点到接收节点的传播延迟,包括线路延迟、收发器延迟等。 |
Phase_Seg1 | 相位缓冲段 1 | 用于补偿节点之间的相位差(时钟偏移),也用于重同步。可以通过位定时逻辑来调整其长度以提前或延迟采样点。 |
Phase_Seg2 | 相位缓冲段 2 | 与 Phase_Seg1 类似,也用于相位调整和同步偏差补偿,主要是 调整采样点之后的时间,不能比 Phase_Seg1 短(或必须满足一定规则,取决于实现)。 |
CAN 波特率
CAN 的波特率表示每秒传输的位数,单位是 bps(bit per second)。它取决于两个参数:
- f_CAN(分频后),CAN 时钟频率(分频后) :CAN 控制器的输入时钟,一般是晶振频率或分频后的频率。
- Tq(total),总 Tq 数 :即一个 bit 时间包含的时间量子(Tq)个数。
公式如下:
其中:
CAN 采样点
采样点是在每个位中对总线电平进行采样的时间点,采样点的位置在 Phase_Seg1 结束、Phase_Seg2开始。
采样点位置计算公式:
常见波特率和推荐采样点
波特率 | 推荐采样点位置 |
---|---|
125 kbps | 87.5% |
250 kbps | 87.5% |
500 kbps | 80–87.5% |
1 Mbps | 75–80% |
Tips:波特率越高,采样点越靠前(比例越小) ,以保证采样更靠近信号稳定期。Tq 越多,波特率越低,采样越精细,抗干扰能力越强。
CAN 进阶概念
RJW 概念
当 CAN 节点检测到位边沿(一般是从隐形位变为显性位)时,会判断其本地时钟与实际信号的相位是否一致,如果不一致,就需要重同步,通过调整 Phase_Seg1 的长度来赶上正确节奏。RJW(Resynchronization Jump Width ,重同步跳转宽度)是Phase_Seg1 能被缩短或延长的最大数量(单位:Tq)。
TDC 概念
TDC(Transmitter Delay Compensation,发送延迟补偿),为解决 CAN FD 在数据阶段(尤其是高速数据阶段,比如2Mbps、5Mbps甚至更高速)时,由于节点内部硬件产生的发送延迟问题。TDC 就是用来动态补偿这种硬件引入的延迟,调整采样点,保证采样准确。
TDC 有两种模式:
- Automatic(自动测量延迟,推荐)
- Manual(手动设置延迟时间,比如配置一个固定 TDCO)
SSP 概念
在 CAN FD 数据阶段,波特率提升后,除了普通采样点,还会根据延迟补偿之后,设定一个新的采样点,叫SSP(Secondary Sample Point,第二采样点)。SSP 是经过 TDC 和 TDCO 补偿之后,最终确定的采样位置。
CAN 波特率配置参数
确定 Tq
根据波特率确定 Tq(total)
根据采样点确定 Phase_Seg2
根据传输延时确定 Prop_Seg
假设总线长 10 米,每米线路传输延时大概 5ns,收发器延迟约 200ns
总传播延迟 ≈ 10m × 5ns + 200ns = 250ns
最后向上取整,计算PropSeg的长度。
计算 Phase_Seg1
通常同步段长度为 1,CAN 模块无法配置同步段长度。
确定 RJW
RJW 设置太小会导致不能及时调整,太大会导致过度同步。
TDCO 配置
TDCO(Delay Compensation Offset):如果 TDC 是手动模式,需要自己填一个固定补偿偏移(可通过逻辑分析仪测量 CAN TX 到 RX 回读的延时)。
手动 TDC:
自动 TDC:
注意:以上计算 TDCO 的单位是Tq个数,部分单片机 TDCO 配置的单位是未分频前的时钟个数,所以结果还需乘上分频系数。