CAN匯流排原理_學習

konglingbin發表於2024-04-20
  隨著通訊技術的發展,現今通訊方式和協議五花八門,但CAN通訊仍然是車載網路最安全可靠且應用最廣的技術之一。
  過去,汽車通常採用常規的點對點通訊方式將電子控制單元及電子裝置連線起來,但隨著電子裝置的不斷增加,導線數量也隨之增多,採用CAN匯流排網路結構,可以達到資訊共享、減少佈線、降低成本以及提高總體可靠性的目標。
  總的來說CAN匯流排有以下幾點優勢:
①資料傳輸速度相對較高,可達到1Mbit/s。(CAN-FD和CAN-XL分別可以達到2Mbit/s和10Mbit/s。)
②採用差分資料線,抗干擾能力強;
③多主通訊模式,大幅減少單點通訊線束成本;
④具有錯誤偵聽的自我診斷功能,通訊可靠信較高。

  CAN協議和CANOpen協議是兩套不同的協議。從軟硬體層次來劃分,CAN協議屬於硬體協議,而CANOpen屬於軟體協議。

  本文將概述CAN網路,讓大家對CAN匯流排協議有一個全域性的概念,再到底層的CAN匯流排協議知識。

CAN網路

CAN網路可以理解為多臺CAN裝置連線在同一條CAN匯流排上組合成的網路,其中的CAN裝置我們稱之為節點。CAN網路拓撲結構如下圖:

如上圖,一個CAN節點主要包含三類:MCU應用程式、CAN控制器、CAN收發器。

1. MCU應用程式

MCU應用程式我將其分為三塊:業務邏輯程式碼、協議層程式碼、底層驅動程式碼。

A.業務邏輯程式碼:是根據專案需求而定,也很好理解。比如我讀取一個感測器資料,並對其做出相應邏輯處理。

B.協議層程式碼:比如後續要講述的CANOpen。

C.底層驅動程式碼:配置CAN匯流排相應引數、控制收發的程式碼。

2.CAN控制器

CAN控制器內部結構還是挺複雜的,一般現在CAN控制器都是與處理器整合在一起。

其實對於程式設計的人來說,無非也就是包含一些控制、狀態、配置等暫存器。

比如我們看到有些STM32晶片帶有CAN,也就是說CAN控制器已經整合在STM32晶片中了,我們只需要程式設計操作其中的暫存器即可。

3.CAN收發器

CAN收發器:將CAN收發引腳(CAN_TX和CAN_RX)的TTL訊號轉換成CAN匯流排的電平訊號。

PS:你可以把CAN匯流排通訊認為是UART透過485進行通訊:CAN控制器就如UART的控制器,而CAN收發器就如485轉換晶片。

如圖1所示是一個CAN節點的示意圖,整體包括了CAN收發器、CAN控制器和MCU。我們以節點傳送報文為例,當我們使用上位機軟體傳送一段報文時,報文會透過MCU傳送給CAN控制器。CAN控制器將這段報文解析成邏輯訊號後,再傳送給CAN收發器。CAN收發器根據CAN-bus標準將接收到的邏輯訊號轉換成電訊號,再透過CAN_H和CAN_L兩根匯流排將電訊號傳到匯流排上的其他節點上。

簡單說就是MCU將報文傳送給控制器,控制器將報文轉換成符合規範的CAN報文後,透過CAN收發器以電訊號的形式在匯流排上進行傳輸。

ISO標準化的CAN協議
瞭解CAN匯流排位於OSI所在層次。

1.ISO/OSI基本參照模型

【注】

ISO:International Standardization Organization國際標準化組織;

OSI:Open Systems Interconnection開放式系統間互聯;

2.CAN在OSI模型中的定義

【注】

LLC:Logical Link Control邏輯鏈路控制;

MAC:Medium Access Control媒介訪問控制;

從上圖可以知道CAN匯流排底層硬體的內容(CAN控制器、收發器)主要位於OSI的第1層和第2層。

概述CAN匯流排協議
CAN匯流排協議:就是為了保證通訊(收發)資料在CAN匯流排上能穩定傳輸而制訂的一套協議。

CAN匯流排協議的內容很多,為方便初學者理解,本文先大概描述一下CAN匯流排協議,後續文章詳細講述CAN匯流排協議的內容。

1.匯流排訊號

