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 求取相位差的時間關系
3 FlexRay時鐘校正方法
幀的gDACtionPointOffset是全局參數,但是由于TSS截短的影響,同步幀接收節點見到的TSS的1/0跳變沿的時間與接收節點ActionPointOffset時間之差并不是節點的時鐘差,所以它用第一個BSS中的1/0跳變沿來倒推發送節點ActionPointOffset,如圖1所示。倒推是該時刻減去常數pDecodingCorrection和pDelayCompensation得到發送節點TSS的開始時刻。PDecodingCorrection內含有TSS、FSS、BSS、總線濾波延遲和位采樣延遲各項。pDelayCompensation內含有收發器延遲、星型耦合器延遲和電纜長度的傳輸延遲。pDelayCompensation的數值取簇中的最小者。由此倒推出的發送節點的動作點稱為primaryTRP,發送和接收的節的動作點的時間偏差就被記錄下來。
接收節點對每一個同步幀都加記錄,該同步幀接收是否正確也記錄在案。只有接收正確的偏差才能用于校正計算之中。
FlexRay有相位與頻率的校正,為了頻率校正,需要連續2個cycle的同一同步節點所發的幀的偏差,所以校正是以2個cycle為周期進行的。頻率校正的計算結果在每個奇數cycle內完成,下一個cycle開始生效,在MT形成過程中實行,因此是均勻分布的。相位校正在奇數cycle的末尾完成,在該cycle的網絡空閑段實行。
4 FlexRay算法的問題
?
圖2 同步節點位置分布舉例
時鐘偏差推算是造成飄移的原因。圖2中有4個同步幀發送節點1~4,各相距8 m,節點5是普通非同步幀發送節點。按規定,pDelayCompensation是一個預定的常數,該按最小值選取,對圖2的情況,就是節點5和節點2間的延遲,即接近為0。這樣,對實際發生的延遲是補償不足的。不足部分可寫為:
?
節點間的延遲,按每米10 ns計,最大距離為24 m,那么此補償不足量有0.24 μs。
在圖1中,假定同步幀在cycle的第一個static slot,對static slot的開始時間有一個標準的參考點,發送節點和接收節點各有相位差TT(0)和TR(0),此時接收節點得到的偏差將含有延遲補償不足的部分:
?
由于距離不同,接收節點得到的URT也是不同的。
FlexRay規定,發同步幀的節點在屬于自己的slot上的相位誤差登記為0。假定節點間原來已處于接近同步的情況,對節點1而言,e11=0最小,e14最大,按算法它們將被丟棄,于是校正量將按(e12+ e13)/2計算:
?
當節點初始相位比參考節點2、3的平均相位早時,應該推遲本節點下一cycle的開始,實現負反饋。就應有T1(1)= T1(0)-Corr1。為了分析問題的需要,假定只作一部分校正,即:
?
其中系數c≤1,對FlexRay而言c=1。于是有:
?
推而廣之,將各節點的相位差寫為向量,可以得到狀態方程:
?
對T1而言,系數a11=1-c,a12= c/2,a13= c/2,a14=0,B=-c,U1=120 ns。對節點2而言,它丟棄最大的e24和最小的e22,U2=80 ns。類似可確定其他節點的系數。所以矩陣A有:
?
同時有B=-c和U=[120ns 80ns 80ns 120ns]T(6)
對A求取特征根得到:λ1=1,λ2= 1-c,λ3=λ4=1-1.5c。
然而在FlexRay中URT是一個系統性偏差,并不因一次校正而消失,因此按(4)式工作時時鐘差會不斷移動。當U不變時有:
?
令(7)式中的第二項為S,則有:
?
(8)式右邊各項均為有限值,而因為A的特征根有λ1=1,(I-A)是不可求逆的,所以S將含有不定值,所以隨著n的增加, T(n+1)是不斷漂移的。
5 漂移對系統的影響
漂移使通信時鐘離標準時鐘越來越遠,通信時鐘初始相位的負值代表它比標準時間延遲(如圖1所示)。在延遲超過1個cycle時就會使上次寫入的幀還未發出就被覆蓋。以cycle=5 ms、100次校正漂9.3 μs計,53763次校正會漂1個cycle,這就是說,8.96 min會產生一次丟幀。由于節點都是同步的,每個slot都會發生丟幀,如果每個cycle有91個靜態slot,那么意味著每8.96 min丟失91個幀--平均每6 s丟一幀。而且,如果host時鐘是偏快方向漂移,那么丟幀的頻度還要增大。
補償過頭時URT為負值,通信時鐘將比標準時間提前。這種情況一般不會發生,因為規定選延遲的最小值作pDelayCompensation。但是這里又出現了host時鐘的漂移問題:所有同步幀的內容是由host寫入的,host必須在相應slot的開始前使同步幀的內容就緒。最壞情況是原來host在slot開始前寫入,漂移超過了gDACtionPointOffset就會產生同步幀未寫入的情況。FlexRay的幀頭部有一位標志null frame. indicator,當幀內容未更新時,這一位自動設為0,同步幀還是發出去,所以并不影響同步幀的個數。
6 頻率校正中的問題
頻率校正時采用了連續2個cycle的同一同步節點的相位差,將這兩個相位差的差作原始數據,用類似算法計算校正量,然后按死區與限幅的方法實施校正。在同一同步節點的相位差的減法中,系統性偏差URT互相抵消,因此不引起頻率的漂移。但是,在接收節點測取BSS的跳變沿時存在誤差的可能性(如圖1所示),BSS的跳變沿的誤差直接影響到倒推ActionPointOffset的位置,從而進入eRT:
式中Uglitch為毛刺造成的誤差,奇數cycle和偶數cycle的Uglitch可能是不同幅值和符號的。BSS的跳變沿是在經濾波后的zVotedVal上采取的,毛刺長度小于3個位采樣周期時被濾掉,大于3個位采樣周期時就可以見到。毛刺的存在位置有如下幾種可能:
① “0“毛刺在TSS之前,真正TSS的跳變沿被解讀為BSS中的跳變沿。此時讀到的相位差較大,但是后續BSS以及其它的幀檢查會發現此幀有接收錯。
② “1“毛刺在TSS之中,毛刺的1/0跳變沿被解讀為BSS中的跳變沿。此時讀到的相位差比上述情況小,同樣可檢查出有錯。
③ “0“毛刺使BSS內的跳變沿提前,或“1“毛刺使BSS內的跳變沿推后,當提前或推后的量較大時,后續BSS以及其它的幀檢查會發現此幀有接收錯。
④ 毛刺使BSS跳變沿變化量小于0.5位時,后續BSS以及其他的幀檢查不會發現此幀有接收錯,所以此幀會被用于時鐘同步。
一個接收節點在同一cycle里受到毛刺干擾而造成有幾個同步幀受影響是可能的。此時盡管有最大最小頻率差的丟棄,毛刺造成的誤差仍可能要進入校正量的計算。
易于導出頻率校正的狀態方程,它與(4)式的形式類似。因此FlexRay的頻率校正可使簇內的頻率趨于一致,但是仍有頻率相對于標準值漂移的可能性,此漂移的方向是不定的,受毛刺出現的情況而變。
參考文獻[6]進行了FlexRay的頻率校正的軟件仿真試驗,對節點頻率作階躍變化、斜坡變化的試驗結果是令人滿意的。但是它并未考慮過毛刺影響。
7 時變傳遞矩陣的漂移
如(5)式所示的傳遞矩陣還有非常多的形式,由于FlexRay在選取作校正計算時要用丟棄排序后的最大最小二個誤差,實際采用的同步節點的可能性組合很多。例如對4個同步節點的簇,對每個同步節點(矩陣A的一行)將有6種可能的系數,整個簇的傳遞矩陣A將有64=1296種可能。對矩陣A求特征根時可以發現它們都有λ=1的臨界穩定的特征根:實際上每行系數的和都等于1,在用行列式求特征根時就可以將λ-1提出來。而由于FlexRay在每次排序后選中的同步節點可能不同,傳遞矩陣是時變的,那么是否還有漂移呢?為此按照算法作了含有排序的程序,這是相位校正的算法(不含頻率校正的非線性部分)。
8.結語
FlexRay采用分布式時鐘的本意是強化對抗失效的能力:有F個同步幀發送節點失效時,只要同步幀發送節點為3F+1個,簇內的時鐘仍是正確同步的,因此可以保證簇內的正常通信服務。但是根據本文的動態分析,時鐘相位會由于延遲補償誤差而漂移,與真實時鐘有頻差。這種延遲補償誤差是無法消除的,而已有頻率校正方法無法發現通信時鐘對真實時間的頻差,因此通信時鐘會與host的時鐘越離越遠,導致發送幀被新幀覆蓋,或者時隙到達時消息尚未就緒。這些漂移引起的出錯發生頻率是相當高的。
由于毛刺引起的頻率漂移可以用死區算法克制,但是其他各種毛刺的情況會使有效的同步幀數目減少,使容錯中值算法的魯棒性下降。按容許F個錯需要3F+1個同步幀計算,同時有2個錯對4個同步節點的簇就不能保證同步精度了。
評論
查看更多