CAN基礎內容詳解——數據鏈路層

CAN總線的報文幀共分爲數據幀、遠程幀、錯誤幀、過載幀和幀間隔5種類型

數據幀:用於發送節點向接收節點傳送數據,是使用最多的幀類型。

遠程幀:用於接收節點向某個發送節點請求數據。

錯誤幀:用於當某節點檢測出錯誤時向其他節點通知錯誤的幀。

過載幀:用於接收節點向發送節點通知自身接收能力的幀。

幀間隔:用於將數據幀或遠程幀與前面的幀分離的幀。

一、數據幀

數據幀是使用最多的幀,它由7個不同的位場組成:幀起始、仲裁場、控制場、CRC場、應答場、幀結尾。其中根據仲裁段ID碼長度的不同,分爲標準幀和擴展幀。數據場的長度可以爲0。
在這裏插入圖片描述

1、幀起始和幀結束

幀起始和幀結束用於界定一個數據幀,無論是標準數據幀還是擴展數據幀都包含這兩個段。

幀起始標誌着數據幀和遠程幀的起始,由一個單獨的顯性位組成。總線空閒時,發送節點發送幀起始,其他接收節點同步於該幀起始位。

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

2、仲裁段

如果多個節點同時發送數據時該怎麼辦呢?CAN-bus是如何解決總線競爭的問題呢?

該問題由仲裁段給出答案。

CAN-bus並沒有規定節點的優先級,但通過仲裁段幀ID規定了數據幀的優先級。根據CAN2.0標準版本的不同,幀ID分爲11位和29位兩種。
在這裏插入圖片描述
總線仲裁
CAN控制器在發送數據的同時監測數據線的電平是否與發送數據對應電平相同,如果不同,則停止發送並做其他處理。
在這裏插入圖片描述
1)假設節點A、B和C都發送相同格式相同類型的幀,如標準格式數據幀,它們競爭總線的過程是:
在這裏插入圖片描述
從該分析過程得出結論是:幀ID值越小,優先級越高;

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

3)由於數據幀的RTR位爲顯性電平,遠程幀的RTR位爲隱性電平,所以幀格式和幀ID都相同情況下,數據幀的優先級比遠程幀優先級高:
在這裏插入圖片描述
節點B仲裁失敗退出發送,進入只聽模式;

節點A獲得總線,繼續發送剩餘數據。

4)由於標準幀的IDE位爲顯性電平,擴展幀的IDE位爲隱性電平,對於前11位ID相同的標準幀和擴展幀,標準幀優先級比擴展幀高。
在這裏插入圖片描述
當發送IDE位時,由於線與的原理,總線上出現顯性電平:

節點B仲裁失敗,進入只聽模式。

節點A獲得總線,繼續發送剩餘數據。

3、控制段

控制段共6位,標準幀的控制段由擴展幀標誌位IDE、保留位r0和數據長度代碼DLC組成;擴展幀控制段則由IDE、r1、r0和DLC組成。
在這裏插入圖片描述

4、數據段

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

5、CRC段

CAN-bus使用CRC校驗進行數據檢錯,CRC校驗值存放於CRC段。CRC校驗段由15位CRC值和1位CRC界定符構成。
在這裏插入圖片描述

6、ACK段

當一個接收節點接收的幀起始到CRC段之間的內容沒發生錯誤時,它將在ACK段發送一個顯性電平。
在這裏插入圖片描述

二、遠程幀

一個節點可以向另一個指定的節點發送遠程幀,以要求獲取數據。

與數據幀相比,遠程幀結構上無數據段,由6個段組成,同理分爲標準格式和擴展格式,且RTR位爲1(隱性電平)。
在這裏插入圖片描述
數據幀與遠程幀的區別如下:
在這裏插入圖片描述

三、錯誤幀

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

CAN-bus錯誤類型:

1、CRC錯誤

發送節點計算得到的CRC值與接收到的CRC值不同時發生錯誤

2、應答錯誤

發送節點在ACK階段沒有接收到應答信號時發生該錯誤

3、位發送錯誤

發送節點在發送時發現總線電平與發送電平不相同時發生該錯誤

4、位填充錯誤

通信線纜上傳輸信號違反“位填充”規則時發生該錯誤

5、格式錯誤

傳輸的數據幀格式與任何一種合法的幀格式不符時發生該錯誤

當出現5種錯誤類型之一時,發送或接收節點將發送錯誤幀。錯誤幀的結構如下,其中錯誤標識分爲主動錯誤標識和被動錯誤標識。
在這裏插入圖片描述
主動錯誤標識由6個顯性位組成,這違反了“位填充”規則。可以理解爲當一個節點發現通信錯誤時,它將會主動將幀徹底破壞掉,讓其他節點都知道它接收出錯了。

爲防止自身由於某些原因導致無法正常接收的節點一直髮送錯誤幀,干擾其他節點通信,CAN-bus規定了節點的3種狀態及其行爲。
在這裏插入圖片描述
【REC表示接收錯誤計數器,TEC表示發送錯誤計數器,復位時兩者都被清0。】

主動錯誤:設備正常參與總線通信,檢測到錯誤時發送主動錯誤標識。

被動錯誤:設備正常參與總線通信,檢測到錯誤時發送被動錯誤標識。

總線關閉:數據幀的收發都被禁止。

四、過載幀

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

過載幀結構:
在這裏插入圖片描述
由於存在多個節點同時過載且過載幀發送有時間差問題,可能出現過載標誌疊加後超過6個位的現象。在這裏插入圖片描述

五、幀間隔

幀間隔用於將數據幀或遠程幀和他們之前的幀分離開,但過載幀和錯誤幀前面不會插入幀間隔。
在這裏插入圖片描述
1、幀間隔過後,如果無節點發送幀,則總線進入空閒。
在這裏插入圖片描述
2、幀間隔過後,如果被動錯誤節點要發送幀,則先發送8個隱性電平的傳輸延遲,再發送幀。
在這裏插入圖片描述
保證主動錯誤節點優先發送,避免被動錯誤節點因硬件故障干擾整個網絡。

六、總結

CAN-bus整個鏈路層處理數據的流程是:
在這裏插入圖片描述
在收發報文的過程中,收發錯誤計數器會根據錯誤類型和節點狀態自動增減計數,如下:

1、復位時將錯誤計數器初始化爲0

2、檢測到一次失敗的傳輸,接收錯誤計數器REC加1

3、REC加8

4、成功收到一幀報文,REC減1

5、在發送時檢測到錯誤,發送錯誤計數器TEC加8

6、成功發送一幀報文,TEC減1

7、如果TEC小於127,TEC加8

8、如果TEC大於255,從CAN-bus斷開連接。

如果你想了解更多技術,可以關注公衆號(FieldBus-Hongke)。

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