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