CAN总线的位定时与同步机制
CAN总线的位定时与同步机制
CAN时钟
CAN时钟是由系统时钟分频而来的一个长度值
CAN 的最小时间单位 Tq
Tq 为CAN时钟的一个周期,即 Tq = 1 / fcan
CAN的位时间
位时间 表示一个二进制位在总线上传输所需要的时间
- 一个位可分为4个时间段
- 同步段
- 传播段
- 相位缓冲段1
- 相位缓冲段2
- 每个段又由若干个Tg构成,这称为 位时序
- 波特率=1/位时间
1、位时序-同步段(Synchronization Segment)
功能:用于同步总线上的各个节点,多个连接在总线上的单元通过此段实现时序调整,同步进行接收和发送的工作
固定长度,1个时间份额。
2、位时序-传播段(Propagation Time Segment)
功能:用于补偿网络上的物理延迟的段
长度可编程(1…8个 Tq),应能保证为各延迟时间的和的两倍
- 延时时间的确认 –要求传播段时间为总线延时的两倍
3、位时序-相位缓冲段(Phase Buffer Segment)
相位缓冲段分为 相位缓冲段1 和 相位缓冲段2,两个相位缓冲段PBS1 和 PBS2 用于补偿总线上的边沿相位误差
长度可编程,不同的控制器,相位缓冲段 1 和相位缓冲段 2 的取值范围可能不完全一致。一般PBS1为1-8Tq,PBS2为2-8Tq。无特殊要求外,相位缓冲段1 和 相位缓冲段2 的 Tq 数相同;并且 PBS1 ≤ PBS2
通过重同步可以延长PBS1或缩短PBS2,加长或缩短的最大长度为 同步跳转宽度SJW
4、同步跳转宽度 SJW
因CAN总线没有时钟线而出现时钟频率偏差、传送延迟等,各单元有同步误差。
允许通过重同步对相位缓冲段1加长和相位缓冲段2缩短补偿此误差
SJW为补偿此误差的最大值,长度可以通过编程从1…4取值
因为 SJW的值 ≤ Min{PBS1,PBS2}
又因为 PBS1<PBS2
所以 SJW的取值范围是1…Min(PhaseSeg1,4)
5、采样点
为方便编程,很多CAN 模块将 传播段与相位缓冲段1 合并为一个时间段
采样点就是指在相位缓冲段1的末端进行总线状态的采样
采样点是CAN控制器读取总线电平,并解释各个比特的逻辑值的时间点
合适的采样点位置是CAN控制器正常通信的的保证
6、简单示例
CAN时钟10MHz,波特率1Mbps,总线驱动器的延迟为50ns,接收电路的延迟为30ns,总线线路(40m)的延迟为220ns。
CANFD 的位时间、发送延迟补偿和二次采样点
1、CANFD的位时间
CANFD 和 CAN相同,分为4个时间段,作用也相同
-同步段
-传播段
-相位缓冲段1
-相位缓冲段2
CANFD的仲裁域波特率通常为 500 Kbps,数据域波特率为 2 Mbps,以CAN时钟频率为 20M(即 Tq为 50ns) 为例:
仲裁场计算采样点:
对于仲裁场500k,传输一个bit位的时间1/500000s=2us,所以
2us/50ns=40个tq(即传输 1 bit 经历 40 Tq)
如果采样点设置为80%,则phase_seg2 = 40 - (sync_seg+prop_seg+phase_seg1)=40 - (40 * 80%)=40 - 32 = 8Tq
sync_seg 固定为 1Tq
phase_seg1 = phase_seg2 = 8Tq(未特殊说明,值一样)
prop_seg = 40 - sync_seg- phase_seg1 - phase_seg2 = 23Tq
在ET tresos中可以这样配置
数据场采样点计算:
对于数据场2Mkbs,传输一个bit位的时间1/2000000s=500ns,所以
500ns/50ns=10个tq(即传输 1 bit 经历 10 Tq)
如果采样点设置为80%,则phase_seg2 = 10 - (sync_seg+prop_seg+phase_seg1)=10 - (10 * 80%)=10 - 8 = 2Tq
sync_seg 固定为 1Tq
phase_seg1 = phase_seg2 = 2Tq(未特殊说明,值一样)
prop_seg = 40 - sync_seg- phase_seg1 - phase_seg2 = 5Tq
则对应在EB TRESOS中配置如下
2、CANFD的发送延迟补偿(TDC)
CAN控制器发送信号时,是经过收发器后发往CAN总线后,再经过收发器反馈总线信号。那么发送过程中,控制器发送位信号到接收位信号就不可避免地存在环路延迟。发送延迟时间的总和如下:
- CAN控制器内部产生TX信号到Tx引脚的传播延迟;
- Tx引脚到收发器TxD引脚的传播延迟;
- 收发器环路延迟TxD到RxD;
- 收发器RxD引脚到CAN控制器Rx引脚延迟;
- CAN控制器Rx引脚到控制器内部收到Rx信号的延迟
CAN协议中规定:发送方发送位时,需检测接收到的位与发送是否一致,若不一致则产生错误帧(位错误)。如果发送延迟过长,则将直接导致发送与接收位不一致而产生错误帧。
由于传统CAN协议规定最高波特率为1Mbps,即位宽1us,正常情况下,传输延迟不会超过位宽的采样点(当然具体延迟取决于收发器环路延迟、传输距离、传输线缆质量等),因此不会因为发送延迟而产生错误。
在CANFD中,数据段的波特率是比CAN更高的(BRS位为隐性时),此时波特率越高,位宽越小,在发送报文时发送延迟影响越大,越容易产生位错误。由于发送延迟无法避免,此时就需要一种机制来保证发送与接收的位对应上,以避免产生位错误。这种机制就是发送延迟补偿了。
TDC实际上就是在发送BRS位为隐性的CANFD报文时(BRS隐性即开启数据域波特率),在发送时延迟一定时间后,在第二采样点采样接收位,以正确采样到发送位对应的接收位。
3、二次采样点和发送延迟测量
当开启TDC后,控制器将自动测量Tx信号线上FDF位到r0位下降沿与Rx信号线上FDF位到r0位边沿的之间的延迟时间,如下图中所示,TDCV即为延迟时间。发送延迟测量的时间单位为CAN控制器时钟(TDC寄存器中一般对TDCV的值有限制,若超过寄存器最大位数,则发送延迟测量失败)。
不同于采样点,第二采样点在CAN FD控制器接收其他节点发送报文的过程中并不会起到任何作用。在达到延迟时间后,控制器此时需要采样接收位,该采样点我们称为第二采样点(SSP=Second Sample Point);第二采样点的作用,是在不改变传输延迟补偿的情况下,实现CAN FD在数据场的位错误检测要求。
Tssp = TDCV + TDCO
TDCV是接收到数据时的发送延迟时间,是当TDC使能的时候会自己自动计算的。
TDCO(TDC Offset)就是设置的正常采样点的时间。
一般TDCO设置与第一采样点一致,此外,ISO11898-1:2015中还对TDC做了一些规定:开启TDC后,数据段波特率的预分频值(DBRP)应设置为1或2;控制器实现TDC机制应能补偿至少两个位时间。
当CANFD数据域波特率大于1Mbps时,应开启TDC;
数据段波特率的预分频值(DBRP)建议设置为1或2;
第二采样点SSP=发送延迟测量值TD + Offset, 其中Offset设置与第一采样点一致或早1Tq。
总线同步
由于CAN上没有时钟线,采用的是异步串行通信,为保证报文接收节点能在正确的采样点采集到准确的电平,CAN总线需要进行同步,包括硬同步和重同步
同步规则:
- 一个位时间内只允许一种同步方式
- 任何一个“隐性”到“显性”的跳变都可用于同步
1、硬同步
硬同步发生在SOF(CAN的起始位)位,所有接收节点调整各自当前位的同步,调整宽度不限,使其位于发送的SOF内
2、重同步
重同步是指接收节点检测出除SOF位以外的其他位,通过调整位时序进行的同步调整
重同步会通过加长PBS1段,或缩短PBS2段来调整同步,以保证采样点的准确。
参考
- 【北汇信息】CAN总线基础培训视频 | CAN总线的位定时与同步机制
- CANfd 一次采样点和二次采样点:https://blog.csdn.net/jiushimanya/article/details/129354758