如何解決FlexRay時(shí)鐘同步的同向漂移
隨著(zhù)安全性要求的提高, CAN總線(xiàn)的帶寬就嫌不足,消息送達的確定性不夠。為此,一些汽車(chē)大廠(chǎng)和汽車(chē)電子的大廠(chǎng)成立了研發(fā)新型通信協(xié)議的聯(lián)盟[1],目標是開(kāi)發(fā)出稱(chēng)為FlexRay的協(xié)議,使它成為下一代車(chē)用通信協(xié)議的事實(shí)上的標準。2005年聯(lián)盟推出了2.1版的規范,2009年完成3.0版規范,然后就結束了?,F在公眾還無(wú)法見(jiàn)到3.0版規范,但是據介紹,關(guān)鍵部分并無(wú)大的變化。
本文引用地址:http://dyxdggzs.com/article/162165.htmBMW車(chē)上在2006年已開(kāi)始應用FlexRay,各大電子器件生產(chǎn)廠(chǎng)開(kāi)始了批量生產(chǎn)FlexRay控制器?,F在業(yè)界正處于爭取FlexRay技術(shù)早日成熟的階段,在系統設計、測試、標定等方面開(kāi)始了大量投入。因此,任何涉及FlexRay協(xié)議的基礎性問(wèn)題的研究就格外重要,一旦有新的未發(fā)現的隱患披露,無(wú)疑會(huì )引起大的波動(dòng)。
FlexRay是基于時(shí)間觸發(fā)的協(xié)議,節點(diǎn)間的時(shí)間同步是它的關(guān)鍵,參考文獻[5]是2.1版規范直接引用的主要原始資料的2009年修訂版,其主要內容是有相位與頻率校正時(shí)誤差的靜態(tài)傳遞分析,求出可以達到的最壞或最好狀態(tài)下的簇內時(shí)鐘差的精度。參考文獻[5]指出了5種計算時(shí)的誤差來(lái)源:采樣的量化誤差、微拍非均勻分布誤差、傳遞延遲誤差、整除誤差和簇漂阻尼誤差。由于時(shí)鐘校正實(shí)際上是一個(gè)反饋控制問(wèn)題,但以前的研究沒(méi)有采用反饋控制的分析方法,沒(méi)有考慮同步幀發(fā)送節點(diǎn)間的交互影響,以及傳遞延遲誤差作為系統性誤差的長(cháng)期存在,得到的結論并不全面,這是本文要重點(diǎn)討論的問(wèn)題:由于系統性誤差的持續存在,節點(diǎn)的相位差會(huì )單向漂移,與hoST的時(shí)鐘越離越遠,造成新的失誤。參考文獻[6]用軟件仿真FlexRay時(shí)鐘頻率跳變或緩變時(shí)校正算法的有效性,它證實(shí)算法是收斂的,簇內時(shí)鐘差校正后的精度與頻率漂移率無(wú)關(guān),跳變時(shí)有一個(gè)過(guò)渡過(guò)程,瞬態(tài)差可能超過(guò)精度范圍。參考文獻[7]分析了有拜占庭錯時(shí)FlexRay容錯中值相位校正算法的收斂性,非常有趣的是在推導過(guò)程中也得到了校正后cycle開(kāi)始時(shí)間真值Us隨延遲補償不足而推遲的公式,它表明每校正一次存在的差,但是這種漂移并未受到FlexRay重視。參考文獻[8]是對容錯中值算法正確性的形式化證明,該算法就是FlexRay采用的算法,在分析每輪修正后的虛擬時(shí)鐘與真實(shí)時(shí)鐘差時(shí),存在±ε的漂移,其中ε是傳送延遲。這也證實(shí)了本文分析的問(wèn)題早已存在,而FlexRay未對該問(wèn)題的后果有所警覺(jué)。
1 FlexRay時(shí)鐘的概念
FlexRay的時(shí)間單位是從大到小分級的:通信Cycle、通信宏拍(Macrotick,MT)和微拍(Microtick)。每一個(gè)節點(diǎn)中的振蕩器,經(jīng)過(guò)分頻之后,產(chǎn)生一個(gè)本地的微拍時(shí)鐘單位,它與位采樣數及位采樣時(shí)鐘周期有關(guān),所以節點(diǎn)中最小的時(shí)間單位是位采樣時(shí)鐘周期。各個(gè)節點(diǎn)可以有不同的微拍,簇內共同的時(shí)間單位是MT,每個(gè)節點(diǎn)組態(tài)時(shí)定義正常時(shí)每MT內本地微拍的個(gè)數。本地MT的生成有專(zhuān)門(mén)的邏輯,在每一本地微拍時(shí)執行一次,以實(shí)現本地MT的修正,以保證MT盡量全局一致,并且可以保證頻率的校正均勻分布在整個(gè)cycle中。
2 FlexRay收發(fā)的同步
在收發(fā)過(guò)程中還有字節的位同步和幀開(kāi)始同步來(lái)解決可能的抖動(dòng)與延遲,它們極大地緩解了時(shí)鐘同步的精度要求。
在以字節為單位的幀數據傳送時(shí),每個(gè)字節的開(kāi)頭有由“10”構成的字節開(kāi)始序列(BSS),這個(gè)1/0跳變沿是位時(shí)間同步用的:發(fā)現跳變沿后位采樣計數器就設為2,當位采樣計數器=5時(shí),zVotedVal的值就作為當時(shí)的位值。位采樣計數器為9后溢出復位為1。顯然,若因收發(fā)有時(shí)鐘差,而要在下一個(gè)BSS的1處采錯,需要差4個(gè)位采樣時(shí)鐘周期時(shí)才會(huì )發(fā)生。也就是說(shuō),時(shí)鐘差5%才會(huì )發(fā)生。
FlexRay的同步幀是在靜態(tài)段中傳送的,一個(gè)時(shí)隙(slot)內實(shí)際上有很多空閑時(shí)間。首先,每個(gè)幀是在稱(chēng)為actiON point offset處(gdActionPointOffset)開(kāi)始發(fā)送,這是一個(gè)全局參數。幀開(kāi)始是“0”表示的傳送開(kāi)始序列TSS,經(jīng)過(guò)1位“1”的幀開(kāi)始序列FSS,再是第一個(gè)字節開(kāi)始序列BSS,它由“10”二位組成。接收節點(diǎn)要正確檢測到第一個(gè)字節開(kāi)始序列BSS的1/0跳變沿才作幀接收的同步。幀的最后是“01”構成的幀結束序列FES,然后發(fā)送器被禁止了。發(fā)送器禁止后30 ns總線(xiàn)處于高阻狀態(tài)。在幀傳送結束后發(fā)送節點(diǎn)要有長(cháng)度為11位的通道空閑分界符(cChannelIdleDelimiter,實(shí)際上總線(xiàn)高阻時(shí),經(jīng)50~250 ns接收節點(diǎn)會(huì )發(fā)現總線(xiàn)空閑,然后輸出RxD=“1”。然后總線(xiàn)一直在空閑狀態(tài)。由于FlexRay的物理連接有可能通過(guò)有源星型耦合器,在總線(xiàn)空閑到總線(xiàn)上傳送0有一個(gè)啟動(dòng)過(guò)程,再加總線(xiàn)上位置不同的傳送延遲差別、收發(fā)器的延遲,發(fā)送節點(diǎn)的TSS長(cháng)度會(huì )與接收節點(diǎn)的長(cháng)度不同,接收節點(diǎn)看到的TSS會(huì )比發(fā)送節點(diǎn)的TSS短,稱(chēng)為T(mén)SS截短。只要接收節點(diǎn)看到的TSS在1~(gdTSSTransmitter + 1)之間,TSS就是有效的。所以gdActionPointOffset之前,總線(xiàn)也是空閑的。因此,若節點(diǎn)時(shí)鐘差不使總線(xiàn)上的傳送提前使gdActionPointOffset前的空閑消失,或落后使cChannelIdleDelimiter后的空閑消失,就不會(huì )產(chǎn)生2個(gè)發(fā)送幀的重疊而影響正常收發(fā)。
圖1 求取相位差的時(shí)間關(guān)系
評論