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會比發送節點的TSS短,稱為TSS截短。只要接收節點看到的TSS在1~(gdTSSTransmitter + 1)之間,TSS就是有效的。所以gdActionPointOffset之前,總線也是空閑的。因此,若節點時鐘差不使總線上的傳送提前使gdActionPointOffset前的空閑消失,或落后使cChannelIdleDelimiter后的空閑消失,就不會產生2個發送幀的重疊而影響正常收發。
圖1 求取相位差的時間關系
用戶評論
共 0 條評論