CAN匯流排之CAN的報文格式

2021-08-15 21:36:35 字數 2840 閱讀 6197

(來自部落格:

一、幀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協議的報文傳輸過程中有 資料幀 遠端幀 錯誤幀 過載幀和幀間隔。1.資料幀 用於傳送節點向接收節點傳送資料的幀。2.遠端幀 用於接收節點向具有相同id的傳送節點傳送資料的幀。3.錯誤幀 用於當檢測出錯誤時向其他節點通知錯誤的幀。4.過載幀 用於接收節點通知其尚未做好準備的幀。5.幀間隔 用於將...

can幀格式 dlc CAN報文格式

can協議的報文傳輸過程中有 資料幀 遠端幀 錯誤幀 過載幀和幀間隔。1.資料幀 用於傳送節點向接收節點傳送資料的幀。2.遠端幀 用於接收節點向具有相同id的傳送節點傳送資料的幀。3.錯誤幀 用於當檢測出錯誤時向其他節點通知錯誤的幀。4.過載幀 用於接收節點通知其尚未做好準備的幀。5.幀間隔 用於將...

CAN匯流排協議 CAN訊息之「報文型別」

can有四種不同的報文型別 資料幀 遠端幀 錯誤指示幀和超載幀。1 資料幀 can協議有兩種資料幀型別 標準can和擴充套件can 見上文 乙個資料幀中包括7個主要的域 幀起始域 標誌資料幀的開始,由乙個顯性位組成。仲裁域 內容由標示符和遠端傳輸請求位 rtr 組成,rtr用以表明此資訊幀是資料幀還...