2019-04-02 CAN總線基礎(chǔ)

1、遵循ISO/OSI標(biāo)準(zhǔn)模型,CAN分為數(shù)據(jù)鏈路層(包括邏輯鏈路層LLC和媒體訪問控制層MAC;CAN2.0A中描述為目標(biāo)層和傳輸層)和物理層。

2、CAN技術(shù)規(guī)范(Version2.0)包括2.0A和2.0B,2.0A的報(bào)文標(biāo)識(shí)符為11位2.0B有標(biāo)準(zhǔn)和擴(kuò)展兩種報(bào)文格式,前者的標(biāo)識(shí)符11位,后者29位。

3、CAN網(wǎng)絡(luò)拓?fù)?/p>

???????? CAN控制器:接收來自控制單元(如MCU)的數(shù)據(jù),并將數(shù)據(jù)處理后傳到收發(fā)器。

???????? CAN收發(fā)器:由一個(gè)發(fā)射器和一個(gè)接收器組合而成,將從控制器接收的數(shù)據(jù)轉(zhuǎn)化成能通過CAN-bus傳輸?shù)碾娦盘柣蛘叻粗?/p>

???????? 傳輸線:雙向傳輸?shù)膶?dǎo)線,分為CAN_H和CAN_L,各個(gè)節(jié)點(diǎn)通過這兩條線實(shí)現(xiàn)信號的串行差分傳輸。

???????? 終端電阻:為了避免信號的反射和干擾,需要在CAN_H和CAN_L之間接終端電阻。終端電阻并非固定120歐,跟使用的導(dǎo)線有關(guān)。

4、信號表示:

???????? CAN總線采用的"線與"的規(guī)則進(jìn)行總線沖裁,即1&0=0,即總線上只要有一個(gè)節(jié)點(diǎn)將總線拉到低電平(邏輯0),總線就為低電平(邏輯0),表現(xiàn)在CAN總線中即是說總線上只要有一個(gè)節(jié)點(diǎn)為顯性,則總線狀態(tài)位顯性,而不管總線上有多少節(jié)點(diǎn)處于傳輸隱性狀態(tài);只有當(dāng)所有節(jié)點(diǎn)都為隱性時(shí),總線才為隱性狀態(tài)。這個(gè)特性在仲裁時(shí)非常有用。

5、幀結(jié)構(gòu)

???????? 數(shù)據(jù)幀:由7個(gè)不同的位場組成,分別是幀起始、仲裁場、控制場、數(shù)據(jù)場、CRC場、應(yīng)答場和幀結(jié)束。

?????????????????? 幀起始——1個(gè)顯性位,標(biāo)志數(shù)據(jù)幀或遠(yuǎn)程幀的開始

?????????????????? 仲裁場——由報(bào)文標(biāo)識(shí)符合遠(yuǎn)程發(fā)送請求位(RTR)組成報(bào)文優(yōu)先權(quán)信息。

??????????????????????????? 標(biāo)識(shí)符???? 標(biāo)準(zhǔn)幀11bit,擴(kuò)展幀29bit

??????????????????????????? RTR位???? 1bit數(shù)據(jù)幀為顯性,遠(yuǎn)程幀為隱性,所以數(shù)據(jù)幀的優(yōu)先權(quán)高于遠(yuǎn)程幀

??????????????????????????? IDE位????? 1bit標(biāo)準(zhǔn)幀為顯性,位于控制場,擴(kuò)展幀為隱性,位于仲裁場

??????????????????????????? SRR位????? 1bit擴(kuò)展幀當(dāng)中用于替代遠(yuǎn)程幀請求位,顯性

?????????????????? 控制場——標(biāo)準(zhǔn)幀的控制場由IDE位(1bit)、保留位R0(1bit)和數(shù)據(jù)長度代碼DLC(4bit)組成,共6bit。擴(kuò)展幀中則由保留位R1、R0(2bit)和DLC(4bit)組成,共6bit。

?????????????????? 數(shù)據(jù)場——1個(gè)數(shù)據(jù)幀傳輸0~8個(gè)字節(jié)數(shù)據(jù),傳輸時(shí)MSB在前

?????????????????? CRC場——CAN-bus使用CRC校驗(yàn)數(shù)據(jù),CRC校驗(yàn)值放在CRC場,由CRC校驗(yàn)值(15bit)和CRC界定符(1bit)構(gòu)成

?????????????????? ACK場——接收節(jié)點(diǎn)接收的幀起始到CRC場之間的內(nèi)容沒有發(fā)生錯(cuò)誤時(shí),將在ACK場發(fā)送一個(gè)顯性位。包括發(fā)送應(yīng)答信號的ACK槽(1bit)和ACK界定符(1bit,隱性)共2bit組成。

?????????????????? 幀結(jié)束——由7個(gè)連續(xù)的隱性位組成

???????? 遠(yuǎn)程幀:與數(shù)據(jù)幀相比,遠(yuǎn)程幀沒有數(shù)據(jù)場,同樣有標(biāo)準(zhǔn)幀和擴(kuò)展幀之分。

???????? 錯(cuò)誤幀:CAN-bus支持的錯(cuò)誤類型有五類

???????? ???????? 1)CRC錯(cuò)誤,CRC校驗(yàn)不符

?????????????????? 2)應(yīng)答錯(cuò)誤,發(fā)送節(jié)點(diǎn)在ACK場未收到應(yīng)答信號

?????????????????? 3)格式錯(cuò)誤,傳輸?shù)臄?shù)據(jù)幀格式不符合任何合法幀格式

?????????????????? 4)位發(fā)送錯(cuò)誤,發(fā)送節(jié)點(diǎn)發(fā)送時(shí)發(fā)現(xiàn)總線電平與發(fā)送電平不相同

?????????????????? 5)位填充錯(cuò)誤,通信線纜上信號違反“位填充規(guī)則”

???????? 發(fā)生以上五種錯(cuò)誤任何一種時(shí),發(fā)送或接受節(jié)點(diǎn)將發(fā)送錯(cuò)誤幀

???????? 其中錯(cuò)誤標(biāo)識(shí)分為主動(dòng)錯(cuò)誤標(biāo)識(shí)和被動(dòng)錯(cuò)誤標(biāo)識(shí)。

???????? 為防止自身由于某些原因?qū)е聼o法正常接收的節(jié)點(diǎn)一直發(fā)送錯(cuò)誤幀,干擾其他節(jié)點(diǎn)通訊,CAN-bus規(guī)定了節(jié)點(diǎn)的三種狀態(tài)及行為。

???????? 過載幀:有三種情況發(fā)送過載幀

?????????????????? 1)當(dāng)某個(gè)節(jié)點(diǎn)沒有做好接受下一幀數(shù)據(jù)的準(zhǔn)備時(shí)

?????????????????? 2)在間歇的第一和第二字節(jié)監(jiān)測到一個(gè)顯性位

?????????????????? 3)節(jié)點(diǎn)在錯(cuò)誤界定符或過載界定符的第8位采樣到一個(gè)顯性位,則發(fā)送一個(gè)過載幀且錯(cuò)誤計(jì)數(shù)不會(huì)增加

???????? *由于存在多個(gè)節(jié)點(diǎn)同時(shí)過載且過載幀發(fā)送有時(shí)間差的問題,可能出現(xiàn)過載標(biāo)志疊加后超過6位的現(xiàn)象。

???????? 幀間隔:幀間隔用于將數(shù)據(jù)幀和遠(yuǎn)程幀與他們之前的幀分離開,過載幀和錯(cuò)誤幀前面不需要插入幀間隔。

6、通信速度和最大總線長度

???????? 影響總線長度的因素

???????? 1)物理線纜并非理想狀態(tài),實(shí)際上是有一定的線上延遲的,CAN總線的應(yīng)答機(jī)制決定了通信速率越高,通信距離越短,對物理傳輸線的要求就越高,通信速率與通信距離的關(guān)系大致如下圖。(主要因素)

