如何解决FlexRay时钟同步的同向漂移
随着安全性要求的提高, CAN总线的带宽就嫌不足,消息送达的确定性不够。为此,一些汽车大厂和汽车电子的大厂成立了研发新型通信协议的联盟[1],目标是开发出称为FlexRay的协议,使它成为下一代车用通信协议的事实上的标准。2005年联盟推出了2.1版的规范,2009年完成3.0版规范,然后就结束了。现在公众还无法见到3.0版规范,但是据介绍,关键部分并无大的变化。
BMW车上在2006年已开始应用FlexRay,各大电子器件生产厂开始了批量生产FlexRay控制器。现在业界正处于争取FlexRay技术早日成熟的阶段,在系统设计、测试、标定等方面开始了大量投入。因此,任何涉及FlexRay协议的基础性问题的研究就格外重要,一旦有新的未发现的隐患披露,无疑会引起大的波动。
FlexRay是基于时间触发的协议,节点间的时间同步是它的关键,参考文献[5]是2.1版规范直接引用的主要原始资料的2009年修订版,其主要内容是有相位与频率校正时误差的静态传递分析,求出可以达到的最坏或最好状态下的簇内时钟差的精度。参考文献[5]指出了5种计算时的误差来源:采样的量化误差、微拍非均匀分布误差、传递延迟误差、整除误差和簇漂阻尼误差。由于时钟校正实际上是一个反馈控制问题,但以前的研究没有采用反馈控制的分析方法,没有考虑同步帧发送节点间的交互影响,以及传递延迟误差作为系统性误差的长期存在,得到的结论并不全面,这是本文要重点讨论的问题:由于系统性误差的持续存在,节点的相位差会单向漂移,与hoST的时钟越离越远,造成新的失误。参考文献[6]用软件仿真FlexRay时钟频率跳变或缓变时校正算法的有效性,它证实算法是收敛的,簇内时钟差校正后的精度与频率漂移率无关,跳变时有一个过渡过程,瞬态差可能超过精度范围。参考文献[7]分析了有拜占庭错时FlexRay容错中值相位校正算法的收敛性,非常有趣的是在推导过程中也得到了校正后cycle开始时间真值Us随延迟补偿不足而推迟的公式,它表明每校正一次存在的差,但是这种漂移并未受到FlexRay重视。参考文献[8]是对容错中值算法正确性的形式化证明,该算法就是FlexRay采用的算法,在分析每轮修正后的虚拟时钟与真实时钟差时,存在±ε的漂移,其中ε是传送延迟。这也证实了本文分析的问题早已存在,而FlexRay未对该问题的后果有所警觉。
1 FlexRay时钟的概念
FlexRay的时间单位是从大到小分级的:通信Cycle、通信宏拍(Macrotick,MT)和微拍(Microtick)。每一个节点中的振荡器,经过分频之后,产生一个本地的微拍时钟单位,它与位采样数及位采样时钟周期有关,所以节点中最小的时间单位是位采样时钟周期。各个节点可以有不同的微拍,簇内共同的时间单位是MT,每个节点组态时定义正常时每MT内本地微拍的个数。本地MT的生成有专门的逻辑,在每一本地微拍时执行一次,以实现本地MT的修正,以保证MT尽量全局一致,并且可以保证频率的校正均匀分布在整个cycle中。
2 FlexRay收发的同步
在收发过程中还有字节的位同步和帧开始同步来解决可能的抖动与延迟,它们极大地缓解了时钟同步的精度要求。
在以字节为单位的帧数据传送时,每个字节的开头有由"10"构成的字节开始序列(BSS),这个1/0跳变沿是位时间同步用的:发现跳变沿后位采样计数器就设为2,当位采样计数器=5时,zVotedVal的值就作为当时的位值。位采样计数器为9后溢出复位为1。显然,若因收发有时钟差,而要在下一个BSS的1处采错,需要差4个位采样时钟周期时才会发生。也就是说,时钟差5%才会发生。
FlexRay的同步帧是在静态段中传送的,一个时隙(slot)内实际上有很多空闲时间。首先,每个帧是在称为actiON point offset处(gdActionPointOffset)开始发送,这是一个全局参数。帧开始是"0"表示的传送开始序列TSS,经过1位"1"的帧开始序列FSS,再是第一个字节开始序列BSS,它由"10"二位组成。接收节点要正确检测到第一个字节开始序列BSS的1/0跳变沿才作帧接收的同步。帧的最后是"01"构成的帧结束序列FES,然后发送器被禁止了。发送器禁止后30 ns总线处于高阻状态。在帧传送结束后发送节点要有长度为11位的通道空闲分界符(cChannelIdleDelimiter,实际上总线高阻时,经50~250 ns接收节点会发现总线空闲,然后输出RxD="1"。然后总线一直在空闲状态。由于FlexRay的物理连接有可能通过有源星型耦合器,在总线空闲到总线上传送0有一个启动过程,再加总线上位置不同的传送延迟差别、收发器的延迟,发送节点的TSS长度会与接收节点的长度不同,接收节点看到的TSS
- FlexRay总线控制器和 TCl796的MLI接口设计(11-27)