隨著安全性要求的提高, CAN總線的帶寬就嫌不足,消息送達(dá)的確定性不夠。為此,一些汽車大廠和汽車電子的大廠成立了研發(fā)新型通信協(xié)議的聯(lián)盟[1],目標(biāo)是開發(fā)出稱為FlexRay" title="FlexRay">FlexRay的協(xié)議,使它成為下一代車用通信協(xié)議的事實(shí)上的標(biāo)準(zhǔn)。2005年聯(lián)盟推出了2.1版的規(guī)范,2009年完成3.0版規(guī)范,然后就結(jié)束了?,F(xiàn)在公眾還無(wú)法見到3.0版規(guī)范,但是據(jù)介紹,關(guān)鍵部分并無(wú)大的變化。
BMW車上在2006年已開始應(yīng)用FlexRay,各大電子器件生產(chǎn)廠開始了批量生產(chǎn)FlexRay控制器?,F(xiàn)在業(yè)界正處于爭(zhēng)取FlexRay技術(shù)早日成熟的階段,在系統(tǒng)設(shè)計(jì)、測(cè)試、標(biāo)定等方面開始了大量投入。因此,任何涉及FlexRay協(xié)議的基礎(chǔ)性問(wèn)題的研究就格外重要,一旦有新的未發(fā)現(xiàn)的隱患披露,無(wú)疑會(huì)引起大的波動(dòng)。
FlexRay是基于時(shí)間觸發(fā)的協(xié)議,節(jié)點(diǎn)間的時(shí)間同步是它的關(guān)鍵,參考文獻(xiàn)[5]是2.1版規(guī)范直接引用的主要原始資料的2009年修訂版,其主要內(nèi)容是有相位與頻率校正時(shí)誤差的靜態(tài)傳遞分析,求出可以達(dá)到的最壞或最好狀態(tài)下的簇內(nèi)時(shí)鐘差的精度。參考文獻(xiàn)[5]指出了5種計(jì)算時(shí)的誤差來(lái)源:采樣的量化誤差、微拍非均勻分布誤差、傳遞延遲誤差、整除誤差和簇漂阻尼誤差。由于時(shí)鐘校正實(shí)際上是一個(gè)反饋控制問(wèn)題,但以前的研究沒有采用反饋控制的分析方法,沒有考慮同步幀發(fā)送節(jié)點(diǎn)間的交互影響,以及傳遞延遲誤差作為系統(tǒng)性誤差的長(zhǎng)期存在,得到的結(jié)論并不全面,這是本文要重點(diǎn)討論的問(wèn)題:由于系統(tǒng)性誤差的持續(xù)存在,節(jié)點(diǎn)的相位差會(huì)單向漂移" title="漂移">漂移,與hoST的時(shí)鐘越離越遠(yuǎn),造成新的失誤。參考文獻(xiàn)[6]用軟件仿真FlexRay時(shí)鐘頻率跳變或緩變時(shí)校正算法的有效性,它證實(shí)算法是收斂的,簇內(nèi)時(shí)鐘差校正后的精度與頻率漂移率無(wú)關(guān),跳變時(shí)有一個(gè)過(guò)渡過(guò)程,瞬態(tài)差可能超過(guò)精度范圍。參考文獻(xiàn)[7]分析了有拜占庭錯(cuò)時(shí)FlexRay容錯(cuò)中值相位校正算法的收斂性,非常有趣的是在推導(dǎo)過(guò)程中也得到了校正后cycle開始時(shí)間真值Us隨延遲補(bǔ)償不足而推遲的公式,它表明每校正一次存在的差,但是這種漂移并未受到FlexRay重視。參考文獻(xiàn)[8]是對(duì)容錯(cuò)中值算法正確性的形式化證明,該算法就是FlexRay采用的算法,在分析每輪修正后的虛擬時(shí)鐘與真實(shí)時(shí)鐘差時(shí),存在±ε的漂移,其中ε是傳送延遲。這也證實(shí)了本文分析的問(wèn)題早已存在,而FlexRay未對(duì)該問(wèn)題的后果有所警覺。
1 FlexRay時(shí)鐘的概念
FlexRay的時(shí)間單位是從大到小分級(jí)的:通信Cycle、通信宏拍(Macrotick,MT)和微拍(Microtick)。每一個(gè)節(jié)點(diǎn)中的振蕩器,經(jīng)過(guò)分頻之后,產(chǎn)生一個(gè)本地的微拍時(shí)鐘單位,它與位采樣數(shù)及位采樣時(shí)鐘周期有關(guān),所以節(jié)點(diǎn)中最小的時(shí)間單位是位采樣時(shí)鐘周期。各個(gè)節(jié)點(diǎn)可以有不同的微拍,簇內(nèi)共同的時(shí)間單位是MT,每個(gè)節(jié)點(diǎn)組態(tài)時(shí)定義正常時(shí)每MT內(nèi)本地微拍的個(gè)數(shù)。本地MT的生成有專門的邏輯,在每一本地微拍時(shí)執(zhí)行一次,以實(shí)現(xiàn)本地MT的修正,以保證MT盡量全局一致,并且可以保證頻率的校正均勻分布在整個(gè)cycle中。
2 FlexRay收發(fā)的同步
在收發(fā)過(guò)程中還有字節(jié)的位同步和幀開始同步來(lái)解決可能的抖動(dòng)與延遲,它們極大地緩解了時(shí)鐘同步的精度要求。
在以字節(jié)為單位的幀數(shù)據(jù)傳送時(shí),每個(gè)字節(jié)的開頭有由“10”構(gòu)成的字節(jié)開始序列(BSS),這個(gè)1/0跳變沿是位時(shí)間同步用的:發(fā)現(xiàn)跳變沿后位采樣計(jì)數(shù)器就設(shè)為2,當(dāng)位采樣計(jì)數(shù)器=5時(shí),zVotedVal的值就作為當(dāng)時(shí)的位值。位采樣計(jì)數(shù)器為9后溢出復(fù)位為1。顯然,若因收發(fā)有時(shí)鐘差,而要在下一個(gè)BSS的1處采錯(cuò),需要差4個(gè)位采樣時(shí)鐘周期時(shí)才會(huì)發(fā)生。也就是說(shuō),時(shí)鐘差5%才會(huì)發(fā)生。
FlexRay的同步幀是在靜態(tài)段中傳送的,一個(gè)時(shí)隙(slot)內(nèi)實(shí)際上有很多空閑時(shí)間。首先,每個(gè)幀是在稱為actiON point offset處(gdActionPointOffset)開始發(fā)送,這是一個(gè)全局參數(shù)。幀開始是“0”表示的傳送開始序列TSS,經(jīng)過(guò)1位“1”的幀開始序列FSS,再是第一個(gè)字節(jié)開始序列BSS,它由“10”二位組成。接收節(jié)點(diǎn)要正確檢測(cè)到第一個(gè)字節(jié)開始序列BSS的1/0跳變沿才作幀接收的同步。幀的最后是“01”構(gòu)成的幀結(jié)束序列FES,然后發(fā)送器被禁止了。發(fā)送器禁止后30 ns總線處于高阻狀態(tài)。在幀傳送結(jié)束后發(fā)送節(jié)點(diǎn)要有長(zhǎng)度為11位的通道空閑分界符(cChannelIdleDelimiter,實(shí)際上總線高阻時(shí),經(jīng)50~250 ns接收節(jié)點(diǎn)會(huì)發(fā)現(xiàn)總線空閑,然后輸出RxD=“1”。然后總線一直在空閑狀態(tài)。由于FlexRay的物理連接有可能通過(guò)有源星型耦合器,在總線空閑到總線上傳送0有一個(gè)啟動(dòng)過(guò)程,再加總線上位置不同的傳送延遲差別、收發(fā)器的延遲,發(fā)送節(jié)點(diǎn)的TSS長(zhǎng)度會(huì)與接收節(jié)點(diǎn)的長(zhǎng)度不同,接收節(jié)點(diǎn)看到的TSS會(huì)比發(fā)送節(jié)點(diǎn)的TSS短,稱為TSS截短。只要接收節(jié)點(diǎn)看到的TSS在1~(gdTSSTransmitter + 1)之間,TSS就是有效的。所以gdActionPointOffset之前,總線也是空閑的。因此,若節(jié)點(diǎn)時(shí)鐘差不使總線上的傳送提前使gdActionPointOffset前的空閑消失,或落后使cChannelIdleDelimiter后的空閑消失,就不會(huì)產(chǎn)生2個(gè)發(fā)送幀的重疊而影響正常收發(fā)。
圖1 求取相位差的時(shí)間關(guān)系
3 FlexRay時(shí)鐘校正方法
幀的gdActionPointOffset是全局參數(shù),但是由于TSS截短的影響,同步幀接收節(jié)點(diǎn)見到的TSS的1/0跳變沿的時(shí)間與接收節(jié)點(diǎn)ActionPointOffset時(shí)間之差并不是節(jié)點(diǎn)的時(shí)鐘差,所以它用第一個(gè)BSS中的1/0跳變沿來(lái)倒推發(fā)送節(jié)點(diǎn)ActionPointOffset,如圖1所示。倒推是該時(shí)刻減去常數(shù)pDecodingCorrection和pDelayCompensation得到發(fā)送節(jié)點(diǎn)TSS的開始時(shí)刻。PDecodingCorrection內(nèi)含有TSS、FSS、BSS、總線濾波延遲和位采樣延遲各項(xiàng)。pDelayCompensation內(nèi)含有收發(fā)器延遲、星型耦合器延遲和電纜長(zhǎng)度的傳輸延遲。pDelayCompensation的數(shù)值取簇中的最小者。由此倒推出的發(fā)送節(jié)點(diǎn)的動(dòng)作點(diǎn)稱為primaryTRP,發(fā)送和接收的節(jié)的動(dòng)作點(diǎn)的時(shí)間偏差就被記錄下來(lái)。
接收節(jié)點(diǎn)對(duì)每一個(gè)同步幀都加記錄,該同步幀接收是否正確也記錄在案。只有接收正確的偏差才能用于校正計(jì)算之中。
FlexRay有相位與頻率的校正,為了頻率校正,需要連續(xù)2個(gè)cycle的同一同步節(jié)點(diǎn)所發(fā)的幀的偏差,所以校正是以2個(gè)cycle為周期進(jìn)行的。頻率校正的計(jì)算結(jié)果在每個(gè)奇數(shù)cycle內(nèi)完成,下一個(gè)cycle開始生效,在MT形成過(guò)程中實(shí)行,因此是均勻分布的。相位校正在奇數(shù)cycle的末尾完成,在該cycle的網(wǎng)絡(luò)空閑段實(shí)行。
4 FlexRay算法的問(wèn)題
圖2 同步節(jié)點(diǎn)位置分布舉例
時(shí)鐘偏差推算是造成飄移的原因。圖2中有4個(gè)同步幀發(fā)送節(jié)點(diǎn)1~4,各相距8 m,節(jié)點(diǎn)5是普通非同步幀發(fā)送節(jié)點(diǎn)。按規(guī)定,pDelayCompensation是一個(gè)預(yù)定的常數(shù),該按最小值選取,對(duì)圖2的情況,就是節(jié)點(diǎn)5和節(jié)點(diǎn)2間的延遲,即接近為0。這樣,對(duì)實(shí)際發(fā)生的延遲是補(bǔ)償不足的。不足部分可寫為:
節(jié)點(diǎn)間的延遲,按每米10 ns計(jì),最大距離為24 m,那么此補(bǔ)償不足量有0.24 μs。
在圖1中,假定同步幀在cycle的第一個(gè)static slot,對(duì)static slot的開始時(shí)間有一個(gè)標(biāo)準(zhǔn)的參考點(diǎn),發(fā)送節(jié)點(diǎn)和接收節(jié)點(diǎn)各有相位差TT(0)和TR(0),此時(shí)接收節(jié)點(diǎn)得到的偏差將含有延遲補(bǔ)償不足的部分:
由于距離不同,接收節(jié)點(diǎn)得到的URT也是不同的。
FlexRay規(guī)定,發(fā)同步幀的節(jié)點(diǎn)在屬于自己的slot上的相位誤差登記為0。假定節(jié)點(diǎn)間原來(lái)已處于接近同步的情況,對(duì)節(jié)點(diǎn)1而言,e11=0最小,e14最大,按算法它們將被丟棄,于是校正量將按(e12+ e13)/2計(jì)算:
當(dāng)節(jié)點(diǎn)初始相位比參考節(jié)點(diǎn)2、3的平均相位早時(shí),應(yīng)該推遲本節(jié)點(diǎn)下一cycle的開始,實(shí)現(xiàn)負(fù)反饋。就應(yīng)有T1(1)= T1(0)-Corr1。為了分析問(wèn)題的需要,假定只作一部分校正,即:
其中系數(shù)c≤1,對(duì)FlexRay而言c=1。于是有:
推而廣之,將各節(jié)點(diǎn)的相位差寫為向量,可以得到狀態(tài)方程:
對(duì)T1而言,系數(shù)a11=1-c,a12= c/2,a13= c/2,a14=0,B=-c,U1=120 ns。對(duì)節(jié)點(diǎn)2而言,它丟棄最大的e24和最小的e22,U2=80 ns。類似可確定其他節(jié)點(diǎn)的系數(shù)。所以矩陣A有:
同時(shí)有B=-c和U=[120ns 80ns 80ns 120ns]T(6)
對(duì)A求取特征根得到:λ1=1,λ2= 1-c,λ3=λ4=1-1.5c。
然而在FlexRay中URT是一個(gè)系統(tǒng)性偏差,并不因一次校正而消失,因此按(4)式工作時(shí)時(shí)鐘差會(huì)不斷移動(dòng)。當(dāng)U不變時(shí)有:
令(7)式中的第二項(xiàng)為S,則有:
?。?)式右邊各項(xiàng)均為有限值,而因?yàn)锳的特征根有λ1=1,(I-A)是不可求逆的,所以S將含有不定值,所以隨著n的增加, T(n+1)是不斷漂移的。
5 漂移對(duì)系統(tǒng)的影響
漂移使通信時(shí)鐘離標(biāo)準(zhǔn)時(shí)鐘越來(lái)越遠(yuǎn),通信時(shí)鐘初始相位的負(fù)值代表它比標(biāo)準(zhǔn)時(shí)間延遲(如圖1所示)。在延遲超過(guò)1個(gè)cycle時(shí)就會(huì)使上次寫入的幀還未發(fā)出就被覆蓋。以cycle=5 ms、100次校正漂9.3 μs計(jì),53763次校正會(huì)漂1個(gè)cycle,這就是說(shuō),8.96 min會(huì)產(chǎn)生一次丟幀。由于節(jié)點(diǎn)都是同步的,每個(gè)slot都會(huì)發(fā)生丟幀,如果每個(gè)cycle有91個(gè)靜態(tài)slot,那么意味著每8.96 min丟失91個(gè)幀--平均每6 s丟一幀。而且,如果host時(shí)鐘是偏快方向漂移,那么丟幀的頻度還要增大。
補(bǔ)償過(guò)頭時(shí)URT為負(fù)值,通信時(shí)鐘將比標(biāo)準(zhǔn)時(shí)間提前。這種情況一般不會(huì)發(fā)生,因?yàn)橐?guī)定選延遲的最小值作pDelayCompensation。但是這里又出現(xiàn)了host時(shí)鐘的漂移問(wèn)題:所有同步幀的內(nèi)容是由host寫入的,host必須在相應(yīng)slot的開始前使同步幀的內(nèi)容就緒。最壞情況是原來(lái)host在slot開始前寫入,漂移超過(guò)了gdActionPointOffset就會(huì)產(chǎn)生同步幀未寫入的情況。FlexRay的幀頭部有一位標(biāo)志null frame. indicator,當(dāng)幀內(nèi)容未更新時(shí),這一位自動(dòng)設(shè)為0,同步幀還是發(fā)出去,所以并不影響同步幀的個(gè)數(shù)。
6 頻率校正中的問(wèn)題
頻率校正時(shí)采用了連續(xù)2個(gè)cycle的同一同步節(jié)點(diǎn)的相位差,將這兩個(gè)相位差的差作原始數(shù)據(jù),用類似算法計(jì)算校正量,然后按死區(qū)與限幅的方法實(shí)施校正。在同一同步節(jié)點(diǎn)的相位差的減法中,系統(tǒng)性偏差URT互相抵消,因此不引起頻率的漂移。但是,在接收節(jié)點(diǎn)測(cè)取BSS的跳變沿時(shí)存在誤差的可能性(如圖1所示),BSS的跳變沿的誤差直接影響到倒推ActionPointOffset的位置,從而進(jìn)入eRT:
式中Uglitch為毛刺造成的誤差,奇數(shù)cycle和偶數(shù)cycle的Uglitch可能是不同幅值和符號(hào)的。BSS的跳變沿是在經(jīng)濾波后的zVotedVal上采取的,毛刺長(zhǎng)度小于3個(gè)位采樣周期時(shí)被濾掉,大于3個(gè)位采樣周期時(shí)就可以見到。毛刺的存在位置有如下幾種可能:
?、?“0“毛刺在TSS之前,真正TSS的跳變沿被解讀為BSS中的跳變沿。此時(shí)讀到的相位差較大,但是后續(xù)BSS以及其它的幀檢查會(huì)發(fā)現(xiàn)此幀有接收錯(cuò)。
?、?“1“毛刺在TSS之中,毛刺的1/0跳變沿被解讀為BSS中的跳變沿。此時(shí)讀到的相位差比上述情況小,同樣可檢查出有錯(cuò)。
③ “0“毛刺使BSS內(nèi)的跳變沿提前,或“1“毛刺使BSS內(nèi)的跳變沿推后,當(dāng)提前或推后的量較大時(shí),后續(xù)BSS以及其它的幀檢查會(huì)發(fā)現(xiàn)此幀有接收錯(cuò)。
?、?毛刺使BSS跳變沿變化量小于0.5位時(shí),后續(xù)BSS以及其他的幀檢查不會(huì)發(fā)現(xiàn)此幀有接收錯(cuò),所以此幀會(huì)被用于時(shí)鐘同步。
一個(gè)接收節(jié)點(diǎn)在同一cycle里受到毛刺干擾而造成有幾個(gè)同步幀受影響是可能的。此時(shí)盡管有最大最小頻率差的丟棄,毛刺造成的誤差仍可能要進(jìn)入校正量的計(jì)算。
易于導(dǎo)出頻率校正的狀態(tài)方程,它與(4)式的形式類似。因此FlexRay的頻率校正可使簇內(nèi)的頻率趨于一致,但是仍有頻率相對(duì)于標(biāo)準(zhǔn)值漂移的可能性,此漂移的方向是不定的,受毛刺出現(xiàn)的情況而變。
參考文獻(xiàn)[6]進(jìn)行了FlexRay的頻率校正的軟件仿真試驗(yàn),對(duì)節(jié)點(diǎn)頻率作階躍變化、斜坡變化的試驗(yàn)結(jié)果是令人滿意的。但是它并未考慮過(guò)毛刺影響。
7 時(shí)變傳遞矩陣的漂移
如(5)式所示的傳遞矩陣還有非常多的形式,由于FlexRay在選取作校正計(jì)算時(shí)要用丟棄排序后的最大最小二個(gè)誤差,實(shí)際采用的同步節(jié)點(diǎn)的可能性組合很多。例如對(duì)4個(gè)同步節(jié)點(diǎn)的簇,對(duì)每個(gè)同步節(jié)點(diǎn)(矩陣A的一行)將有6種可能的系數(shù),整個(gè)簇的傳遞矩陣A將有64=1296種可能。對(duì)矩陣A求特征根時(shí)可以發(fā)現(xiàn)它們都有λ=1的臨界穩(wěn)定的特征根:實(shí)際上每行系數(shù)的和都等于1,在用行列式求特征根時(shí)就可以將λ-1提出來(lái)。而由于FlexRay在每次排序后選中的同步節(jié)點(diǎn)可能不同,傳遞矩陣是時(shí)變的,那么是否還有漂移呢?為此按照算法作了含有排序的程序,這是相位校正的算法(不含頻率校正的非線性部分)。
8.結(jié)語(yǔ)
FlexRay采用分布式時(shí)鐘的本意是強(qiáng)化對(duì)抗失效的能力:有F個(gè)同步幀發(fā)送節(jié)點(diǎn)失效時(shí),只要同步幀發(fā)送節(jié)點(diǎn)為3F+1個(gè),簇內(nèi)的時(shí)鐘仍是正確同步的,因此可以保證簇內(nèi)的正常通信服務(wù)。但是根據(jù)本文的動(dòng)態(tài)分析,時(shí)鐘相位會(huì)由于延遲補(bǔ)償誤差而漂移,與真實(shí)時(shí)鐘有頻差。這種延遲補(bǔ)償誤差是無(wú)法消除的,而已有頻率校正方法無(wú)法發(fā)現(xiàn)通信時(shí)鐘對(duì)真實(shí)時(shí)間的頻差,因此通信時(shí)鐘會(huì)與host的時(shí)鐘越離越遠(yuǎn),導(dǎo)致發(fā)送幀被新幀覆蓋,或者時(shí)隙到達(dá)時(shí)消息尚未就緒。這些漂移引起的出錯(cuò)發(fā)生頻率是相當(dāng)高的。
由于毛刺引起的頻率漂移可以用死區(qū)算法克制,但是其他各種毛刺的情況會(huì)使有效的同步幀數(shù)目減少,使容錯(cuò)中值算法的魯棒性下降。按容許F個(gè)錯(cuò)需要3F+1個(gè)同步幀計(jì)算,同時(shí)有2個(gè)錯(cuò)對(duì)4個(gè)同步節(jié)點(diǎn)的簇就不能保證同步精度了。
對(duì)應(yīng)用而言,丟幀或時(shí)序的錯(cuò)誤會(huì)引起很壞的后果,如工作的邏輯連鎖條件破壞。例如速度下降應(yīng)在前,換檔工作應(yīng)在后,由于速度下降信號(hào)丟失,降速后換檔的要求未滿足會(huì)形成自動(dòng)變速器的沖擊,造成噪聲和壽命下降,又如停止加油后再剎車的要求未滿足,會(huì)延長(zhǎng)剎車距離,危及安全。對(duì)于傳送的消息是模擬量時(shí),丟幀或延遲的后果只是暫時(shí)的,對(duì)傳送的是邏輯變量,丟幀或延遲會(huì)造成邏輯的錯(cuò)誤。這種時(shí)鐘上的錯(cuò)誤會(huì)同時(shí)影響FlexRay的2個(gè)通道,因此也影響了FlexRay對(duì)抗故障的能力。