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