张健
摘要:在CAN总线中,位定时有一点小错误就会导致总线性能严重下降。虽然在许多情况下,位同步会修补由于位定时设置不当而产生的错误,但不能完全避免出错情况,并且在遇到两个或多个CAN节点同时发送的情况时,错误的采样点会使节点启动错误认可标志,使节点不能赢得总线上的任何活动。因此要分析、解决这样的错误就需要对CAN总线位定时中的位同步和CAN节点的工作过程有一个深入的了解。本文描述了CAN总线位同步的运行规则以及如何对位定时的参数进行设置。
关键词:总线 位定时 同步 延迟
1. 前言
CAN总线的数据传输速率最高可达1Mbit/s,通常用石英晶振作为时钟发生器,可以独立进行位定时的参数设置,这样即使网络中节点之间的时钟周期不一样仍可获得相同的位速率。但网络中晶振的频率不是绝对稳定的,温度、电压以及器件的异常都会导致微小的差别,但只要将其稳定在振荡器容差范围之内,总线上的节点会通过重同步进行弥补。
CAN总线的一个位时间可以分成四个部分:同步段,传播段,相位段1和相位段2,每段的时间份额的数目都是可以编程控制的,而时间份额的大小tq由系统时钟tsys和波特率预分频值BRP决定:tq=BRP/tsys。如图1:
图1
参数范围说明 分频值 [1…….32] 规定时间份额的长度 同步段 1tq 固定长度,同步总线节点 传播时间段 [1…….8]tq 补偿总线物理延迟时间 相位缓冲段1 [1…….8]tq 重同步时可以暂时延长 相位缓冲段2 [1…….8]tq 重同步时可以暂时缩短 同步跳转宽度 [1…….4]tq 长度小于相位缓冲段表1:位时间的参数
2.同步段
(1)同步段用于同步总线上的各个节点,在此段内期望有一个跳变沿出现。如果跳变沿出现在同步段之外,那么沿与同步段之间的长度叫做沿相位误差。采样点位于相位缓冲段1的末尾和相位缓冲段2开始处。
(2)传播时间段用于补偿总线上信号传播时间和电子控制设备内部的延迟时间。因此,要实现与位流发送节点的同步,接收节点必须移相。CAN总线非破坏性仲裁规定,发送位流的总线节点必须能够收到同步于位流的CAN总线节点发送的显性位。图2显示了两个总线节点的相移和传播段时间。
图2
在这个例子里,节点A和节点B都是发送节点,因此总线要对两个节点进行仲裁。节点A比节点B提前发送不到1个位时间,当节点B收到延迟后的跳变沿时,B节点要同步于A节点,对位时间进行移相。移相后节点B发送的标识号有较高优先级,因此节点B赢得总线的使用权,如图节点B发送的显性位经过延迟后到达节点A。
因为存在振荡器容差,节点A的采样点在相位缓冲段的位置是不能确定的,所以节点B发送的位流必须在A节点的相位缓冲段1开始之前到达,因此传播时间段的长度将受到这个条件的限制。如果节点B发送一个隐性到显性的跳变沿,节点A在相位缓冲段1开始之后收到,那么节点A就有可能采样到一个隐性位,导致产生一个位错误。这样的错误只有当两个节点都参与总线仲裁,且总线比较长,节点的振荡器频率相差较大时才会出现。另外,CAN总线还提供一种采样方式,即采样3次,在相位缓冲段首尾以及相位缓冲段1、2的交界处各采样一次,并通过位定时逻辑确定位的正确值,这样就会要求额外的一个时间份额的延迟,因而需要更长的传播时间段。
3.相位缓冲段和同步
同步跳转宽度规定了重同步发生时采样点在相位缓冲段内移动的距离。相位缓冲段和同步跳转宽度用来补偿振荡器容差,发生重同步时相位缓冲段会被加长或缩短。当总线发生从隐性到显性跳变时,会产生同步,其作用是控制沿与采样点之间的距离。总线节点在每个时间份额都会采样总线,并与前一次采样值进行比较,如果前一次采样值是隐性而当前的采样值是显性,那么总线节点就会发生一次同步。如果跳变沿出现在同步段的前面,沿相位错误就是负的,反之就是正的。
在帧起始时,总线会进行一次硬同步。硬同步后,位时间由每个位定时逻辑单元在同步段之后重新启动,强迫引起硬同步的边沿处于重新启动位时间的同步段内。
当引起重同步的沿相位错误幅值小于或等于同步跳转宽度的数值时,重同步导致位时间的延长或缩短,使采样点处于适当的位置。当沿相位误差幅值大于重同步跳转宽度时,如果相位误差为正,相位缓冲段1延长数值等于同步跳转宽度;如果相位误差为负,相位缓冲段2缩短数值等于同步跳转宽度。
通过同步,总线可以有效地滤除长度小于传播段与相位缓冲段1长度之和的噪声。但在一个位时间里只允许一种同步发生。除了噪声以外,绝大多数的同步都是由仲裁引起的,总线上的所有节点都要同步于最先开始发送的节点,但是由于总线延迟,节点的同步不可能达到理想的要求。如果最先发送的节点没有赢得总线仲裁,那么所有的接收节点都要重新同步于获得总线仲裁的节点。应答场的情况也是如此,总线上的接收节点都要同步于最先发送显性位的节点。但是当发送节点与接收节点的时钟周期不同并经过多次同步累加起来,振荡器容差会导致同步在仲裁场之后出现。图3列举了沿相位误差为正负两种情况,中间的图作为参考。说明了相位缓冲段如何弥补沿相位错误。
图3
在第一个例子里,同步段末端出现了一个隐性到显性的跳变沿,那么相位缓冲段1将加长,使得跳变沿到采样点之间的长度与没有跳变沿出现时同步段到采样点之间的长度相等。由于沿相位误差小于同步跳转宽度,因此重同步补偿了沿相位误差,在下一个正常位时间到来时,显性到隐性的跳变沿就出现在同步段。在第二个例子中,一个隐性到显性的跳变沿出现在相位缓冲段2,因此相位缓冲段2会缩短,并且同步段会被省略, 这是因为当节点同步于边沿时,节点无法确定处于相位缓冲段2的同步段的起始位置。由于沿相位误差的幅值小于同步跳转宽度,所以重同步取得的效果与第一个例子是一样的。需要注意的是,相位缓冲段只是暂时的被加长或者缩短,在下一个位时间,缓冲段又会恢复预设值。图4显示了同步是怎样消除显性噪声干扰的。列举的两个例子中,噪声都是在传播段的末尾开始,长度为传播时间段与相位缓冲段1的和。
图4
在第一个例子里,同步跳转宽度大于或者等于噪声跳变沿的相位误差,因此采样点适当移动,采样值为隐性位,消除了噪声。在第二个例子中,同步跳转宽度小于沿相位误差,采样点移动的长度不够,显性值被当作总线的真实值采样。
4. 振荡器容差范围
影响振荡器容差范围的因素有相位缓冲段1、相位缓冲段2、同步跳转宽度和位时间。最大容差范围需要满足下面两个条件:
I:df<= I I:df<=
需要注意的是同步跳转宽度不能大于相位缓冲段1和2中的任何一个。
5. CAN控制器的配置与延迟时间的计算
配置CAN控制器最关键的部分就是对两个寄存器的设置。寄存器0决定传播时间段、相位缓冲段1和相位缓冲段2;寄存器2决定同步跳转宽度和分频值。在位定时寄存器中,TSEG1,TSEG2,SJW和BRP设定的值要比其功能值小1,因此设定范围是[0…..N-1]而不是[1…..N]。所以位时间可以由 [TSEG1+TSEG2+3]tq或者[同步段+传播段+相位缓冲段1+相位缓冲段2]tq得到。
当总线延迟时间很小时,计算节点的输入延迟和输出延迟就要求很精确。在位定时的设置中,只有节点的输入和输出延迟需要知道。我们可以通过下述方法计算延迟时间。在总线上输入一个显性脉冲,长度为一个位时间的长度,处于空闲状态的错误激活节点将认为是帧起始因而会产生一次硬同步,6个隐性位过后,总线节点会发现一个填充位错误,发出错误激活标志。我们可以得到从发送显性脉冲开始到接收错误激活标志结束的这段时间t1。t1包括节点输入延迟和输出延迟、同步延迟以及多个位时间。同步延迟由时钟振荡器决定。在位时间里,时钟同步延迟由同步段补偿,因此在计算延迟时间时,要通过调节时钟振荡器的相位来消除它。为了获得较为精确的延迟时间,我们必须对时钟振荡器的相位以及总线节点进行调整以获得最小的t1。因此,输入输出延迟时间t2=min(t1)─7o(正常位时间)。
6.小结
位时间的范围是8~25个时间份额,时间份额的大小由分频值确定。我们首先要确定的是传播时间段。大小由总线延迟时间决定。在一个可以扩展的总线结构中,最大节点延迟和总线最大长度必须考虑。一般情况下,每米延迟为5.5ns。
同步段的长度为1个时间份额。因此相位缓冲段的长度为(时间份额总数-1-传播时间段时间份额数)tq,如果剩余的份额数是偶数,那么应有相位缓冲段1=相位缓冲段2,或者相位缓冲段2=相位缓冲段1+1。而且,相位缓冲段2的最小长度不应小于控制器的信息处理时间,通常情况下,应该大于2个时间份额。
同步跳转宽度的最大值、相位缓冲段1的最小值都是4个时间份额。
如果有多个配置可以选择,那么应该选择具有最高振荡器容差范围的参数配置。如果总线上有不同时钟的节点,那么在计算传播时间段时,应该以具有最大延迟的那个节点为准。振荡器容差范围的确定应以对振荡器容差范围要求最高的节点为准。
参考文献:
邬宽明. CAN总线原理和应用系统设计.北京航空航天大学出版社,1995.1
Florian Hartwich. The Configration of the CAN Bit Timming PHILIPS Semiconductors 公司. CAN SPECIFICATION, 1991,9