位时序基础概念
大家好,今天我们聊聊CAN FD的位时序。嗯,这部分听起来有点枯燥,但它确实是咱们做位时序调整的根基。说白了,你要是搞不清楚一个位是怎么被切开的,后面那些降低错误率的技巧基本就是空中楼阁。
我记得我刚入行那会儿,总觉得这东西是芯片厂家该操心的,自己只管发数据就行。结果呢?有一次项目现场,总线死活不稳定,CRC错误报个不停,我折腾了两天才发现就是位时序参数没配对。从那以后,我老实了——基础概念还是得吃透。
位时间(Bit Time)
一个CAN FD位在总线上持续的时间长短,就叫位时间。它和波特率成反比。比如你设了1Mbps,那一个位的时间就是1微秒。
问题是,这一个微秒不是整块儿丢出去的。CAN协议很聪明——它把一个位又切成了好几段。为什么要这么切?你想想看,总线上那么多节点,时钟不可能完全一样。没有这些分段,节点根本没法在正确的位置采样数据。
我刚接触这个时觉得没必要,直到有一次我看到示波器上波形边沿和采样点完全错位,我才明白——嗯,分段是有道理的。
TQ(Time Quantum)
TQ是整个位时序的最小时间单位。它是由系统时钟分频得到的。
| 参数 | 说明 | 举个例子 |
|---|---|---|
| 系统时钟 | MCU或CAN控制器主频 | 40 MHz |
| BRP(波特率预分频器) | 决定一个TQ包含多少个时钟周期 | 设为2,则一个TQ = 2个时钟周期 |
| TQ长度 | 系统时钟周期 × BRP | 25 ns × 2 = 50 ns |
关键公式:位时间 = TQ个数 × TQ长度
一个位被分成多少个TQ,加上每个TQ多长,共同决定了你的波特率。
我个人的小习惯:尽量让一个位包含8到25个TQ。TQ太少,分辨率不够,调整余地小;TQ太多,又会引入额外的抖动。我一般取16到20个TQ,这是个比较舒服的范围。
四个段(Segments)
一个位时间被切成了四个部分。这四个段各有各的职责。
- 同步段(Sync_Seg)——长度固定为1个TQ。总线上所有节点在这里对齐边沿。说白了,这就是一个“大家看齐”的信号。
- 传播段(Prop_Seg)——用来补偿物理延迟。包括驱动延迟、总线传输延迟、接收器延迟。我在项目中遇到过,有些工程师为了省事把这段设得很小,结果高速率下信号根本传不过去。
- 相位缓冲段1(Phase_Seg1)——在采样点之前,用来吸收正相位误差。这个段可以延长。
- 相位缓冲段2(Phase_Seg2)——在采样点之后,用来吸收负相位误差。这个段可以缩短。
采样点就在Phase_Seg1结束的位置。为什么这个点这么重要?因为在这里,接收器去读总线电平。如果采样点位置不对,噪声刚好落在上面,或者信号还没稳定,那错误率马上就起来了。
用SVG来看位时序结构
我把一个CAN FD位的时序结构画成了示意图,方便你直观理解。
我之前踩过的坑:有一回我把Prop_Seg设得太小,结果在长线缆(10米以上)环境下,信号还没传到远端节点就采样了。Bus Off反复出现,排查了好久。后来我把Prop_Seg从2 TQ调整到5 TQ,立即稳定了。所以,传播段别省——要根据你的总线长度来算。
为什么这四段这么重要?
你想想看,总线上可能挂着十几个节点,每个节点的晶振都有微小的误差。有的跑得快一点,有的慢一点。如果没有相位缓冲段去“吞掉”这些误差,节点之间的时钟偏差会一点点累积,最终导致采样点偏移,读到错误的数据。
我记得有一次,一个客户反映他们的系统偶尔会出现错误帧,但不是每次都有。我建议他们检查采样点位置,结果发现默认配置下采样点只有50%的位置(TSeg1 = 8 TQ, TSegy2 = 8 TQ)。我们调整到85%左右(TSeg1 = 13 TQ, TSegy2 = 3 TQ),错误帧就很少出现了。
经验之谈:采样点建议放在75%–87.5%的位置。我个人喜欢85%往上一点。为什么?越往后采样,信号越稳定,抗干扰能力越强。但也不能太靠后,要给重同步留出余量。
四个物理段在实际中的作用
我们用一张表来总结这些段到底影响了什么。
| 段名称 | 作用 | 调整场景 |
|---|---|---|
| 同步段(Sync_Seg) | 固定1TQ,用于边沿检测 | 一般不动,如果要动,说明你整体配置可能有问题 |
| 传播段(Prop_Seg) | 补偿物理延迟 | 总线越长或速率越高,要相应增大 |
| 相位缓冲段1(Phase_Seg1) | 吸收正相位误差,影响采样点位置 | 增大可提高采样点百分比,但会减少Seg2的余量 |
| 相位缓冲段2(Phase_Seg2) | 吸收负相位误差,决定重同步能力 | 保持足够余量,不要压缩得太小 |
我个人习惯:拿到一个新项目,我第一件事就是把位时间拆成TQ,然后把采样点算出来。这个数值不对,后面所有的努力都可能白费。你想想看,如果采样点都偏了,那你调整再多的滤波器、再强的驱动,也解决不了根本问题。
好了,位时序的基础概念就讲到这儿。我们把同步段、传播段、相位缓冲段的定义和职责理清了。这些知识不会直接帮你把错误率降下来,但它们是后面所有调整动作的参照系。后面我们聊重同步机制和实际配置方法时,你会经常回头参考这一章的框架。