CAN匯流排學習筆記(1)- CAN基礎知識
依照瑞薩公司的《CAN入門書》的組織思路來學習CAN通訊的相關知識,並結合網上相關資料以及學習過程中的領悟整理成筆記。好記性不如爛筆頭,加油!
1 CAN的一些基本概念
1.1 什麼是CAN匯流排
CAN 是 Controller Area Network 的縮寫,是 ISO 國際標準化的序列通訊協議。通俗來講,CAN匯流排就是一種傳輸資料的線,用於在不同的ECU之間傳輸資料。
CAN匯流排有兩個ISO國際標準:ISO11898 和 ISO11519。其中:
- ISO11898 定義了通訊速率為 125 kbps~1 Mbps 的高速 CAN 通訊標準,屬於閉環匯流排,傳輸速率可達1Mbps,匯流排長度 ≤ 40米。
- ISO11519 定義了通訊速率為 10~125 kbps 的低速 CAN 通訊標準,屬於開環匯流排,傳輸速率為40kbps時,匯流排長度可達1000米。
Tips: <匯流排的傳輸速率>:又稱為匯流排的通訊速率,指的是位速率。或稱為位元率(和波特率不是一回事),表示的是:單位時間內,通訊線路上傳輸的二進位制位的數量,其基本單位是 bps 或者 b/s (bit per second)。
1.2 CAN的拓撲結構
下圖中,左邊是高速CAN匯流排的拓撲結構,右邊是低速CAN匯流排的拓撲結構。
如圖中所示,CAN匯流排包括CAN_H 和 CAN_L 兩根線。節點通過CAN控制器
Tips :通常來講,ECU內部集成了CAN控制器和CAN收發器,但是也有沒整合的,需要自己外加。
1.3 CAN訊號表示
在CAN總線上,利用CAN_H和CAN_L兩根線上的電位差來表示CAN訊號。CAN總線上的電位差分為顯性電平和隱性電平。其中顯性電平為邏輯0,隱性電平為邏輯1。
ISO11898標準(125kbps ~ 1Mbps)和ISO11519標準(10kbps ~ 125kbps)中CAN訊號的表示分別如下所示:
1.4 CAN訊號傳輸
傳送過程:
CAN控制器將CPU傳來的訊號轉換為邏輯電平(即邏輯0-顯性電平或者邏輯1-隱性電平)。CAN發射器接收邏輯電平之後,再將其轉換為差分電平輸出到CAN總線上。
接收過程:
CAN接收器將CAN_H 和 CAN_L 線上傳來的差分電平轉換為邏輯電平輸出到CAN控制器,CAN控制器再把該邏輯電平轉化為相應的訊號傳送到CPU上。
概括的講:
- 傳送方通過使匯流排電平發生變化,將其資訊傳遞到CAN總線上。
- 接收方通過監聽匯流排電平,將總線上的訊息讀入自己的接收器。
2 CAN通訊的特點
2.1 多主工作方式
所謂多主工作方式,指的是:總線上的所有節點沒有主從之分,大家都處於平等的地位。反應在資料傳輸上,即是:在匯流排空閒狀態,任意節點都可以向總線上傳送訊息。
Tips: <匯流排空閒狀態>:當總線上的上出現連續的11位隱性電平,那麼匯流排就處於空閒狀態。也就是說對於任意一個節點而言,只要它監聽到總線上連續出現了11位隱性電平,那麼該節點就會認為匯流排當前處於空閒狀態,它就會立即向總線上傳送自己的報文。
至於為什麼連續出現11位隱性電平,就可以判定+匯流排處於空閒狀態,這個問題可以結合CAN協議的幀結構來進行理解。
在多主工作方式下:
- 最先向匯流排傳送訊息的節點獲得匯流排的傳送權;
- 當多個節點同時向匯流排傳送訊息時,所傳送訊息的優先權高的那個節點獲得匯流排的傳送權。
例如:Node_A和Node_B同時向匯流排傳送各自的訊息Msg_1和Msg_2,如果Msg_1的優先順序比Msg_2高,那麼Node_A就獲得了匯流排的傳送權。
2.2 非破壞性位仲裁機制
在CAN協議中,所有的訊息都以固定的幀格式傳送。當多個節點同時向匯流排傳送訊息時,對各個訊息的識別符號(即ID號)進行逐位仲裁,如果某個節點發送的訊息仲裁獲勝,那麼這個節點將獲取匯流排的傳送權,仲裁失敗的節點則立即停止傳送並轉變為監聽(接收)狀態。
例如:Node_A和Node_B同時向匯流排傳送各自的訊息Msg_1和Msg_2,那麼對Msg_1的ID號ID_1和Msg_2的ID號ID_2進行逐位仲裁,如果仲裁結果是:ID_1的優先順序比ID_2高,那麼Msg_1在仲裁中獲勝,於是發出Msg_1這條報文的節點Node_A就獲得了匯流排的傳送權。同時,Msg_2在仲裁中失敗,於是Node_B就轉換到監聽匯流排電平的狀態。
這種仲裁機制既不會造成已傳送資料的延遲,也不會破壞已經發送的資料,所以稱為非破壞性仲裁機制。這種仲裁方式的實現機制參見本系列筆記的第二篇CAN協議資料幀與遙控幀中的介紹。
2.3 系統的柔性
CAN總線上的節點沒有“地址”的概念,因此在總線上增加節點時,不會對總線上已有節點的軟硬體及應用層造成影響。
2.4 通訊速度
在同一條CAN線上,所有節點的通訊速度(位速率)必須相同,如果兩條不同通訊速度總線上的節點想要實現資訊互動,必須通過閘道器。
例如:汽車上一般有兩條CAN匯流排:500kbps的驅動系統CAN匯流排和125kbps的舒適系統CAN匯流排,如果驅動系統CAN總線上的發動機節點要把自己的轉速資訊傳送給舒適系統CAN總線上的轉速錶節點,那麼這兩條匯流排必須通過閘道器相連。
2.5 資料傳輸方式
CAN匯流排可以實現一對一,一對多以及廣播的資料傳輸方式,這依賴於驗收濾波技術。驗收濾波技術的實現機制參見本系列筆記的第二篇CAN協議幀結構中的介紹。
2.6 遠端資料請求
某個節點Node_A可以通過傳送“遙控幀”到總線上的方式,請求某個節點Node_B來發送由該遙控幀所指定的報文。具體實現方式參見本系列筆記的第二篇CAN協議幀結構中的介紹。
2.7 錯誤檢測、錯誤通知、錯誤恢復功能
- 所有的節點都可以檢測出錯誤(錯誤檢測功能);
- 檢測出錯誤的節點會立即通知總線上其它所有的節點(錯誤通知功能);
- 正在傳送訊息的節點,如果檢測到錯誤,會立即停止當前的傳送,並在同時不斷地重複傳送此訊息,直到該訊息傳送成功為止(錯誤恢復功能)。
2.8 故障封閉
節點能夠判斷錯誤的型別,判斷是暫時性的資料錯誤(如噪聲干擾)還是持續性的資料錯誤(如節點內部故障),如果判斷是嚴重的持續性錯誤,那麼節點就會切斷自己與匯流排的聯絡,從而避免影響總線上其他節點的正常工作。
CAN通訊的上述特點都是基於CAN協議所定義的多種幀結構來實現的,因此,在下一篇筆記對CAN的幀結構有了瞭解之後,再做進一步的詳細解釋。
3 CAN通訊網路結構
3.1 OSI基本參照模型
實際上,CAN匯流排網路底層只採用了OSI基本參照模型中的資料鏈路層、傳輸層。而在CAN網路高層僅採用了OSI基本參照模型的應用層
3.2 CAN協議網路層次
在CAN協議中,ISO標準只對資料鏈路層和物理層做了規定。對於資料鏈路層和物理層的一部分,ISO11898和ISO11519-2的規定是相同,但是在物理層的PMD子層和MDI子層是不同的。
在CAN匯流排,每一層網路中定義的事項如下: