CAN總線數據幀/標準幀/擴展幀/遠程幀/錯誤幀的組成格式對比

最近在研究CAN總線的驅動,需要詳細瞭解數據幀/標準幀/擴展幀/遠程幀/錯誤幀這幾種幀的詳細組成格式,於是收集了一下,統一放在這裏進行對比和記錄,以便日後需要時查閱。

1、數據幀-標準幀

CAN 標準數據幀如下圖所示。與其他所有幀一樣,幀以起始幀 (SOF)位開始, SOF 爲顯性狀態,允許所有節點的硬同步。

SOF之後是仲裁字段,由12個位組成,分別爲11個標識位和一個遠程發送請求(Remote Transmission
Request, RTR)位。 RTR 位用於區分報文是數據幀(RTR 位爲顯性狀態)還是遠程幀 (RTR 位爲隱性狀態)。

仲裁字段之後是控制字段,由 6 個位組成。控制字段的第一位爲標識擴展(Identifier Extension,IDE)位,該位應是顯性狀態來指定標準幀。標識擴展位的下一位爲零保留位(RB0),CAN 協議將其定義爲顯性位。控制字段的其餘 4 位爲數據長度碼 (Data Length Code,DLC),用來指定報文中包含的數據字節數 (0 到 8 字節)。

控制字段之後爲數據字段,包含要發送的任何數據字節。數據字段長度由上述 DLC 定義 (0 到 8 字節)。數據字段之後爲循環冗餘校驗(CRC)字段,用來檢測報文傳輸錯誤。CRC 字段包含一個 15 位的 CRC 序列,之後是隱性的 CRC 定界位。

最後一個字段是確認字段 (ACK),由 2 個位組成。在確認時隙(ACK Slot)位執行期間,發送節點發出一個隱性位。任何收到無錯誤幀的節點會發回一個顯性位(無論該節點是否配置爲接受該報文與否)來確認幀收到無誤。確認字段以隱性確認定界符結束,該定界符可能不允許被改寫爲顯性位。
在這裏插入圖片描述

2、數據幀-擴展幀

在擴展 CAN 數據幀中(如下圖所示),緊隨 SOF 位的是 32 位的仲裁字段。仲裁字段的前 11 位爲 29 位標識符的最高有效位(Most Significant bit,MSb)(基本lD) 。緊隨這 11 位的是替代遠程請求(Substitute Remote Request, SRR)位,定義爲隱性狀態。 SRR位之後是 lDE 位,該位爲隱性狀態時表示這是擴展的CAN 幀。

應該注意的是,如果發送完擴展幀標識符的前 11 位後,總線仲裁無果,而此時其中一個等待仲裁的節點發出標準 CAN 數據幀 (11 位標識符),那麼,由於節點發出了顯性 lDE 位而使標準 CAN 幀贏得總線仲裁。另外,擴展 CAN 幀的 SRR 位應爲隱性,以允許正在發送標準CAN 遠程幀的節點發出顯性 RTR 位。

SRR和lDE位之後是標識符的其餘18位(擴展lD)及一個遠程發送請求位。

爲使標準幀和擴展幀都能在共享網絡上發送,應將29位擴展報文標識符拆成高 11 位和低 18 位兩部分。拆分後可確保 lDE 位在標準數據幀和擴展數據幀中的位置保持一致。

仲裁字段之後是 6 位控制字段。控制字段前兩位爲保留位,必須定義爲顯性位。其餘 4 位爲 DLC,用來指定報文中包含的數據字節數。

擴展數據幀的其他部分 (數據字段、 CRC 字段、確認字段、幀結尾和間斷)與標準數據幀的結構相同。
在這裏插入圖片描述

3、遠程幀

通常,數據傳輸是由數據源節點(例如,傳感器發出數據幀)自主完成的。但也可能存在目標節點向源節點請求發送數據的情況。要做到這一點,目標節點需發送一個遠程幀,其中的標識符應與所需數據幀的標識符相匹配。隨後,相應的數據源節點會發送一個數據幀以響應遠程幀請求。

遠程幀 與數據幀存在兩點不同:

1)遠程幀的 RTR 位爲隱性狀態;
2)遠程幀沒有數據字段。

當帶有相同標識符的數據幀和遠程幀同時發出時,數據幀將贏得仲裁,因爲其標識符後面的 RTR 位爲顯性。這樣,可使發送遠程幀的節點立即收到所需數據。
在這裏插入圖片描述

4、主動錯誤幀

當錯誤主動節點檢測到一個總線錯誤時,這個節點將產生一個主動錯誤標誌來中斷當前的報文發送。主動錯誤標誌由 6 個連續的顯性位構成。這種位序列主動打破了位填充規則。所有其他節點在識別到所生成的位填充錯誤後,會自行產生錯誤幀,稱爲錯誤反射標誌。

錯誤標誌字段因此包含 6 到 12 個連續顯性位 (由 1 個或多個節點產生)。錯誤定界字段 (8 個隱性位)爲錯誤幀劃上句號。在錯誤幀發送完畢後,總線主動恢復正常狀態,被中斷的節點會嘗試重新發送被中止的報文。
在這裏插入圖片描述

5、過載幀

過載幀與主動錯誤幀具有相同的格式。

但是,過載幀只能在幀間間隔產生,因此可通過這種方式區分過載幀和錯誤幀 (錯誤幀是在幀傳輸時發出
的)。過載幀由兩個字段組成,即過載標誌和隨後的過載定界符。過載標誌由 6 個顯性位和緊隨其後的其他節點產生的過載標誌構成 (而主動錯誤標誌最多包含 12個顯性位)。過載定界符包含 8 個隱性位。節點在兩種情況下會產生過載幀:

1)節點在幀間間隔檢測到非法顯性位。在 IFS 的第三位期間檢測到顯性位除外。這種情況下,接收器會把它看作一個 SOF 信號。
2)由於內部原因,節點尚無法開始接收下一條報文。節點最多可產生兩條連續的過載幀來延遲下一條報文的發送。
在這裏插入圖片描述

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