2. 采样点位置原理:位时间组成
采样点,说白了就是接收节点在什么时候“看一眼”总线电平,决定这一位是0还是1。位置偏了,误码率直线上升;位置对了,噪声、延迟、时钟偏差都能扛住。我刚开始接触CAN FD时,以为只要随便设个80%就完事,结果在测试台上被误码率狠狠教训了一回。
想理解采样点,就得先搞清楚CAN FD的一位时间到底由哪些段构成。CAN 2.0和CAN FD在仲裁段用相同的位时间结构,但数据段允许更短的位时间——段长度依然相同,只是时间基数变了。
2.1 位时间的四个段
一个完整的CAN FD位时间,被硬性拆成四个段:同步段(SS)、传播段(PROP)、相位缓冲段1(PS1)和相位缓冲段2(PS2)。采样点就卡在PS1和PS2之间。
| 段名称 | 英文缩写 | 典型时长(Tq) | 主要功能 |
|---|---|---|---|
| 同步段 | SS | 1 Tq | 检测边沿,硬同步的“锚点” |
| 传播段 | PROP | 1~8 Tq | 补偿物理传输延迟 |
| 相位缓冲段1 | PS1 | 1~8 Tq | 容忍时钟相位超前,可在重同步时缩短 |
| 相位缓冲段2 | PS2 | 1~8 Tq | 容忍时钟相位滞后,可在重同步时延长 |
总位时间 = SS + PROP + PS1 + PS2,单位是时间量子Tq。Tq由系统时钟分频得到,CAN FD数据段常用2~4个时钟周期做一个Tq,仲裁段则更宽松。
关键点:采样点位置 = (SS + PROP + PS1) / 总位时间 × 100%。我们配置的不是时间,而是这个百分比。
2.2 同步段:节奏的起点
同步段固定为1 Tq,不参与任何调整。它的任务就是“看到跳变沿就立刻开始计时”。硬件在SS结束时检测总线边沿,如果边沿落在SS内,就认为这一位同步了。
为什么非得留1 Tq?因为CAN总线是“线与”机制,多个节点同时发送时,显性位会覆盖隐性位,边沿可能被延迟。留出SS可以容忍边沿的微小偏移。
我记得有一次,一个同事把SS设为0,想着省一个Tq提高速率——结果整个网络一上电就报错,复位都救不回来。教训:SS动不得。
2.3 传播段:补偿物理延迟
传播段的存在,说白了就是给信号一个“来回跑”的时间。CAN报文从发送节点到接收节点,再经过接收节点反向传播到发送节点(用于位填充和应答),这段延迟必须被补偿掉。
传播段长度 = 2 × (总线物理延迟 + 收发器延迟 + 线缆延迟)。算一下:总线100米,信号速度约5 ns/m,来回就是1 μs。如果Tq=50 ns,就需要20个Tq。当然实际中收发器和隔离器还会加额外延迟,不能只看线长。
避坑建议:我曾经在一个多节点项目中,把PROP设成经验值2 Tq,结果远距离节点总是采样错误。后来实测总线最长路径的往返延迟,发现需要6 Tq。改完配置,误码率直接降到0。
2.4 相位缓冲段:容忍时钟偏差
这是整个位时间设计中最灵活的部分。PS1和PS2允许在重同步时被动态缩短或延长,相当于“弹性缓冲区”。
- PS1:当接收节点时钟比发送节点快时,采样点会左移(提前)。重同步机制会把PS1缩短,把采样点“拉回”正确位置。
- PS2:当接收节点时钟慢时,采样点右移(延后)。重同步机制延长PS2,把采样点重新对准。
PS1和PS2的总长度决定了系统能容忍多大的时钟偏差。公式:容忍度 = min(PS1, PS2) / (总位时间)。通常建议PS2≥PS1,因为相位滞后(时钟慢)是更常见的情况。
注意:不要把PS1或PS2设成0。如果PS1=0,采样点直接放在PROP之后,没有弹性空间,时钟抖一抖就崩。CAN FD标准要求PS1≥1 Tq,PS2≥1 Tq。
2.5 采样点位置与重同步
采样点位置就是“SS + PROP + PS1”占整位的比例。理想值是多少?我个人习惯取75%~87.5%之间。仲裁段建议靠后(接近87.5%),因为仲裁阶段需要更强的抗干扰能力;数据段可以稍微靠前(75%~80%),换取更高波特率。
重同步机制会影响采样点吗?会。当节点在SS之外检测到边沿时,启动重同步:如果边沿落在PS1,就缩短PS1让采样点左移;如果边沿落在PS2,就延长PS2让采样点右移。这个调整必须在一个位时间内完成,且调整量受SJW(同步跳转宽度)限制。
从图上可以清楚看到:SS固定1 Tq,PROP用来“等”信号跑完,PS1和PS2像个缓冲垫,采样点就卡在它们之间。如果采样点太靠前(PS1太小),信号还没稳定;太靠后(PS1太大),又容易被后续位干扰。
实战要点:你想想看,为什么CAN FD的采样点配置比CAN 2.0更敏感?因为数据段位时间短,同样1 Tq的偏差,在高速率下占比更大。所以FD网络中,必须先确定Tq长度,再精确计算各段Tq数。
最后说个我的习惯:在新平台调采样点时,我会先用示波器抓取CAN差分信号,观察最差情况下的信号建立时间,再反推需要的PROP长度。PS1和PS2则留出至少2 Tq余量。这样出来的配置,基本一次过。