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

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

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

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

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

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

過載幀
暫時到這里,有了新的理解再持續更新
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
五月激情久久
|
成人国产精品久久
|
亚洲综合大片69999
|
中文字幕一区二区三区乱码在线
|
涩涩视频网站在线观看
|
精品久久久久久久久久久久
|
97精品久久
|
精品一区二区三区在线观看国产
|
日韩成人免费av
|
国产丝袜一区二区三区免费视频
|
欧美日韩不卡合集视频
|
欧美国产精品一区二区
|
人人九九
|
国产黄色大片在线观看
|
91精品国产乱码麻豆白嫩
|
欧洲亚洲精品久久久久
|
日干夜操
|
午夜精
|
欧美精品免费观看二区
|
中文字幕免费观看
|
黄视频免费观看
|
亚洲一二三区不卡
|
免费观看av网站
|
精品视频久久久
|
黄色一级视频
|
亚洲天堂成人在线视频
|
欧美一级二级视频
|
欧美自拍视频
|
青青久草
|
一区二区三区免费网站
|
欧美一区在线视频
|
中文字幕精品一区二区三区在线
|
欧美色综合一区二区三区
|
日韩av在线免费
|
精品一区二区三区中文字幕
|
欧美精品一区二区三区在线
|
国产精品免费大片
|
欧美黑人一区
|
亚洲一区二区三区在线视频
|
欧美日韩理论
|
九九精品在线
|