日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CAN通信详解

發(fā)布時間:2024/3/12 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CAN通信详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一. CAN是什么?


CAN,全稱為“Controller Area Network”,即控制器局域網(wǎng),是一種多主方式的串行通訊總線,是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。

二. CAN的起源


在當(dāng)前的汽車產(chǎn)業(yè)中,出于對安全性、舒適性、方便性、低公害、低成本的要求,各種各樣的電子控制系統(tǒng)被開發(fā)了出來。由于這些系統(tǒng)之間通信所用的數(shù)據(jù)類型及對可靠性的要求不盡相同,由多條總線構(gòu)成的情況很多,線束的數(shù)量也隨之增加。為適應(yīng)“減少線束的數(shù)量”、“通過多個 LAN,進(jìn)行大量數(shù)據(jù)的高速通信”的需要,1986 年德國電氣商博世公司開發(fā)出面向汽車的 CAN 通信協(xié)議。此后,CAN 通過 ISO11898 及 ISO11519 進(jìn)行了標(biāo)準(zhǔn)化,現(xiàn)在在歐洲已是汽車網(wǎng)絡(luò)的標(biāo)準(zhǔn)協(xié)議,同時它具有很高的可靠性,被廣泛應(yīng)用于:汽車電子、工業(yè)自動化、船舶、醫(yī)療設(shè)備、工業(yè)設(shè)備等方面。

三. CAN的物理層

CAN總線是一種分布式的控制總線,它的網(wǎng)絡(luò)由很多CAN節(jié)點構(gòu)成,每個節(jié)點均由一個MCU(微控制器)、一個CAN控制器和一個CAN收發(fā)器構(gòu)成,然后使用雙絞線連接到CAN網(wǎng)絡(luò)中。另外,在CAN總線的起止端都有一個120Ω的終端電阻,用來做阻抗匹配,以減少回波反射。
其網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如下圖所示:

CAN 控制器是根據(jù)CAN_L和CAN_H上的電位差(即差分信號的形式)來判斷總線電平。總線總線電平分為顯性電平(對應(yīng)邏輯0,電位差為2V左右)和隱性電平(對應(yīng)邏輯1,電位差為0V),二者必居其一。發(fā)送方通過使總線電平發(fā)生跳變,將消息發(fā)送給接收方。

顯性電平和隱性電平
總線上的電平有顯性電平和隱性電平兩種。
顯性電平的邏輯值為“0”,隱性電平為“1”。
“顯性”具有“優(yōu)先”的意味,只要有一個單元輸出顯性電平,總線上即為顯性電平。并且,“隱性”具有“包容”的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平(顯性電平比隱性電平更強(qiáng))。

四. CAN的特點


CAN 協(xié)議具有以下特點。
(1) 多主控制(I2C有主從機(jī)之分,CAN無所謂主機(jī)從機(jī))
在總線空閑時,所有的單元都可開始發(fā)送消息(多主控制)。
“最先”訪問總線的單元可獲得發(fā)送權(quán)(不管后面消息的優(yōu)先級是否比自身的高)。
多個單元“同時”開始發(fā)送時,發(fā)送高優(yōu)先級 ID 消息的單元可獲得發(fā)送權(quán)(只在同時發(fā)送時起作用)。
(2) 消息的發(fā)送(對比I2C是根據(jù)地址進(jìn)行訪問,這里ID非地址,而是一種表征優(yōu)先級的標(biāo)識符)
在 CAN 協(xié)議中,所有的消息都以固定的格式發(fā)送。當(dāng)兩個以上的單元同時開始發(fā)送消息時,根據(jù)ID (標(biāo)識符) 決定優(yōu)先級,對各消息 ID 的每個位進(jìn)行逐個仲裁比較。仲裁獲勝(被判定為優(yōu)先級最高)的單元可繼續(xù)發(fā)送消息,仲裁失利的單元則立刻停止發(fā)送而進(jìn)行接收工作,此處這里ID非地址,而是一種表征優(yōu)先級的標(biāo)識符。
(3) 系統(tǒng)的柔軟性(對比I2C總線上的每個單元都有一個獨立的地址)
與總線相連的單元沒有類似于“地址”的信息。因此在總線上增加單元時,連接在總線上的其它單元的都不需要改變。
(4) 通信速度(波特率)
由CAN的物理層就可以看出,CAN是一種異步通信方式,所以通信前必須統(tǒng)一好同一網(wǎng)絡(luò)上每個單元的波特率,即使有一個單元的通信速度與其它的不一樣,此單元也會輸出錯誤信號,妨礙整個網(wǎng)絡(luò)的通信。不同網(wǎng)絡(luò)間則可以有不同的通信速度。
(5) 遠(yuǎn)程數(shù)據(jù)請求
可通過發(fā)送“遙控幀” 請求其他單元發(fā)送數(shù)據(jù)。
(6) 錯誤檢測功能·錯誤通知功能·錯誤恢復(fù)功能
所有的單元都可以檢測錯誤(錯誤檢測功能)。
檢測出錯誤的單元會立即同時通知其他所有單元(錯誤通知功能)。
正在發(fā)送消息的單元一旦檢測出錯誤,會強(qiáng)制結(jié)束當(dāng)前的發(fā)送。強(qiáng)制結(jié)束發(fā)送的單元會不斷反復(fù)地重新發(fā)送此消息直到成功發(fā)送為止(錯誤恢復(fù)功能)。
(7) 故障封閉
CAN 可以判斷出錯誤的類型是總線上暫時的數(shù)據(jù)錯誤(如外部噪聲等)還是持續(xù)的數(shù)據(jù)錯誤(如單元內(nèi)部故障、驅(qū)動器故障、斷線等)。由此功能,當(dāng)總線上發(fā)生持續(xù)數(shù)據(jù)錯誤時,可將引起此故障的單元從總線上隔離出去。
(8) 連接
CAN 總線可連接的單元總數(shù)理論上是沒有限制的。但實際上可連接的單元數(shù)受總線上的時間延遲及電氣負(fù)載的限制。

