標(biāo)題: CAN2.0規(guī)范學(xué)習(xí)研究 [打印本頁]
作者: 51黑黑黑 時間: 2016-2-21 15:39
標(biāo)題: CAN2.0規(guī)范學(xué)習(xí)研究
概述
CAN總線是BOSCH公司發(fā)布的一款針對汽車電子的總線協(xié)議,主要用于汽車各部件之間的通信以及對各部件進行檢測。
1989年P(guān)HILIPS公司發(fā)布了CAN2.0標(biāo)準(zhǔn)
1991年ISO組織講CAN總線協(xié)議列為標(biāo)準(zhǔn)的現(xiàn)場總線協(xié)議ISO11898
第一章:
要了解CAN總線的知識,必須實現(xiàn)了解NRZ編碼,因為CAN總線的物理層使用的就是NRZ編碼。NRZ編碼的示例圖如下圖所示:

NRZ編碼
NRZ編碼存在的一個問題就是當(dāng)連續(xù)傳輸n多個0或者n多個1時,發(fā)送者和接收者沒法進行同步。
NRZI 編碼(Non-Return-to-ZeroInverted Code)和 NRZ 的區(qū)別就是 NRZI 用信號的翻轉(zhuǎn)代表一個邏輯,信號保持不變代表另外一個邏輯。
USB 傳輸?shù)木幋a就是 NRZI 格式,在 USB 中,電平翻轉(zhuǎn)代表邏輯 0,電平不變代表邏輯1(NRZI 遇 0 翻轉(zhuǎn),遇 1 不變):NRZI編碼如下圖所示:
NRZI編碼
翻轉(zhuǎn)的信號本身可以作為一種通知機制,而且可以看到,即使把 NRZI 的波形完全翻轉(zhuǎn),所代表的數(shù)據(jù)序列還是一樣的,對于像 USB 這種通過差分線來傳輸?shù)男盘栍绕浞奖?
但是同樣,NRZ 和 NRZI 都沒有自同步特性,但是可以用一些特殊的技巧解決。比如,先發(fā)送一個同步頭,內(nèi)容是 0101010 的方波,讓接受者通過這個同步頭計算出發(fā)送者的頻率,然后再用這個頻率來采樣之后的數(shù)據(jù)信號,就可以了。
在 USB 中,每個 USB 數(shù)據(jù)包,最開始都有個同步域(SYNC),這個域固定為 00000001,這個域通過 NRZI 編碼之后,就是一串方波(復(fù)習(xí)下前面:NRZI 遇 0 翻轉(zhuǎn)遇 1 不變),接受者可以用這個 SYNC 域來同步之后的數(shù)據(jù)信號。
此外,因為在USB的NRZI編碼下,邏輯0會造成電平翻轉(zhuǎn),所以接受者在接受數(shù)據(jù)的同時,根據(jù)接收到的翻轉(zhuǎn)信號不斷調(diào)整同步頻率,保證數(shù)據(jù)傳輸正確.
但是,這樣還是會有一個問題,就是雖然接受者可以主動和發(fā)送者的頻率匹配,但是兩者之間總會有誤差。假如數(shù)據(jù)信號是1000個邏輯1,經(jīng)過USB的NRZI編碼之后,就是很長一段沒有變化的電平,在這種情況下,即使接受者的頻率和發(fā)送者相差千分之一,就會造成把數(shù)據(jù)采樣成 1001 個或者999個1了。
USB 對這個問題的解決辦法,就是強制插 0,也就是傳說中bit-stuffing,如果要傳輸?shù)臄?shù)據(jù)中有7個連續(xù)的1,發(fā)送前就會在第6個1后面強制插入一個0,讓發(fā)送的信號強制出現(xiàn)翻轉(zhuǎn),從而強制接受者進行頻率調(diào)整。接受者只要刪除6個連續(xù)1之后的0,就可以恢復(fù)原始的數(shù)據(jù)了。
而CAN協(xié)議當(dāng)位流里有連續(xù)5個1或者連續(xù)5個0時,便在位流里插入一個補充位,而接收器則自動刪除這個補充位,換句話說,最長等待5個bit的時間,各節(jié)點就可以進行同步。需注意連續(xù)6個相同的位表示ERRORFLAG,
bit-stuffing的示意圖如下所示:圖中白色的為填充位
位填充示意圖
關(guān)于NRZ編碼就介紹到這里。下面我們將介紹CAN2.0的規(guī)范
第二章 CAN2.0規(guī)范
CAN2.0規(guī)范分為A和B兩部分,其中A定義了標(biāo)準(zhǔn)幀,B定義了標(biāo)準(zhǔn)幀和擴展幀。
其中標(biāo)準(zhǔn)幀又分為四種:
數(shù)據(jù)幀
遠(yuǎn)程幀
過載幀
錯誤幀
數(shù)據(jù)幀:
標(biāo)準(zhǔn)數(shù)據(jù)幀的格式如圖所示:

