CAN總線是什么
CAN是控制器局域網(wǎng)絡(luò)(Controller Area Network, CAN)的簡(jiǎn)稱,ISO國(guó)際標(biāo)準(zhǔn)化的串行通信協(xié)議(ISO 11898),具有實(shí)時(shí)性強(qiáng)、傳輸距離遠(yuǎn)、抗電磁干擾能力強(qiáng)、成本低等特點(diǎn)。CAN總線協(xié)議已經(jīng)成為汽車計(jì)算機(jī)控制系統(tǒng)和嵌入式工業(yè)控制局域網(wǎng)的標(biāo)準(zhǔn)總線,廣泛應(yīng)用于汽車電控制系統(tǒng)、電梯控制系統(tǒng)、安全監(jiān)測(cè)系統(tǒng)、醫(yī)療儀器、紡織機(jī)械、船舶運(yùn)輸?shù)阮I(lǐng)域。
英創(chuàng)主流工控主板ESMARC系列(目前包括4個(gè)大型號(hào):ESM6802,ESM6800,ESM335x,ESM928x)均板載兩路CAN總線,用戶可以直接使用板載CAN總線進(jìn)行功能評(píng)估使用。英創(chuàng)ESMARC底板上面的CAN部分如下圖:
英創(chuàng)ESMARC開(kāi)發(fā)評(píng)估底板上的CAN電路部分
CAN總線的工作原理
CAN總線使用串行數(shù)據(jù)傳輸方式,可以以1Mb/s的速度在40m的雙絞線上運(yùn)行,也可以使用光纜連接。CAN控制器通過(guò)組成總線的兩條線(CAN-H和CAN-L)的電位差來(lái)確定總線的電平。在任一時(shí)刻,總線上都有兩種電平:顯性電平和隱性電平。只要有一個(gè)單元輸出顯性電平,總線上即為顯性電平,只有所有的單元都輸出隱性電平,總線上才為隱性電平。
連接在總線上的所有節(jié)點(diǎn)都能夠發(fā)送信息,如果有超過(guò)一個(gè)節(jié)點(diǎn)在同一時(shí)刻發(fā)送信息,有最高優(yōu)先級(jí)的節(jié)點(diǎn)獲得發(fā)送的資格,所有其它節(jié)點(diǎn)執(zhí)行接收操作。
CAN總線工作原理
當(dāng)CAN總線上的一個(gè)節(jié)點(diǎn)發(fā)送數(shù)據(jù)時(shí),它以報(bào)文形式廣播給網(wǎng)絡(luò)中所有節(jié)點(diǎn)。發(fā)送節(jié)點(diǎn)將要發(fā)送的數(shù)據(jù)和自己的標(biāo)識(shí)符傳送給本節(jié)點(diǎn)的CAN芯片,并處于準(zhǔn)備狀態(tài),然后在收到總線分配以后,轉(zhuǎn)為發(fā)送報(bào)文狀態(tài)。CAN芯片將數(shù)據(jù)根據(jù)協(xié)議組織成一定的報(bào)文格式發(fā)出,這時(shí)網(wǎng)上的其它節(jié)點(diǎn)處于接收狀態(tài)。每個(gè)處于接收狀態(tài)的節(jié)點(diǎn)對(duì)接收到的報(bào)文進(jìn)行檢測(cè),判斷這些報(bào)文是否發(fā)給自己,以確定是否接收。每組報(bào)文開(kāi)頭的11位字符為標(biāo)識(shí)符,定義了報(bào)文的優(yōu)先級(jí),這種報(bào)文格式稱為面向內(nèi)容的編址方案。在同一系統(tǒng)中標(biāo)識(shí)符是唯一的,不能有兩個(gè)節(jié)點(diǎn)發(fā)送具有相同標(biāo)識(shí)符的報(bào)文。
CAN模塊支持以下幀類型:數(shù)據(jù)幀,遠(yuǎn)程幀,錯(cuò)誤幀,超載幀,空閑幀。
典型的CAN幀結(jié)構(gòu)
數(shù)據(jù)幀:用于各節(jié)點(diǎn)之間傳送數(shù)據(jù)消息,由7個(gè)不同的位場(chǎng)組成:幀起始、仲裁場(chǎng)、控制場(chǎng)、數(shù)據(jù)場(chǎng)、CRC場(chǎng)、應(yīng)答場(chǎng)和幀結(jié)束。
遠(yuǎn)程幀:用于一個(gè)節(jié)點(diǎn)請(qǐng)求其他節(jié)點(diǎn)所擁有的數(shù)據(jù)信息。遠(yuǎn)程幀的標(biāo)識(shí)符標(biāo)識(shí)了所需數(shù)據(jù)的類型,而被送回的數(shù)據(jù)信息的標(biāo)識(shí)符和遠(yuǎn)程幀的標(biāo)識(shí)符完全一致。數(shù)據(jù)源節(jié)點(diǎn)在接收到遠(yuǎn)程幀后,根據(jù)遠(yuǎn)程幀的標(biāo)識(shí)符判斷所需數(shù)據(jù)信息類型,并在總線空閑時(shí)將相應(yīng)數(shù)據(jù)送出。
遠(yuǎn)程幀由6個(gè)位場(chǎng)組成:幀起始、仲裁場(chǎng)、控制場(chǎng)、CRC場(chǎng)、應(yīng)答場(chǎng)和幀結(jié)束。
錯(cuò)誤幀:為進(jìn)行錯(cuò)誤界定,每個(gè)CAN控制器均設(shè)有兩個(gè)錯(cuò)誤計(jì)數(shù)器:發(fā)送錯(cuò)誤計(jì)數(shù)器(TEC)和接收錯(cuò)誤計(jì)數(shù)器(REC)。CAN總線上的所有節(jié)點(diǎn),按其錯(cuò)誤計(jì)數(shù)器數(shù)值情況,可分為3個(gè)狀態(tài):錯(cuò)誤活動(dòng)狀態(tài)、錯(cuò)誤認(rèn)可狀態(tài)和總線關(guān)閉狀態(tài)。
上電復(fù)位后,兩個(gè)錯(cuò)誤計(jì)數(shù)器的數(shù)值都為0,節(jié)點(diǎn)處于錯(cuò)誤活動(dòng)狀態(tài),可正常參與總線通信。檢測(cè)到錯(cuò)誤時(shí),節(jié)點(diǎn)發(fā)送活動(dòng)錯(cuò)誤標(biāo)志,當(dāng)錯(cuò)誤計(jì)數(shù)器任一數(shù)值超過(guò)127時(shí),節(jié)點(diǎn)進(jìn)入錯(cuò)誤認(rèn)可狀態(tài)。處于錯(cuò)誤狀態(tài)的節(jié)點(diǎn)可以參與總線通信,但出錯(cuò)后會(huì)發(fā)送認(rèn)可錯(cuò)誤標(biāo)志,并在開(kāi)始進(jìn)一步發(fā)送數(shù)據(jù)之前等待一段附加時(shí)間(暫停發(fā)送場(chǎng))。當(dāng)發(fā)送錯(cuò)誤計(jì)數(shù)器和接收計(jì)數(shù)器均小于或等于127時(shí),節(jié)點(diǎn)從錯(cuò)誤認(rèn)可狀態(tài)再次變?yōu)殄e(cuò)誤活動(dòng)狀態(tài)。若發(fā)送錯(cuò)誤計(jì)數(shù)器數(shù)值超過(guò)255,則節(jié)點(diǎn)進(jìn)入總線關(guān)閉狀態(tài),無(wú)法收發(fā)數(shù)據(jù)。當(dāng)軟件執(zhí)行操作模式請(qǐng)求命令,并等待128次總線釋放(BusˉFree)序列(11位連續(xù)隱性位)后,節(jié)點(diǎn)從總線脫離狀態(tài)重新回到錯(cuò)誤活動(dòng)狀態(tài)。
錯(cuò)誤幀由兩個(gè)不同的位場(chǎng)組成,第一個(gè)場(chǎng)由來(lái)自不同的節(jié)點(diǎn)的錯(cuò)誤標(biāo)志疊加而成,第二個(gè)場(chǎng)為錯(cuò)誤界定符。
超載幀:超載幀由超載標(biāo)志和超載界定符組成。超載標(biāo)志由6個(gè)顯性位組成,其格式與活動(dòng)錯(cuò)誤標(biāo)志相同。超載界定符由8個(gè)隱性位組成,其格式與錯(cuò)誤界定符相同。導(dǎo)致發(fā)送超載幀的兩個(gè)條件為:
(1)一個(gè)接收節(jié)點(diǎn)內(nèi)部接收條件未準(zhǔn)備好,要求延遲下一個(gè)數(shù)據(jù)幀或遠(yuǎn)程幀發(fā)送;
(2)在間歇場(chǎng)(3位)檢測(cè)到顯性位。
當(dāng)超載標(biāo)志發(fā)出后,每個(gè)節(jié)點(diǎn)監(jiān)視總線狀態(tài),直至檢測(cè)到從顯性至隱性位的跳變,此時(shí),所有的節(jié)點(diǎn)均己完成了超載標(biāo)志的發(fā)送,隨后所有節(jié)點(diǎn)開(kāi)始發(fā)送8個(gè)隱性位組成的超載界定符。
空閑幀:數(shù)據(jù)幀及遠(yuǎn)程幀與前幀消息之間的間隔被稱為空閑幀的場(chǎng)隔開(kāi),空閑幀由間歇場(chǎng)和總線空閑場(chǎng)組成,前面已經(jīng)發(fā)送過(guò)報(bào)文的錯(cuò)誤節(jié)點(diǎn)還包括暫停發(fā)送場(chǎng)。間歇場(chǎng)由3個(gè)隱性位組成,在此期間,CAN節(jié)點(diǎn)不進(jìn)行幀發(fā)送。間歇場(chǎng)的存在使CAN控制器在下次消息發(fā)送前有時(shí)間進(jìn)行內(nèi)部處理操作。總線空閑場(chǎng)可以為任意長(zhǎng)度,此時(shí)總線處于空閑狀態(tài),允許任何節(jié)點(diǎn)開(kāi)始報(bào)文發(fā)送。等待報(bào)文發(fā)送的節(jié)點(diǎn)緊隨間歇場(chǎng)后啟動(dòng)報(bào)文發(fā)送,即在空閑場(chǎng)第一位期間就啟動(dòng)報(bào)文發(fā)送。
錯(cuò)誤認(rèn)可節(jié)點(diǎn)完成一個(gè)報(bào)文發(fā)送后,在開(kāi)始另一次報(bào)文發(fā)送或進(jìn)入總線空閑狀態(tài)之前,緊隨間歇場(chǎng)發(fā)送8個(gè)隱性位的暫停發(fā)送場(chǎng)。發(fā)送暫停發(fā)送場(chǎng)期間,若其他節(jié)點(diǎn)開(kāi)始發(fā)送報(bào)文,則本節(jié)點(diǎn)停止送出暫停發(fā)送場(chǎng),并變?yōu)閳?bào)文接收器。
CAN總線電路特點(diǎn)
下圖是一個(gè)典型的CAN總線擴(kuò)展電路(英創(chuàng)ETA704 CAN總線擴(kuò)展模塊):
典型的CAN接口電路
由圖中可以看出,CAN總線收發(fā)管腳通過(guò)磁耦器件ADuM1201隔離后,和CAN驅(qū)動(dòng)芯片TJA1050連接,就組成了一個(gè)典型的CAN總線通訊電路。帶隔離CAN總線通訊模塊的CAN收發(fā)器端的所有信號(hào)和電源與其它部分完全隔離,有效保護(hù)了電路的安全。需要注意的是如果扁平帶線過(guò)長(zhǎng),會(huì)影響高速信號(hào)的完整性,所以在評(píng)估時(shí)使用的連接線盡量短一些,避免出現(xiàn)問(wèn)題。
CAN總線在英創(chuàng)主板平臺(tái)上的應(yīng)用
英創(chuàng)EM335x工控主板套件 + ETA704 CAN擴(kuò)展模塊擴(kuò)展4路CAN
英創(chuàng)主板可以通過(guò)主板自帶和外擴(kuò)功能模塊,支持和管理多路CAN通信。英創(chuàng)工控主板作為核心控制平臺(tái),管理和控制CAN接口與下位設(shè)備進(jìn)行通訊,從而實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理監(jiān)控等應(yīng)用。歷年來(lái),大量用戶使用英創(chuàng)主板進(jìn)行CAN通信相關(guān)應(yīng)用,英創(chuàng)也累積了豐富的工程經(jīng)驗(yàn)。下面整理出了英創(chuàng)網(wǎng)站發(fā)表的相關(guān)技術(shù)文檔供用戶參考。雖然有一些方案文檔中提到的英創(chuàng)主板是較老的型號(hào),用戶在新產(chǎn)品開(kāi)發(fā)的時(shí)候未必會(huì)使用這些老主板產(chǎn)品,但是文中的軟硬件使用技巧、編程技巧和方法等技術(shù)細(xì)節(jié),是值得用戶參考或者直接使用的。
應(yīng)用方案
WinCE系統(tǒng)雙CAN構(gòu)建方案低成本嵌入式Linux CAN應(yīng)用方案
使用方法與技巧
CAN接口COM組件在WinCE平臺(tái)上的實(shí)現(xiàn)CAN接口COM組件在C#語(yǔ)言中的使用
基于SJA1000的CAN通訊接口函數(shù)使用說(shuō)明EM9170嵌入式主板CAN通訊接口使用說(shuō)明
SJA1000的CAN通訊接口函數(shù)擴(kuò)展應(yīng)用說(shuō)明工控主板EM9170的CAN通訊應(yīng)用說(shuō)明
EM9287 Linux Socket CAN驅(qū)動(dòng)簡(jiǎn)介C/C#開(kāi)發(fā)基于WEC7的CAN通訊應(yīng)用
EM335x工控主板多路CAN總線擴(kuò)展方案介紹英創(chuàng)WinCE主板CAN接口數(shù)據(jù)接收性能測(cè)試
英創(chuàng)WinCE主板新CAN驅(qū)動(dòng)使用說(shuō)明英創(chuàng)新CAN驅(qū)動(dòng)接口調(diào)用方法及說(shuō)明
關(guān)于新CAN驅(qū)動(dòng)的錯(cuò)誤幀定義ESM6802 Android版支持雙CAN通信
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6101瀏覽量
36303 -
安卓
+關(guān)注
關(guān)注
5文章
2154瀏覽量
58689
發(fā)布評(píng)論請(qǐng)先 登錄
英創(chuàng)支持Linux高級(jí)客戶自行移植內(nèi)核
英創(chuàng)工控主板產(chǎn)品選型指南
英創(chuàng)信息技術(shù)ARM9工控板在遠(yuǎn)程監(jiān)控領(lǐng)域的應(yīng)用

