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