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