英創(chuàng)信息技術(shù)ISA總線的CE設(shè)備驅(qū)動(dòng)程序介紹
英創(chuàng)信息技術(shù)CAN接口COM組件在C#語(yǔ)言領(lǐng)域應(yīng)用

英創(chuàng)信息技術(shù)SJA1000的CAN通訊接口函數(shù)介紹
英創(chuàng)信息技術(shù)EM335x工控主板多路CAN總線擴(kuò)展方案介紹
英創(chuàng)信息技術(shù)新CAN驅(qū)動(dòng)接口調(diào)用方法及說(shuō)明

英創(chuàng)信息技術(shù)ESM6802 Android版支持雙CAN通信簡(jiǎn)介

英創(chuàng)信息技術(shù)JAVA操作英創(chuàng)主板SPI接口簡(jiǎn)介

英創(chuàng)信息技術(shù)JAVA操作英創(chuàng)主板I2C接口簡(jiǎn)介

英創(chuàng)信息技術(shù)主板在Windows CE環(huán)境中的串口配置

英創(chuàng)信息技術(shù)工控主板產(chǎn)品選型指南介紹
英創(chuàng)信息技術(shù)精簡(jiǎn)ISA總線WinCE編程簡(jiǎn)介

英創(chuàng)信息技術(shù)6路獨(dú)立CAN總線的實(shí)現(xiàn)方案簡(jiǎn)介

評(píng)論