標(biāo)準(zhǔn)數(shù)據(jù)幀示意圖
有圖可以看出數(shù)據(jù)幀由如下及部分組成:
SOF 起始幀
ARBITRATIONFIELD 仲裁域
CTRLFIELD 控制域
DATAFIELD 數(shù)據(jù)域
CRC FIELD 校驗域
ACKFIELD 確認(rèn)域
EOF 終止幀
數(shù)據(jù)域的長度可以為0
MESSAGE ID 用于尋址,它在總線網(wǎng)絡(luò)中是唯一的。CAN控制器一般都有一個驗收碼寄存器和驗收屏蔽寄存器,當(dāng)接收到消息ID時,控制器檢查驗收寄存器為1的位有哪些,那么就不去判斷MESSAGEID的相應(yīng)位,剩下的位如果和驗收寄存器的值相等,那么就接收該消息。
MESSAGE ID號越小表示優(yōu)先級越高,多個節(jié)點同時發(fā)送數(shù)據(jù)時總線通過該域進行仲裁,傳輸優(yōu)先級高的節(jié)點繼續(xù)傳輸,失去傳輸資格的節(jié)點在總線空閑時重新傳輸。仲裁的過程如下圖所示:

CAN仲裁過程示意圖
如圖,仲裁采用的是按位仲裁的方式,誰的大值出現(xiàn)的早誰就先退出仲裁。
INTERMISSIONFIELD 用于區(qū)區(qū)分開兩個連續(xù)的幀
擴展數(shù)據(jù)幀的格式如下:

兩種幀的區(qū)別在于CTRLFIELD 中的識別符擴展位(IDE)
遠(yuǎn)程幀也分為兩種:標(biāo)準(zhǔn)幀和擴展展,他們與數(shù)據(jù)幀的區(qū)別在于:
遠(yuǎn)程幀沒有數(shù)據(jù)域
RTR位為recessivebit
其它完全一樣。
錯誤幀只有當(dāng)檢測到CAN標(biāo)準(zhǔn)定義的錯誤時產(chǎn)生錯誤幀,錯誤幀的位數(shù)有6-12BIT,錯誤幀的示意圖如下:

錯誤幀示意圖
過載幀
一般情況下,如下幾種情況會導(dǎo)致過載幀的出現(xiàn)
1、上次接收的數(shù)據(jù)幀未被CPU讀取,又來了新的數(shù)據(jù)幀
2、CAN節(jié)點檢測到幀間隔的第一位或者第二位為dominant位,在檢測到dominant位后馬上發(fā)出
3、CAN節(jié)點檢測到錯誤幀的界定域或者過載幀的界定域存在dominant位,在檢測到dominant位后馬上發(fā)出。
過載幀示意圖如下:

過載幀
暫時到這里,有了新的理解再持續(xù)更新
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |