1. 程式人生 > >CAN匯流排之CAN的報文格式--錯誤幀

CAN匯流排之CAN的報文格式--錯誤幀

一、幀

CAN協議的報文傳輸主要由下面的4種幀來實現: 資料幀:從傳送端攜帶資料到接收端。 遠端幀:匯流排單元發出遠端幀,請求傳送具有同一識別符的資料幀。 錯誤幀:任何單元檢測到一匯流排錯誤就發出錯誤幀。 過載幀:過載幀用以在先行的和後續的資料幀(或遠端幀)之間提供一附加的延時。

同時幀間空間用來間隔資料幀/遠端幀與其他幀。

1.資料幀

一個完整的資料幀有7部分組成,依次為幀起始(SOF)、仲裁場(Arbitration Field)、控制場(Control Field)、資料場(Data Field)、CRC場、應答場(ACK Field)、幀結尾(EOF)。

幀起始是資料幀和遠端幀開始的標誌,它是一個顯性位。一個CAN節點只有在匯流排處於空閒狀態時才可以傳送幀起始。

仲裁場在幀起始之後,控制場之前,共12位(注:協議的講解以CAN2.0A為基礎[3],CAN2.0B版本的仲裁場為32位[4])分為兩部分11位的識別符號和1位的遠端傳送請求位(RTR)。在資料幀中RTR為顯性,在遠端幀中RTR為隱性。所以如果相同識別符號的資料幀與遠端幀發生衝突,資料幀優先。

仲裁場之後便是控制場。控制場的頭兩位為保留位,為隱性。後面是資料長度程式碼(DataLengthCode)。資料長度程式碼指示了資料場中位元組的個數。資料長度的大小在DLC的表示。 DLC最大為8。 對於超出8的情況,各廠家有不同的實現。有的實現忽略“越界”DLC,傳輸8 bytes的資料和“錯誤”的DLC。有的傳輸8 bytes的資料並改DLC為8。有的直接不傳輸任何東西。 資料場在控制場之後,傳輸資料的長度由DLC決定。如果DLC為0,則沒有資料場。資料場中高位先傳輸。

CRC場在控制場和資料場之後,由CRC序列和界定符組成。CRC序列是幀起始,仲裁場,控制場和資料場組成的位流的CRC校驗值。其中CRC校驗的生成多項式為X15+ X 14+ X10+ X8+ X7+ X4+ X3+ 1。CRC序列之後是一個“隱性”CRC結束符。

CRC場之後便是應答場。應答場由2個位組成,應答位和應答結束符。發射單元會發送“隱性”的應答位和應答結束符至總線上。而接收單元如果接收到的資料都是有效的,會在發射單元傳送應答位的同時傳送一個“顯性”位至總線上,所以一個有效的資料幀,應答位在總線上應該表現為“顯性”。

資料幀的最後為幀結尾,由7個連續的“隱性”位組成。

2.遠端幀

遠端幀的主要作用是向其他的CAN節點發送資料請求,傳送相同識別符號的資料幀。與資料幀相比,遠端幀的RTR位是隱性的,而且沒有資料場。DLC中的值是資料幀的資料長度。

3.錯誤幀

錯誤幀由錯誤標誌的疊加和結束符組成。 錯誤標誌有主動錯誤標誌與被動錯誤標誌。主動錯誤標誌為6個顯性位,被動錯誤標誌為6個隱性位。 錯誤主動節點與錯誤被動節點(參考“CAN節點的錯誤狀態”)對錯誤的反應是不一樣的。

當錯誤主動節點檢測到錯誤時,會發送主動錯誤標誌。而主動錯誤標誌又會影響總線上原有傳輸內容的結構,從而讓其他未檢測到錯誤的節點發現錯誤。一種情況是錯誤幀破壞了應答場和幀結尾的固有形式;另一種情況是錯誤幀破壞了位填充規則。當其他節點發現錯誤後,也會發送錯誤幀。這樣就會造成一個錯誤標誌的疊加會有6-12bits大小。

上圖演示了第二種情況時的各個節點發送錯誤幀的情況。節點1首先檢測到錯誤,傳送錯誤幀,在連續傳送了6個顯性位之後,節點2和3檢測到位填充錯誤,也傳送錯誤幀。這樣總線上錯誤幀的疊加就達到了12位。

所有節點發送完錯誤標誌之後就會發送一個隱性位,並監控匯流排,直到總線上出現一個隱性位。然後在傳送7個隱性位。這樣一個錯誤幀就傳送完畢了。

4.過載幀

過載幀與主動錯誤幀非常類似,特別是位的組成和全域性化的過程。主要的差別在於錯誤幀發生著資料幀,遠端幀期間。而過載幀發生於間歇欄位期間。 過載幀是由過載標誌的疊加和過載結束符組成。有兩種情況可以觸發過載幀: CAN節點的內部需求,例如需要時間準備資料幀的資料。這種情況下過載幀只允許起始於幀間隔的第一個位。 在幀間隔內偵測到顯性位。這種情況下,過載幀起始於檢測到顯性位的後一位。 過載標誌由6個顯性位組成,過載幀破壞了間歇欄位的結構從而導致了過載幀的全域性化。發完過載標誌後,CAN節點會往匯流排傳送隱性位,並監控匯流排直至出現隱性位。然後再發送7個隱性位。

e.幀間空間 資料幀與遠端幀的前面必然有幀間空間。對於主動錯誤節點和被動錯誤節點,幀間空間的結構稍有不同。對於主動錯誤節點,幀間空間由3個顯性位的間歇欄位和匯流排空閒組成。在間歇欄位不允許傳送資料幀與遠端幀。匯流排空閒的長度任意,當有顯性位時就被認為是幀起始。 被動錯誤標誌除了上邊兩部分外,在間歇欄位之後還有8個顯性位的掛起傳輸。在掛起傳輸階段被動錯誤節點不可以傳送資料幀與遠端幀。

CAN匯流排報文淺析 CAN的報文格式 在匯流排中傳送的報文,每幀由7部分組成。CAN協議支援兩種報文格式,其唯一的不同是識別符號(ID)長度不同,標準格式為11位,擴充套件格式為29位。 在標準格式中,報文的起始位稱... ---------------------  作者:SolDogLiLi  來源:CSDN  原文:https://blog.csdn.net/guoxinlan123/article/details/79398875?utm_source=copy  版權宣告:本文為博主原創文章,轉載請附上博文連結!