SylixOS CAN總線報文淺析

  1. CAN的報文格式

    在總線中傳送的報文,每幀由7部分組成。CAN協議支持兩種報文格式,其唯一的不同是標識符(ID)長度不同,標準格式爲11位,擴展格式爲29位。

    在標準格式中,報文的起始位稱爲幀起始(SOF),然後是由11位標識符和遠程發送請求位(RTR)組成的仲裁場。RTR位標明是數據幀還是請求幀,在請求幀中沒有數據字節。

    控制場包括標識符擴展位(IDE),指出是標準格式還是擴展格式。它還包括一個保留位 (ro),爲將來擴展使用。它的最後四個位用來指明數據場中數據的長度(DLC)。數據場範圍爲0~8個字節,其後有一個檢測數據錯誤的循環冗餘檢查(CRC)。

    應答場(ACK)包括應答位和應答分隔符。發送站發送的這兩位均爲隱性電平(邏輯1),這時正確接收報文的接收站發送主控電平(邏輯0)覆蓋它。用這種方法,發送站可以保證網絡中至少有一個站能正確接收到報文。

    報文的尾部由幀結束標出。在相鄰的兩條報文間有一很短的間隔位,如果這時沒有站進行總線存取,總線將處於空閒狀態。

    如圖11所示,具體某一位或某幾位下面會詳細介紹。

    11 CAN總線報文結構

  2. 數據幀

    數據幀是使用最多的幀,結構上由7段組成,其中根據仲裁段ID碼長度的不同,分爲標準幀(CAN2.0A)和擴展幀(CAN2.0B)。

    數據幀是由:幀起始,仲裁斷,控制端,數據段,CRC段,ACK段和幀結束構成。

    如圖21所示(具體的幀結構下面會詳細介紹)。

    2–1數據幀類型及結構

  3. 幀起始和幀結束

    幀起始:由單個顯性位組成,總線空閒時,發送節點發送幀起始,其他接收節點同步於該幀起始位。

    幀結束:由7個連續的隱形位組成。

    (注:顯性電平和隱性電平是相對於CAN_H和CAN_L而言的差分信號電平,並非TTL電平上的高低電平,需要注意)如圖2-2所示

     

    2–2幀起始和幀結束

  4. 仲裁段

    CAN-bus是如何解決多個節點同時發送數據,即總線競爭的問題?該問題由仲裁段給出答案。

    CAN-bus並沒有規定節點的優先級,但通過仲裁段幀ID規定了數據幀的優先級。根據CAN2.0標準版本不同,幀ID分爲11位和29位兩種。如圖23所示

     

    2–3數據幀結構

    如圖24所示CAN控制器在發送數據的同時監測數據線的電平是否與發送數據對應電平相同,如果不同,則停止發送並做其他處理。

    2–4仲裁處理

    假設節點A、B和C都發送相同格式相同類型的幀,如標準格式數據幀,它們競爭總線的過程是(如圖16所示):

    2–5仲裁機制

    從該分析過程得出結論是:幀ID值越小,優先級越高;

    對於同爲擴展格式數據幀、標準格式遠程幀和擴展格式遠程幀的情況同理

  5. 控制段

    控制段共6位,標準幀的控制段由擴展幀標誌位IDE、保留位r0和數據長度代碼DLC組成;擴展幀控制段則由IDE、r1、r0和DLC組成如圖17所示。

    2–6數據幀結構

  6. 數據段

    一個數據幀傳輸的數據量爲0~8個字節,這種短幀結構使得CAN-bus實時性很高,非常適合汽車和工控應用場合如圖27所示。

    2–7數據段

    數據量小,發送和接收時間短,實時性高,被幹擾的概率小,抗干擾能力強。

  7. CRC段

    CAN-bus使用CRC校驗進行數據檢錯,CRC校驗值存放於CRC段。 CRC校驗段由15位CRC值和1位CRC界定符構成如圖28所示。

    2–8CRC

  8. ACK段

    當一個接收節點接收的幀起始到CRC段之間的內容沒發生錯誤時,它將在ACK段發送一個顯性電平如圖29所示。

    2–9 ACK

  9. 遠程幀

    與數據幀相比,遠程幀結構上無數據段,由6個段組成,同理分爲標準格式和擴展格式,且RTR位爲1(隱性電平)如圖31所示。

    3–1遠程幀結構

    如下圖所示由於數據幀的RTR位爲顯性電平,遠程幀的RTR位爲隱性電平。

    所以幀格式和幀ID都相同情況下,數據幀的優先級比遠程幀優先級高如圖32所示:

    3–2數據幀於遠程幀仲裁機制

     

    3–3數據幀遠程幀比較

    數據幀與遠程幀的區別如圖33所示。

     

  10. 錯誤幀

    儘管CAN-bus是可靠性很高的總線,但依然可能出現錯誤;CAN-bus的錯誤類型共有5種(如圖41所示)。

    4–1錯誤幀類型

    當出現5種錯誤類型之一時,發送或接收節點將發送錯誤幀。錯誤幀的結構如下,其中錯誤標識分爲主動錯誤標識和被動錯誤標識如圖42所示。

    4–2錯誤幀電平結構

    爲防止自身由於某些原因導致無法正常接收的節點一直髮送錯誤幀,干擾其他節點通信,CAN-bus規定了節點的3種狀態及其行爲如圖43所示。

    4–3錯誤處理機制

    (注:這些錯誤處理的機制是由硬件自主完成的這樣做的目的就是隻要CAN在收到數據肯定是正確的數據)。

     

  11. 過載幀與幀間隔

  12. 過載幀

    當某個接收節點沒有做好接收下一幀數據的準備時,將發送過載幀以通知發送節點;過載幀由過載標誌和過載幀界定符組成如所示圖51。

    5–1過載幀結構

    由於存在多個節點同時過載且過載幀發送有時間差問題,可能出現過載標誌疊加後超過6個位的現象如所示圖52。

    5–2過載幀具體結構

  13. 幀間隔

    幀間隔用於將數據幀或遠程幀和他們之前的幀分離開,但過載幀和錯誤幀前面不會插入幀間隔。

    幀間隔過後,如果無節點發送幀,則總線進入空閒。

    幀間隔過後,如果被動錯誤節點要發送幀,則先發送8個隱性電平的傳輸延遲,再發送幀。

  14. CAN總線發送總流程

    CAN-bus整個鏈路層處理數據的流程是如圖61所示:

    6–1CAN總線發送總流程

     

  15. 參考資料

    《項目驅動--CAN-BUS現場總線基礎教程----周立功,黃曉清》。

    《現場總線技術及其應用第二版–清華大學出版社》。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章