五. CAN的協(xié)議層


幀的種類
通信是通過以下 5 種類型的幀進(jìn)行的:

其中,數(shù)據(jù)幀和遙控幀有標(biāo)準(zhǔn)格式和擴(kuò)展格式兩種格式。
標(biāo)準(zhǔn)格式有11 個位的標(biāo)識符(ID),擴(kuò)展格式有29 個位的ID 。

數(shù)據(jù)幀
數(shù)據(jù)幀由 7 個段構(gòu)成,包括:
(1)幀起始。表示數(shù)據(jù)幀開始的段。
(2)仲裁段。表示該幀優(yōu)先級的段。
(3)控制段。表示數(shù)據(jù)的字節(jié)數(shù)及保留位的段。
(4)數(shù)據(jù)段。數(shù)據(jù)的內(nèi)容,一幀可發(fā)送0~8個字節(jié)的數(shù)據(jù)。
(5)CRC段。檢查幀的傳輸錯誤的段。
(6)ACK段。表示確認(rèn)正常接收的段。
(7)幀結(jié)束。表示數(shù)據(jù)幀結(jié)束的段。


(1) 幀起始(標(biāo)準(zhǔn)、擴(kuò)展格式相同)
表示幀開始的段。1 個位的顯性位(邏輯0)。

(2) 仲裁段(構(gòu)成ID)
表示數(shù)據(jù)的優(yōu)先級的段。標(biāo)準(zhǔn)格式和擴(kuò)展格式在此的構(gòu)成有所不同,如圖:

*1 ID
從MSB開始,禁止高7位都為隱性,即不能:ID=1111111XXXX。
*2 RTR
遠(yuǎn)程請求位。0,數(shù)據(jù)幀;1, 遙控幀;
*3 SRR
替代遠(yuǎn)程請求位。設(shè)置為1(隱性電平);
*4 IDE
標(biāo)識符選擇位。0,標(biāo)準(zhǔn)幀;1,擴(kuò)展幀;

(3) 控制段
控制段由 6 個位構(gòu)成,表示數(shù)據(jù)段的字節(jié)數(shù)。標(biāo)準(zhǔn)格式和擴(kuò)展格式的構(gòu)成有所不同。

*1 保留位(r0、r1)
保留位必須全部以顯性電平發(fā)送。但接收方可以接收顯性、隱性及其任意組合的電平。
*2 數(shù)據(jù)長度碼(DLC)
數(shù)據(jù)的字節(jié)數(shù)必須為 0~8 字節(jié)。但接收方對 DLC = 9~15 的情況并不視為錯誤。
*3 IDE
標(biāo)識符選擇位。0,標(biāo)準(zhǔn)幀;1,擴(kuò)展幀;

(4) 數(shù)據(jù)段
數(shù)據(jù)段可包含 0~8 個字節(jié)的數(shù)據(jù)。從 MSB(最高位)開始輸出。

(5) CRC 段
CRC 段是檢查幀傳輸錯誤的幀。由 15 個位的 CRC 順序和 1 個位的 CRC 界定符(用于與ACK段區(qū)別開來)構(gòu)成。

*1 CRC的值計算范圍包括:幀起始、仲裁段、控制段、數(shù)據(jù)段。
*2 接收方以同樣的算法計算 CRC 值并進(jìn)行比較,不一致時會通報錯誤。

