CAN是事件觸發(fā)的通信協(xié)議,它用標識符(ID)的無損仲裁方法調度不同消息的傳送。仲裁依靠的是位值,因此位值采樣準確性很重要。為在所有節(jié)點得到相同的準確的采樣,位時間的同步就是關鍵。正常傳送中也要克服節(jié)點間時鐘差造成的采樣點變動,減少讀出時的錯誤。但是位時間能否實現(xiàn)同步,取決于時鐘的偏差。為此CAN標準規(guī)定了時鐘容差的計算方法?,F(xiàn)在發(fā)現(xiàn),標準規(guī)定的計算公式不夠用,它會影響應用的可靠性。特別是汽車工業(yè)常用的標準兒939是基于CAN 2.0B的,時鐘容差對CAN 2.OB的影響較大,因此對此加以修正非常重要。對于標準的完整理解不僅與應用有直接關系,對進一步提高CAN性能也會有新的啟示。
1 ISO 1 1898-1:2003關于時鐘容差的規(guī)定
ISO 11898-1:2003第12.4.1.2款規(guī)定位時間單位為Tq,它是可組態(tài)的參數。1位共有NTQ(8~25)個Tq,Tq由振蕩器分頻而得,受硬件的振蕩器與分頻器資源所限,其選擇有限。每1位分成4段:同步段S(Tq)、傳輸段Pr(Tq~8Tq)、緩沖1段P1(Tq~8Tq)和緩沖2段 P2(Tq~8 Tq),它們都是可組態(tài)的參數。位值的采樣在P1與P2的分界處。CAN將同步分為2種:硬同步和重同步??偩€空閑時開始新幀SOF的隱位到顯位的跳變沿 (R/D跳變沿)引起硬同步,立即復位本地位時間到S段。在幀傳送中的R/D跳變沿引起重同步,跳變沿落在上一位采樣后的P2段時將該P2縮短,跳變沿落在S后時加長本位P1的長度,此時本地位時間修正的最大絕對量不超過SJW(重同步跳轉寬度)的值。SJW是1個組態(tài)參數,在Tq~4 Tq之間。關于CAN位時間與同步的一些較為深入的探討可參見參考文獻。
在CAN標準中,采用振蕩器容差這一術語來代表時鐘容差。實際實現(xiàn)時,有的實現(xiàn)方案用振蕩器加鎖相環(huán)構成時鐘,此時CAN的時鐘偏差就由2部分構成。為了與標準文字一致,本文不把時鐘容差與振蕩器容差嚴格區(qū)分。將振蕩器的頻率相對誤差表示為△,時,按ISO11898-1的12.4.2.5款規(guī)定,它的約束有2條。
①正常傳送時由于CAN填充位規(guī)則,重同步的距離最多為10位。為同步正確,有:
(2×△f)×10×NBT 其中,NBT為標稱位時間。 ②出錯時,有錯的節(jié)點要發(fā)報錯幀。為了區(qū)分是本地錯還是全局錯,要考察發(fā)出主動報錯標志后的第7位是否還是顯位。由于出錯前可能有6位顯位,所以2個同步段S相隔13位。容許的差小于緩沖段長: (2×△f)×(13×NBT-P2) 在2個不等式中選最小者為本應用的時鐘容差。例如Tbit=1 000 ns,總線長20 m,收發(fā)器的延遲為150 ns時,整個傳輸延遲為Tprop=500 ns,取Tq=125 ns,算出Pr=4,P1=1,P2=2,SJW=1,NBT=8。由上述二式算出的△f分別為0.006 25和0.004 90,取其中小者0.004 90,即接近0.5%。 2 發(fā)送器時鐘同步中產生的問題 CAN總線具有顯位優(yōu)先于隱位的特性,即當總線上有多個節(jié)點同時發(fā)送時,只要有1個節(jié)點發(fā)的是顯位,總線上最終的結果就是顯位。所以當2個相距有一定距離的節(jié)點同時發(fā)送顯位時,由于傳輸需要時間,在一個節(jié)點處看不到另一個節(jié)點的R/D跳變沿(如圖1所示,e為同步的相位差),因為總線的電平早已被該節(jié)點置為顯位。 在這種情況下,節(jié)點A、B即使時鐘有差別,也無法建立同步。設A比B快,僅當節(jié)點A的同步段S比節(jié)點B的同步段S越來越超前,且其超前量大于傳輸時間時,節(jié)點B才能看見A的R/D跳變沿,B才會開始進行同步。 現(xiàn)在分析2個發(fā)送器在仲裁區(qū)的同步問題。假定它們看到總線空閑并同時開始發(fā)送,它們的ID只是最后1位不同。有文獻介紹發(fā)送節(jié)點同步過程時,假定總線空閑時有1個發(fā)送器領先于其他發(fā)送器,且超過Pr/2段發(fā)送的情況。由于事件發(fā)生的隨機性,這只是特例。對于定時消息,它們由本節(jié)點的時鐘觸發(fā)。但本地時鐘問并無同步,它們之間又存在頻率差異,所以定時消息規(guī)定應發(fā)出的時間的相位差會周期性地變化。1個發(fā)送器領先所有其他發(fā)送器的情況也只是特例。在本文假設下,由于在ID前各位出現(xiàn)的R/D跳變沿均未被對方看見,它們之間沒有同步關系。到最后1位,假定時鐘慢的節(jié)點有顯位而時鐘快的節(jié)點有隱位,并假定ID前 1位是隱位,那么慢節(jié)點的R/D跳變沿將可能被快的節(jié)點看到。但是,它將有很大的相位差,可能已經超過了重同步跳轉寬度SJW,從而無法使該快節(jié)點正確同步,便會導致采樣在慢節(jié)點送來的電平尚未穩(wěn)定的地方產生位值讀錯。 在CAN 2.0B的29位ID的最后1位,即仲裁域的第31位,由于可能還有7個填充位,即已有37位未進行同步。為了采樣正確,未同步時快慢發(fā)送節(jié)點同步段的差應小于重同步跳轉寬度SJW: (2×△f)×37×NBT≤SJW (3) 以前述例子的數據,NBT=8,SJW=1,得△f≤0.001 68,減小了很多。 由于接近快節(jié)點的接收器均能見到快節(jié)點的R/D跳變沿,它們已按快節(jié)點進行了同步。最后,它們要按未曾同步的慢節(jié)點進行同步,同樣會遇到相位差很大時的同步問題。如果ID最后第2位已是顯位,那么快節(jié)點將見不到慢節(jié)點的跳變沿,因為此時并不存在可供同步的R/D跳變沿,在仲裁域內快節(jié)點以及附近已與它同步的接收器將完全無法與慢節(jié)點同步。它們將按自己原來的相位及位時間進行采樣。最壞的情況下,要再經過7位可以見到慢節(jié)點的下一個R/D跳變沿,如圖2所示。 在仲裁域內未能見到跳變沿的發(fā)送器此時已變?yōu)榻邮芷?,雖然如此,若在后面的跳變沿能保證正確同步的話,那么在仲裁域中采樣點的偏移就更小,應該能保證采樣的正確,即仲裁的正確。此時仲裁域內未同步最多為40位(含可能的8位填充位),隨后最近的跳變沿在6位后,于是為了能正確采樣,應該有: (2×△f)×46×NBT≤SJW (4) 仍以第一部分中例子的數據,NBT=8,SJW=1,可得△f≤0.001 35,又小了一些。如果在某系統(tǒng)中有NBT=25,SJW=1,可得△f≤0.00043。這是相當小的值。 根據上述分析,最壞的情況是(4)式。對于CAN2.0 A,對應可以導出最壞情況為: (2×△f)×21×NBT≤SJW (5) 如果傳輸時間比較短,慢節(jié)點已按快節(jié)點延遲Pr/2后進行了同步,那么在慢節(jié)點最后勝出的那一位,快節(jié)點將見到e=Pr的來自慢節(jié)點的同步沿。為能保證同步,至少應有: Pr≤SJW (6) 如果(6)式滿足,就可以發(fā)生同步。例如在傳輸延遲占位時間份額小的系統(tǒng),用原ISO11898-1的算式。使用中,讀取ACK位時,最壞的同步沿將相隔 11位(CRC分界符不在填充位規(guī)則內),(1)式還應該修改。如不滿足(6)式,例如高速系統(tǒng),就應考慮(4)或(5)式。ISO11898-1應添加上述內容。一般地說,(4)、(5)式比(1)、(2)式要求嚴格,如需要簡化,用它們就足夠了。例如對于CAN2.0A,用前面例子的數據,NBT=8,SJW=1,由(5)式可得△f≤0.002 97,也優(yōu)于原來的0.004 90。 3 ISO 16845:2004應添加的條款 ISO16845關于發(fā)送器時間同步相關功能的一致性測試條款共9項(8.7.1~8.7.9),其中用于有相位差的重同步僅2項:8.7.4款,當 e<0且|e|≤SJW時的同步;8.7.5款,當P<0且e>SJW時的同步。由第2部分的分析可知,發(fā)送器在仲裁中退出的最后一位是需要進行同步的,此時它還是發(fā)送器狀態(tài)。只有同步以后,才能正確采樣,決定是否退出并保證退出以后能正確跟蹤勝出的發(fā)送器。因此,需要添加 e>O,且| e |≤SJW,以及e>0,且| e |>SJW時的測試條款。這些條款可以參考接收器的相應條款(7.7.3和7.7.4)。 ISO 16845中的低層測試設備LT是專用設備,它與被測的CAN(稱為被測試的實現(xiàn)IUT)的Tx、Rx相連,LT產生必要的輸入條件到Rx,然后從Tx測取IUT的反應是否合格。非測試輸入時LT不應影響IUT。以e>O且|e|>SJW時的測試為例,安排IUT發(fā)1幀在ID域帶填充位為顯位的幀。當發(fā)到第5個隱位時,LT延遲e將Rx變?yōu)轱@位,然后在延遲后的新采樣點(原P1+SJW)處為Rx建1個隱位值,此時IUT的輸出Tx將在LT提供的R/D跳變沿后一位按同步規(guī)則提供顯位,如圖3所示。上述測試設計基于如下原理:如果IUT動作正常,它將同步于LT提供的R/D跳變沿,并采到LT 提供的隱位,這時發(fā)出它的下一個填充位,填充位的R/D跳變沿已被IUT先前的同步所移動。如果同步不正常,或者跳轉的量不對,IUT將采到顯位,它會仲裁失敗而退出,不會再發(fā)送。測試的P的范圍是(SJW+1)~(NBT-P2-1)。這個設計不同于標準的7.7.4款。筆者認為7.7.4款的方法是不能達到目的的,該問題的詳細討論超出了本文的范圍,不再贅述。 需要指出的是,8.7.2款中的正在發(fā)送顯位的發(fā)送器,將不對e>0的R/D跳變沿作同步。這個要求與本文所述e>0時的同步問題是不同的。本文講的是發(fā)送器發(fā)隱位,它見到了其他發(fā)送器的R/D跳變沿;而8.7.2款只是描述CAN芯片的Tx、Rx分開作輸出、輸入測試時的特性,實際應用時是分不開的,不會遇到這種情形。 4 小 結 CAN的一般技術資料均提到,高速時的可靠性要比低速時的差,應用中能用低速就用低速。從上述位同步時鐘容差的分析可知,高速時時鐘容差小,所以一旦時鐘有問題就會影響同步與采樣。CAN標準ISO11898-1:2003僅考慮了部分場合的要求,對發(fā)送器仲裁階段未能同步的情況未作考慮,從而給出的容差結果偏寬,設計者有可能依此選用不合適的振蕩源,造成電子控制器(ECU)可靠性不夠。例如,現(xiàn)在已經有一些精度接近0.3%~2%的可修正的RC或 CMOS振蕩器,它們價格低,接近原CAN標準設計的容差,有可能被不適當地選用。所以對標準加以補充是十分必要的。隨著CAN應用的擴展,提高CAN工作頻率的努力也在繼續(xù)。一方面,有些應用可縮短傳送距離以使傳輸時間縮短,例如機器人、武器等;另一方面,CAN的性價比高,對這類應用有吸引力,在傳輸時間接近臨界情況的場合,更要注意時鐘容差的問題。
從另一個角度考慮解決問題的可能性是:將仲裁域中及仲裁后的第1個同步沿發(fā)送器與接收器的同步均設為硬同步。這種做法可以改善同步以后的采樣,但對同步以前的采樣沒有改善,它們仍然要求較高精度的時鐘來保證采樣點在緩沖段P1、P2之內。而且,過多的硬同步增加了對干擾進行不必要同步的機會,反而不是好事。因此這種方案是無價值的。 從分析可知,當重同步跳轉寬度SJW可選得較大時,容許的時鐘偏差就較大。不受限制的SJW相當于隨時執(zhí)行硬同步,小于P1、P2的SJW就使采樣點的變動較小。當總線上由于干擾出現(xiàn)假的R/D跳變沿,就會引起錯誤的重同步,小的SJW有助于降低讀錯概率。因此,兼顧減少出錯率與降低時鐘容錯限的要求,關鍵是設計一種性價比好的濾除干擾的辦法。
評論
查看更多