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