(6) ACK 段
ACK 段用來確認(rèn)是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 個位構(gòu)成。
*1 發(fā)送單元的 ACK 段
發(fā)送單元在 ACK 段發(fā)送 2 個位的隱性位。
*2 接收單元的 ACK 段
接收到正確消息的單元在 ACK 槽(ACK Slot)發(fā)送顯性位,通知發(fā)送單元正常接收結(jié)束。這稱作“發(fā) 送 ACK”或者“返回 ACK”。

(7),幀結(jié)束。由7個位的隱性位組成。標(biāo)準(zhǔn)幀和擴(kuò)展幀在這個段格式完全一樣。

遙控幀
接收單元向發(fā)送單元請求發(fā)送數(shù)據(jù)所用的幀。遙控幀由 6 個段組成。遙控幀沒有數(shù)據(jù)幀的數(shù)據(jù)段。
遙控幀的構(gòu)成如圖 24 所示。
(1) 幀起始(SOF)
表示幀開始的段。
(2) 仲裁段
表示該幀優(yōu)先級的段。可請求具有相同 ID 的數(shù)據(jù)幀。
(3) 控制段
表示數(shù)據(jù)的字節(jié)數(shù)及保留位的段。
(4) CRC 段
檢查幀的傳輸錯誤的段。
(5) ACK 段
表示確認(rèn)正常接收的段。
(6) 幀結(jié)束
表示遙控幀結(jié)束的段。

遙控幀和數(shù)據(jù)幀的區(qū)別
? 數(shù)據(jù)幀和遙控幀的不同
? 遙控幀的 RTR 位為隱性位,沒有數(shù)據(jù)段。
? 沒有數(shù)據(jù)段的數(shù)據(jù)幀和遙控幀可通過 RTR 位區(qū)別開來。
? 遙控幀沒有數(shù)據(jù)段,數(shù)據(jù)長度碼該如何表示?
? 遙控幀的數(shù)據(jù)長度碼以所請求數(shù)據(jù)幀的數(shù)據(jù)長度碼表示。
? 沒有數(shù)據(jù)段的數(shù)據(jù)幀有何用途?
? 例如,可用于各單元的定期連接確認(rèn)/應(yīng)答、或仲裁段本身帶有實質(zhì)性信息的情況下。

其他的幀比較簡單,這里不做介紹。
優(yōu)先級的決定
在總線空閑態(tài),最先開始發(fā)送消息的單元獲得發(fā)送權(quán)。
多個單元同時開始發(fā)送時,各發(fā)送單元從仲裁段的第一位開始進(jìn)行仲裁。連續(xù)輸出顯性電平最多的單元可繼
續(xù)發(fā)送。
仲裁的過程如圖 28 所示。

位時序
幀是以位為單位的,由發(fā)送單元在非同步的情況下發(fā)送的每秒鐘的位數(shù)稱為位速率(波特率)。一個位可分為 4 段,分別是:
? 同步段(SS)
? 傳播時間段(PTS)
? 相位緩沖段 1(PBS1)
? 相位緩沖段 2(PBS2)
這些段又由可稱為 Time Quantum(以下稱為 Tq)的最小時間單位構(gòu)成。
也就是說,1 位分為 4 個段,每個段又由若干個 Tq 構(gòu)成,這稱為位時序
1 位由多少個 Tq 構(gòu)成、每個段又由多少個 Tq 構(gòu)成等,可以任意設(shè)定位時序。通過設(shè)定位時序,多個單元可同時采樣,也可任意設(shè)定采樣點。
各段的作用和 Tq 數(shù)如下:

簡要來說就是:
*1 同步段用來同步發(fā)送單元與接受單元的發(fā)送和接受的工作。
*2 傳播時間段:屬于一些硬件誤差,無需理會。
*3 相位緩沖段:
舉個例子:有兩個單片機(jī)之間進(jìn)行CAN通信,但是由于它們各自以獨立的時鐘進(jìn)行工作,晶振可能存在偏差,導(dǎo)致時鐘存在細(xì)微的誤差,當(dāng)發(fā)送數(shù)據(jù)較多時,這個誤差會被逐漸放大,導(dǎo)致整個時序混亂,無法同步,這在汽車工業(yè)上是不允許的。
*4 再同步補(bǔ)償寬度:其實就是一個由數(shù)個Tq組成的一個段,用來對同步誤差進(jìn)行補(bǔ)償,下面對如何補(bǔ)償進(jìn)行闡述。

再同步
在接收過程中檢測出總線上的電平變化時進(jìn)行的同步調(diào)整。
每當(dāng)檢測出邊沿時,根據(jù) SJW 值通過加長 PBS1 段,或縮短 PBS2 段,以調(diào)整同步。但如果發(fā)生了超出 SJW值的誤差時,最大調(diào)整量不能超過 SJW 值。再同步如圖 34 所示。

總結(jié)

以上是生活随笔為你收集整理的CAN通信详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。