CAN标准中的时钟容差修正建议
时间:01-08
来源:
点击:
CAN是事件触发的通信协议,它用标识符(ID)的无损仲裁方法调度不同消息的传送。仲裁依靠的是位值,因此位值采样准确性很重要。为在所有节点得到相同的准确的采样,位时间的同步就是关键。正常传送中也要克服节点间时钟差造成的采样点变动,减少读出时的错误。但是位时间能否实现同步,取决于时钟的偏差。为此CAN标准规定了时钟容差的计算方法。现在发现,标准规定的计算公式不够用,它会影响应用的可靠性。特别是汽车工业常用的标准儿939是基于CAN 2.0B的,时钟容差对CAN 2.OB的影响较大,因此对此加以修正非常重要。对于标准的完整理解不仅与应用有直接关系,对进一步提高CAN性能也会有新的启示。
1 ISO 1 1898-1:2003关于时钟容差的规定
ISO 11898-1:2003第12.4.1.2款规定位时间单位为Tq,它是可组态的参数。1位共有NTQ(8~25)个Tq,Tq由振荡器分频而得,受硬件的振荡器与分频器资源所限,其选择有限。每1位分成4段:同步段S(Tq)、传输段Pr(Tq~8Tq)、缓冲1段P1(Tq~8Tq)和缓冲2段 P2(Tq~8 Tq),它们都是可组态的参数。位值的采样在P1与P2的分界处。CAN将同步分为2种:硬同步和重同步。总线空闲时开始新帧SOF的隐位到显位的跳变沿 (R/D跳变沿)引起硬同步,立即复位本地位时间到S段。在帧传送中的R/D跳变沿引起重同步,跳变沿落在上一位采样后的P2段时将该P2缩短,跳变沿落在S后时加长本位P1的长度,此时本地位时间修正的最大绝对量不超过SJW(重同步跳转宽度)的值。SJW是1个组态参数,在Tq~4 Tq之间。关于CAN位时间与同步的一些较为深入的探讨可参见参考文献。
在CAN标准中,采用振荡器容差这一术语来代表时钟容差。实际实现时,有的实现方案用振荡器加锁相环构成时钟,此时CAN的时钟偏差就由2部分构成。为了与标准文字一致,本文不把时钟容差与振荡器容差严格区分。将振荡器的频率相对误差表示为△,时,按ISO11898-1的12.4.2.5款规定,它的约束有2条。
①正常传送时由于CAN填充位规则,重同步的距离最多为10位。为同步正确,有:
(2×△f)×10×NBT<SJW (1)
其中,NBT为标称位时间。
②出错时,有错的节点要发报错帧。为了区分是本地错还是全局错,要考察发出主动报错标志后的第7位是否还是显位。由于出错前可能有6位显位,所以2个同步段S相隔13位。容许的差小于缓冲段长:
(2×△f)×(13×NBT-P2)<MIN(P1,P2) (2)
在2个不等式中选最小者为本应用的时钟容差。例如Tbit=1 000 ns,总线长20 m,收发器的延迟为150 ns时,整个传输延迟为Tprop=500 ns,取Tq=125 ns,算出Pr=4,P1=1,P2=2,SJW=1,NBT=8。由上述二式算出的△f分别为0.006 25和0.004 90,取其中小者0.004 90,即接近0.5%。
2 发送器时钟同步中产生的问题
CAN总线具有显位优先于隐位的特性,即当总线上有多个节点同时发送时,只要有1个节点发的是显位,总线上最终的结果就是显位。所以当2个相距有一定距离的节点同时发送显位时,由于传输需要时间,在一个节点处看不到另一个节点的R/D跳变沿(如图1所示,e为同步的相位差),因为总线的电平早已被该节点置为显位。
在这种情况下,节点A、B即使时钟有差别,也无法建立同步。设A比B快,仅当节点A的同步段S比节点B的同步段S越来越超前,且其超前量大于传输时间时,节点B才能看见A的R/D跳变沿,B才会开始进行同步。
现在分析2个发送器在仲裁区的同步问题。假定它们看到总线空闲并同时开始发送,它们的ID只是最后1位不同。有文献介绍发送节点同步过程时,假定总线空闲时有1个发送器领先于其他发送器,且超过Pr/2段发送的情况。由于事件发生的随机性,这只是特例。对于定时消息,它们由本节点的时钟触发。但本地时钟问并无同步,它们之间又存在频率差异,所以定时消息规定应发出的时间的相位差会周期性地变化。1个发送器领先所有其他发送器的情况也只是特例。在本文假设下,由于在ID前各位出现的R/D跳变沿均未被对方看见,它们之间没有同步关系。到最后1位,假定时钟慢的节点有显位而时钟快的节点有隐位,并假定ID前 1位是隐位,那么慢节点的R/D跳变沿将可能被快的节点看到。但是,它将有很大的相位差,可能已经超过了重同步跳转宽度SJW,从而无法使该快节点正确同步,便会导致采样在慢节点送来的电平尚未稳定的地方产生位值读错。
在CAN 2.0B的29位ID的最后1位,即仲裁域的第31位,由于可能还有7个填充位,即已有37位未进行同步。为了采样正确,未同步时快慢发送节点同步段的差应小于重同步跳转宽度SJW:
(2×△f)×37×NBT≤SJW (3)
以前述例子的数据,NBT=8,SJW=1,得△f≤0.001 68,减小了很多。
由于接近快节点的接收器均能见到快节点的R/D跳变沿,它们已按快节点进行了同步。最后,它们要按未曾同步的慢节点进行同步,同样会遇到相位差很大时的同步问题。如果ID最后第2位已是显位,那么快节点将见不到慢节点的跳变沿,因为此时并不存在可供同步的R/D跳变沿,在仲裁域内快节点以及附近已与它同步的接收器将完全无法与慢节点同步。它们将按自己原来的相位及位时间进行采样。最坏的情况下,要再经过7位可以见到慢节点的下一个R/D跳变沿,如图2所示。
1 ISO 1 1898-1:2003关于时钟容差的规定
ISO 11898-1:2003第12.4.1.2款规定位时间单位为Tq,它是可组态的参数。1位共有NTQ(8~25)个Tq,Tq由振荡器分频而得,受硬件的振荡器与分频器资源所限,其选择有限。每1位分成4段:同步段S(Tq)、传输段Pr(Tq~8Tq)、缓冲1段P1(Tq~8Tq)和缓冲2段 P2(Tq~8 Tq),它们都是可组态的参数。位值的采样在P1与P2的分界处。CAN将同步分为2种:硬同步和重同步。总线空闲时开始新帧SOF的隐位到显位的跳变沿 (R/D跳变沿)引起硬同步,立即复位本地位时间到S段。在帧传送中的R/D跳变沿引起重同步,跳变沿落在上一位采样后的P2段时将该P2缩短,跳变沿落在S后时加长本位P1的长度,此时本地位时间修正的最大绝对量不超过SJW(重同步跳转宽度)的值。SJW是1个组态参数,在Tq~4 Tq之间。关于CAN位时间与同步的一些较为深入的探讨可参见参考文献。
在CAN标准中,采用振荡器容差这一术语来代表时钟容差。实际实现时,有的实现方案用振荡器加锁相环构成时钟,此时CAN的时钟偏差就由2部分构成。为了与标准文字一致,本文不把时钟容差与振荡器容差严格区分。将振荡器的频率相对误差表示为△,时,按ISO11898-1的12.4.2.5款规定,它的约束有2条。
①正常传送时由于CAN填充位规则,重同步的距离最多为10位。为同步正确,有:
(2×△f)×10×NBT<SJW (1)
其中,NBT为标称位时间。
②出错时,有错的节点要发报错帧。为了区分是本地错还是全局错,要考察发出主动报错标志后的第7位是否还是显位。由于出错前可能有6位显位,所以2个同步段S相隔13位。容许的差小于缓冲段长:
(2×△f)×(13×NBT-P2)<MIN(P1,P2) (2)
在2个不等式中选最小者为本应用的时钟容差。例如Tbit=1 000 ns,总线长20 m,收发器的延迟为150 ns时,整个传输延迟为Tprop=500 ns,取Tq=125 ns,算出Pr=4,P1=1,P2=2,SJW=1,NBT=8。由上述二式算出的△f分别为0.006 25和0.004 90,取其中小者0.004 90,即接近0.5%。
2 发送器时钟同步中产生的问题
CAN总线具有显位优先于隐位的特性,即当总线上有多个节点同时发送时,只要有1个节点发的是显位,总线上最终的结果就是显位。所以当2个相距有一定距离的节点同时发送显位时,由于传输需要时间,在一个节点处看不到另一个节点的R/D跳变沿(如图1所示,e为同步的相位差),因为总线的电平早已被该节点置为显位。
在这种情况下,节点A、B即使时钟有差别,也无法建立同步。设A比B快,仅当节点A的同步段S比节点B的同步段S越来越超前,且其超前量大于传输时间时,节点B才能看见A的R/D跳变沿,B才会开始进行同步。
现在分析2个发送器在仲裁区的同步问题。假定它们看到总线空闲并同时开始发送,它们的ID只是最后1位不同。有文献介绍发送节点同步过程时,假定总线空闲时有1个发送器领先于其他发送器,且超过Pr/2段发送的情况。由于事件发生的随机性,这只是特例。对于定时消息,它们由本节点的时钟触发。但本地时钟问并无同步,它们之间又存在频率差异,所以定时消息规定应发出的时间的相位差会周期性地变化。1个发送器领先所有其他发送器的情况也只是特例。在本文假设下,由于在ID前各位出现的R/D跳变沿均未被对方看见,它们之间没有同步关系。到最后1位,假定时钟慢的节点有显位而时钟快的节点有隐位,并假定ID前 1位是隐位,那么慢节点的R/D跳变沿将可能被快的节点看到。但是,它将有很大的相位差,可能已经超过了重同步跳转宽度SJW,从而无法使该快节点正确同步,便会导致采样在慢节点送来的电平尚未稳定的地方产生位值读错。
在CAN 2.0B的29位ID的最后1位,即仲裁域的第31位,由于可能还有7个填充位,即已有37位未进行同步。为了采样正确,未同步时快慢发送节点同步段的差应小于重同步跳转宽度SJW:
(2×△f)×37×NBT≤SJW (3)
以前述例子的数据,NBT=8,SJW=1,得△f≤0.001 68,减小了很多。
由于接近快节点的接收器均能见到快节点的R/D跳变沿,它们已按快节点进行了同步。最后,它们要按未曾同步的慢节点进行同步,同样会遇到相位差很大时的同步问题。如果ID最后第2位已是显位,那么快节点将见不到慢节点的跳变沿,因为此时并不存在可供同步的R/D跳变沿,在仲裁域内快节点以及附近已与它同步的接收器将完全无法与慢节点同步。它们将按自己原来的相位及位时间进行采样。最坏的情况下,要再经过7位可以见到慢节点的下一个R/D跳变沿,如图2所示。