???????? 2)信號在節(jié)點(diǎn)內(nèi)部的延時(shí)

???????? 3)振蕩器的容差

???????? 綜合考慮各方面的因素,有如下推薦值表

7、幾個(gè)重要的概念

???????? CAN總線協(xié)議??????? CAN總線是一個(gè)廣播類型的總線,所以任何在總線上的節(jié)點(diǎn)都可以監(jiān)聽總線上傳輸?shù)臄?shù)據(jù)。也就是說總線上的傳輸不是點(diǎn)到點(diǎn)的,而是一點(diǎn)對多點(diǎn)的傳輸,這里多點(diǎn)的意思是總線上所有的節(jié)點(diǎn)。總線上的節(jié)點(diǎn)通過這種本地過濾的功能可以過濾掉一些和自己無關(guān)的數(shù)據(jù),而保留一些和自己有關(guān)的信息。本地過濾所使用的就是位于數(shù)據(jù)幀或遠(yuǎn)程幀仲裁場的標(biāo)識(shí)符(ID)。

???????? 總線仲裁??????? 只要總線空閑,總線上任何節(jié)點(diǎn)都可以發(fā)送報(bào)文,如果有兩個(gè)或兩個(gè)以上的節(jié)點(diǎn)開始傳送報(bào)文,那么就會(huì)存在總線訪問沖突的可能。CAN使用了標(biāo)識(shí)符的逐位仲裁方法解決這個(gè)問題。

???????? 在仲裁期間,每一個(gè)發(fā)送器都對發(fā)送的電平與被監(jiān)控的總線電平進(jìn)行比較。如果電平相同,則這個(gè)單元可以繼續(xù)發(fā)送。如果發(fā)送的是一"隱性"電平而監(jiān)視到的是一"顯性"電平,那么這個(gè)節(jié)點(diǎn)失去了仲裁,必須退出發(fā)送狀態(tài)。如果出現(xiàn)不匹配的位不是在仲裁期間則產(chǎn)生錯(cuò)誤事件。

???????? 幀ID越小,優(yōu)先級越高。由于數(shù)據(jù)幀的RTR位為顯性電平,遠(yuǎn)程幀為隱性電平,所以幀格式和幀ID相同的情況下,數(shù)據(jù)幀優(yōu)先于遠(yuǎn)程幀;由于標(biāo)準(zhǔn)幀的IDE位為顯性電平,擴(kuò)展幀的IDE位為隱形電平,對于前11位ID相同的標(biāo)準(zhǔn)幀和擴(kuò)展幀,標(biāo)準(zhǔn)幀優(yōu)先級比擴(kuò)展幀高。

???????? 位填充??? 位填充是為防止突發(fā)錯(cuò)誤而設(shè)定的功能。當(dāng)同樣的電平持續(xù) 5 位時(shí)則添加一個(gè)位的反型數(shù)據(jù)。位填充的數(shù)據(jù)不需要編程控制,由控制器自動(dòng)完成。其目的也是提高CAN總線的穩(wěn)定性。

???????? 1)發(fā)送單元的工作??????? 在發(fā)送數(shù)據(jù)幀和遠(yuǎn)程幀時(shí),SOF~CRC 段間的數(shù)據(jù),相同電平如果持續(xù)5位,在下一個(gè)位(第6個(gè)位)則要插入1位與前5位反型的電平。

???????? 2)接收單元的工作??????? 在接收數(shù)據(jù)幀和遠(yuǎn)程幀時(shí),SOF~CRC 段間的數(shù)據(jù),相同電平如果持續(xù)5位,需要?jiǎng)h除下一個(gè)位(第6個(gè)位)再接收。如果這個(gè)第6個(gè)位的電平與前5位相同,將被視為錯(cuò)誤并發(fā)送錯(cuò)誤幀。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容