CAN匯流排為「兩線」「差分」訊號,用隱形代表邏輯1,顯性代表邏輯0。如下圖:

2.優先順序

假如某一時刻,一個裝置(節點)往匯流排發0,一個裝置往匯流排發1。那麼匯流排會呈現什麼現象?

答案:最後匯流排呈現為顯性,也就是0。

3.位時序

位時序邏輯將監視序列匯流排,執行取樣並調整取樣點,在調整取樣點時,需要在起始位邊沿進行同步並後續的邊沿進行再同步。

簡單的說就是對一個bit位分幾段進行取樣,目的就是提高資料傳輸穩定性。在STM32中底層驅動程式碼就需要進行位時序程式設計,在STM32參考手冊中也會發現如下位時序圖:

4.幀的種類和格式

幀的種類有多種:

資料幀:用於傳送單元向接收單元傳送資料的幀。

遙控幀:用於接收單元向具有相同 ID 的傳送單元請求資料的幀。

錯誤幀:用於當檢測出錯誤時向其它單元通知錯誤的幀。

過載幀:用於接收單元通知其尚未做好接收準備的幀。

幀間隔:用於將資料幀及遙控幀與前面的幀分離開來的幀。

資料幀和遙控幀有標準格式和擴充套件格式兩種格式。標準格式有11個位的識別符號ID,擴充套件格式有29個位的ID。

邏輯訊號如何轉換成報文?

CAN控制器是CAN-bus裝置的核心元件,整合了CAN規範中資料鏈路層的全部功能,能夠自動完成CAN-bus協議的解析。

當CAN收發器將邏輯訊號傳送給CAN控制器後,CAN控制器會將邏輯訊號轉換成符合CAN規範的CAN幀。而CAN幀的型別包括了資料幀、遠端幀、幀間空間、錯誤幀和超載幀。

5.位填充

位填充是為防止突發錯誤而設定的功能。當同樣的電平持續 5 位時則新增一個位的反型資料。如下圖:

6.錯誤的種類

節點的錯誤狀態有三種,主動錯誤狀態、被動錯誤狀態、匯流排關閉狀態。
主動錯誤狀態:節點處於主動錯誤狀態可以正常通訊,處於主動錯誤狀態的節點(可能是接收節點也可能是傳送節點)在檢測出錯誤時,發出主動錯誤標誌。
被動錯誤狀態:節點處於被動錯誤狀態可以正常通訊,處於被動錯誤狀態的節點(可能是接收節點也可能是傳送節點)在檢測出錯誤時,發出被動錯誤標誌。
匯流排關閉狀態:節點處於匯流排關閉狀態不能收發報文,只能一直等待,在滿足一定條件時才能再次進入到主動錯誤狀態正常收發報文。

CAN匯流排的軟體報文

在上面這組報文中:

仲裁域,每組報文開頭內容,前11位字元為識別符號,定義了報文的優先順序,這種報文格式稱為面向內容的編址方案。在同一系統中識別符號是唯一的,不可能有兩個站傳送具有相同識別符號的報文。當幾個站同時競爭匯流排讀取時,這種配置十分重要。

在仲裁域的最後一位是遠端傳輸請求位(RTR),代表資訊幀是資料幀還是不包含任何資料的遠地請求幀

控制域,前兩位是保留位,作為擴充套件位,DLC表示一幀中資料位元組的數目。

資料域,包含0~8位元組的資料。

校驗域,檢驗位錯用的迴圈冗餘校驗域,共15位。

結束域,由七位隱性電平組成。

CAN匯流排是可靠性很高的匯流排,共有五種錯誤:

CRC錯誤:傳送與接收的CRC值不同發生該錯誤;

格式錯誤:幀格式不合法發生該錯誤;

應答錯誤:傳送節點在ACK階段沒有收到應答資訊發生該錯誤;

位傳送錯誤:傳送節點在傳送資訊時發現匯流排電平與傳送電平不符發生該錯誤;

位填充錯誤:通訊線纜上違反通訊規則時發生該錯誤。

當發生這五種錯誤之一時,傳送節點或接受節點將傳送錯誤幀。

CAN節點計數器如何計數:

參考:https://blog.csdn.net/ybhuangfugui/article/details/122852410

https://cloud.tencent.com/developer/article/1635247

https://blog.csdn.net/cai88453626/article/details/131877267

https://www.yoojia.com/ask/17-11637129403634925760.html

相關文章