找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4172|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

CAN2.0規(guī)范學(xué)習(xí)研究

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-2-21 15:39 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
概述
CAN總線是BOSCH公司發(fā)布的一款針對(duì)汽車電子的總線協(xié)議,主要用于汽車各部件之間的通信以及對(duì)各部件進(jìn)行檢測(cè)。
1989年P(guān)HILIPS公司發(fā)布了CAN2.0標(biāo)準(zhǔn)
1991年ISO組織講CAN總線協(xié)議列為標(biāo)準(zhǔn)的現(xiàn)場(chǎng)總線協(xié)議ISO11898
第一章:
要了解CAN總線的知識(shí),必須實(shí)現(xiàn)了解NRZ編碼,因?yàn)镃AN總線的物理層使用的就是NRZ編碼。NRZ編碼的示例圖如下圖所示:



                                                                   NRZ編碼
NRZ編碼存在的一個(gè)問(wèn)題就是當(dāng)連續(xù)傳輸n多個(gè)0或者n多個(gè)1時(shí),發(fā)送者和接收者沒法進(jìn)行同步。
NRZI 編碼(Non-Return-to-ZeroInverted Code)和 NRZ 的區(qū)別就是 NRZI 用信號(hào)的翻轉(zhuǎn)代表一個(gè)邏輯,信號(hào)保持不變代表另外一個(gè)邏輯。

  USB 傳輸?shù)木幋a就是 NRZI 格式,在 USB 中,電平翻轉(zhuǎn)代表邏輯 0,電平不變代表邏輯1(NRZI 遇 0 翻轉(zhuǎn),遇 1 不變):NRZI編碼如下圖所示:


NRZI編碼
翻轉(zhuǎn)的信號(hào)本身可以作為一種通知機(jī)制,而且可以看到,即使把 NRZI 的波形完全翻轉(zhuǎn),所代表的數(shù)據(jù)序列還是一樣的,對(duì)于像 USB 這種通過(guò)差分線來(lái)傳輸?shù)男盘?hào)尤其方便.
   但是同樣,NRZ 和 NRZI 都沒有自同步特性,但是可以用一些特殊的技巧解決。比如,先發(fā)送一個(gè)同步頭,內(nèi)容是 0101010 的方波,讓接受者通過(guò)這個(gè)同步頭計(jì)算出發(fā)送者的頻率,然后再用這個(gè)頻率來(lái)采樣之后的數(shù)據(jù)信號(hào),就可以了。
  在 USB 中,每個(gè) USB 數(shù)據(jù)包,最開始都有個(gè)同步域(SYNC),這個(gè)域固定為 00000001,這個(gè)域通過(guò) NRZI 編碼之后,就是一串方波(復(fù)習(xí)下前面:NRZI 遇 0 翻轉(zhuǎn)遇 1 不變),接受者可以用這個(gè) SYNC 域來(lái)同步之后的數(shù)據(jù)信號(hào)。
  此外,因?yàn)樵赨SB的NRZI編碼下,邏輯0會(huì)造成電平翻轉(zhuǎn),所以接受者在接受數(shù)據(jù)的同時(shí),根據(jù)接收到的翻轉(zhuǎn)信號(hào)不斷調(diào)整同步頻率,保證數(shù)據(jù)傳輸正確.
  但是,這樣還是會(huì)有一個(gè)問(wèn)題,就是雖然接受者可以主動(dòng)和發(fā)送者的頻率匹配,但是兩者之間總會(huì)有誤差。假如數(shù)據(jù)信號(hào)是1000個(gè)邏輯1,經(jīng)過(guò)USB的NRZI編碼之后,就是很長(zhǎng)一段沒有變化的電平,在這種情況下,即使接受者的頻率和發(fā)送者相差千分之一,就會(huì)造成把數(shù)據(jù)采樣成 1001 個(gè)或者999個(gè)1了。        
  USB 對(duì)這個(gè)問(wèn)題的解決辦法,就是強(qiáng)制插 0,也就是傳說(shuō)中bit-stuffing,如果要傳輸?shù)臄?shù)據(jù)中有7個(gè)連續(xù)的1,發(fā)送前就會(huì)在第6個(gè)1后面強(qiáng)制插入一個(gè)0,讓發(fā)送的信號(hào)強(qiáng)制出現(xiàn)翻轉(zhuǎn),從而強(qiáng)制接受者進(jìn)行頻率調(diào)整。接受者只要?jiǎng)h除6個(gè)連續(xù)1之后的0,就可以恢復(fù)原始的數(shù)據(jù)了。
   而CAN協(xié)議當(dāng)位流里有連續(xù)5個(gè)1或者連續(xù)5個(gè)0時(shí),便在位流里插入一個(gè)補(bǔ)充位,而接收器則自動(dòng)刪除這個(gè)補(bǔ)充位,換句話說(shuō),最長(zhǎng)等待5個(gè)bit的時(shí)間,各節(jié)點(diǎn)就可以進(jìn)行同步。需注意連續(xù)6個(gè)相同的位表示ERRORFLAG,
   bit-stuffing的示意圖如下所示:圖中白色的為填充位



                                   位填充示意圖
關(guān)于NRZ編碼就介紹到這里。下面我們將介紹CAN2.0的規(guī)范
第二章 CAN2.0規(guī)范
CAN2.0規(guī)范分為AB兩部分,其中A定義了標(biāo)準(zhǔn)幀,B定義了標(biāo)準(zhǔn)幀和擴(kuò)展幀。
其中標(biāo)準(zhǔn)幀又分為四種:
數(shù)據(jù)幀
遠(yuǎn)程幀
過(guò)載幀
錯(cuò)誤幀
數(shù)據(jù)幀:
標(biāo)準(zhǔn)數(shù)據(jù)幀的格式如圖所示:
      
                                                            標(biāo)準(zhǔn)數(shù)據(jù)幀示意圖
有圖可以看出數(shù)據(jù)幀由如下及部分組成:
SOF                                          起始幀
ARBITRATIONFIELD              仲裁域
CTRLFIELD                              控制域
DATAFIELD                             數(shù)據(jù)域
CRC  FIELD                              校驗(yàn)域
ACKFIELD                               確認(rèn)域
EOF                                          終止幀
數(shù)據(jù)域的長(zhǎng)度可以為0
   MESSAGE ID 用于尋址,它在總線網(wǎng)絡(luò)中是唯一的。CAN控制器一般都有一個(gè)驗(yàn)收碼寄存器和驗(yàn)收屏蔽寄存器,當(dāng)接收到消息ID時(shí),控制器檢查驗(yàn)收寄存器為1的位有哪些,那么就不去判斷MESSAGEID的相應(yīng)位,剩下的位如果和驗(yàn)收寄存器的值相等,那么就接收該消息。
   MESSAGE ID號(hào)越小表示優(yōu)先級(jí)越高,多個(gè)節(jié)點(diǎn)同時(shí)發(fā)送數(shù)據(jù)時(shí)總線通過(guò)該域進(jìn)行仲裁,傳輸優(yōu)先級(jí)高的節(jié)點(diǎn)繼續(xù)傳輸,失去傳輸資格的節(jié)點(diǎn)在總線空閑時(shí)重新傳輸。仲裁的過(guò)程如下圖所示:
   
                                                          CAN仲裁過(guò)程示意圖
                                                                                                                                                                          如圖,仲裁采用的是按位仲裁的方式,誰(shuí)的大值出現(xiàn)的早誰(shuí)就先退出仲裁。
INTERMISSIONFIELD 用于區(qū)區(qū)分開兩個(gè)連續(xù)的幀
擴(kuò)展數(shù)據(jù)幀的格式如下:
   



兩種幀的區(qū)別在于CTRLFIELD 中的識(shí)別符擴(kuò)展位(IDE)

遠(yuǎn)程幀也分為兩種:標(biāo)準(zhǔn)幀和擴(kuò)展展,他們與數(shù)據(jù)幀的區(qū)別在于:
遠(yuǎn)程幀沒有數(shù)據(jù)域
RTR位為recessivebit
其它完全一樣。

錯(cuò)誤幀只有當(dāng)檢測(cè)到CAN標(biāo)準(zhǔn)定義的錯(cuò)誤時(shí)產(chǎn)生錯(cuò)誤幀,錯(cuò)誤幀的位數(shù)有6-12BIT,錯(cuò)誤幀的示意圖如下:
                                      

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

                                   過(guò)載幀

暫時(shí)到這里,有了新的理解再持續(xù)更新

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表