CAN簡介
CAN,全稱為“Controller Area Network”,即控制器局域網(wǎng),是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。
最初,CAN被設(shè)計(jì)作為汽車環(huán)境中的微控制器通訊,在車載各電子控制裝置ECU之間交換信息,形成汽車電子控制網(wǎng)絡(luò)。
比如:發(fā)動(dòng)機(jī)管理系統(tǒng)、變速箱控制器、儀表裝備、電子主干系統(tǒng)中,均嵌入CAN控制裝置。
CAN總線特性
1.CAN總線具有高抗干擾性、自診斷和數(shù)據(jù)偵錯(cuò)功能,這些特性使得CAN總線在各種工業(yè)場合廣泛使用,包括樓宇自動(dòng)化、醫(yī)療和制造業(yè)。
2.CAN總線由德國BOSCH公司開發(fā),最高速率可達(dá)到1Mbps。CAN的容錯(cuò)能力特別強(qiáng),CAN控制器內(nèi)建了強(qiáng)大的檢錯(cuò)和處理機(jī)制。
3.另外,不同于傳統(tǒng)的網(wǎng)絡(luò)(比如USB或者以太網(wǎng)),CAN節(jié)點(diǎn)與節(jié)點(diǎn)之間不會(huì)傳輸大數(shù)據(jù)塊,一幀CAN消息最多傳輸8字節(jié)用戶數(shù)據(jù),采用短數(shù)據(jù)包也可以使得系統(tǒng)獲得更好的穩(wěn)定性。
4.CAN總線具有總線仲裁機(jī)制,可以組建多主系統(tǒng)。
CAN通訊協(xié)議ISO-11898
ISO11898體系結(jié)構(gòu)定義七層,OSI模型中的最低兩層作為數(shù)據(jù)鏈路層和物理層。
實(shí)際通訊是在連接設(shè)備的物理介質(zhì)中進(jìn)行,物理介質(zhì)的特性由模型中的物理層定義。
注:
LLC用于接收濾波、超載通告、回復(fù)管理
MAC用于數(shù)據(jù)封裝/拆封、幀編碼、媒體訪問管理、錯(cuò)誤檢測與標(biāo)定、應(yīng)答、串轉(zhuǎn)發(fā)/并轉(zhuǎn)串
PLS用于位編碼/解碼、位定時(shí)、同步
PMA為收發(fā)器特性
應(yīng)用程序?qū)咏⒘松蠈討?yīng)用特定協(xié)議,如CANopenTM協(xié)議的通訊鏈路。
這個(gè)協(xié)議由全世界的用戶和廠商組織、CiA維護(hù),詳情可訪問CiA網(wǎng)站:can-cia.de。
許多協(xié)議是專用的,比如工業(yè)自動(dòng)化、柴油發(fā)動(dòng)機(jī)或航空。
標(biāo)準(zhǔn)CAN和擴(kuò)展CAN
標(biāo)準(zhǔn)CAN
標(biāo)準(zhǔn)CAN只有11位標(biāo)識符,每幀的數(shù)據(jù)長度為51+(0~64)=(51~117)位。
標(biāo)準(zhǔn)CAN---11位標(biāo)識符
·
SOF
- 幀起始。顯性(邏輯0)表示報(bào)文的開始,并用于同步總線上的節(jié)點(diǎn)。
·標(biāo)識符- 標(biāo)準(zhǔn)CAN具有11位標(biāo)識符,用來確定報(bào)文的優(yōu)先級。
此域的數(shù)值越小,優(yōu)先級越高。
·
RTR
- 遠(yuǎn)程發(fā)送請求位。
當(dāng)需要從另一個(gè)節(jié)點(diǎn)請求信息時(shí),此位為顯性(邏輯0)。
所有節(jié)點(diǎn)都能接收這個(gè)請求,但是幀標(biāo)識符確定被指定的節(jié)點(diǎn)。
響應(yīng)數(shù)據(jù)幀同樣被所有節(jié)點(diǎn)接收,可以被有興趣的節(jié)點(diǎn)使用。
·
IDE
- 標(biāo)識符擴(kuò)展位,為顯性時(shí)表示這是一個(gè)標(biāo)準(zhǔn)CAN格式,為隱形表示這是擴(kuò)展CAN格式。
·
r0
- 保留位(可能將來標(biāo)準(zhǔn)修訂會(huì)使用)。
·
DLC
- 4位數(shù)據(jù)長度代碼表示傳輸數(shù)據(jù)的字節(jié)數(shù)目,一幀CAN最多傳輸8字節(jié)用戶數(shù)據(jù)。
·
數(shù)據(jù)0~8
– 最多可以傳輸8字節(jié)用戶數(shù)據(jù)。
·
CRC
- 16位(包括1位定界符)CRC校驗(yàn)碼,用來校驗(yàn)用戶數(shù)據(jù)區(qū)之前的(包含數(shù)據(jù)區(qū))傳輸數(shù)據(jù)段。
· ACK - 2位,包含應(yīng)答位和應(yīng)答界定符。
發(fā)送節(jié)點(diǎn)的報(bào)文幀中,ACK兩位是隱性位,當(dāng)接收器正確地接收到有效的報(bào)文,接收器會(huì)在應(yīng)答位期間向發(fā)送節(jié)點(diǎn)發(fā)送一個(gè)顯性位,表示應(yīng)答。
如果接收器發(fā)現(xiàn)這幀數(shù)據(jù)有錯(cuò)誤,則不向發(fā)送節(jié)點(diǎn)發(fā)送ACK應(yīng)答,發(fā)送節(jié)點(diǎn)會(huì)稍后重傳這幀數(shù)據(jù)。
· EOF – 7位幀結(jié)束標(biāo)志位,全部為隱性位。
如果這7位出現(xiàn)顯性位,則會(huì)引起填充錯(cuò)誤。
·
IFS
– 7位幀間隔標(biāo)志位,CAN控制器將接收到的幀正確的放入消息緩沖區(qū)是需要一定時(shí)間的,幀間隔可以提供這個(gè)時(shí)間。
擴(kuò)展CAN
擴(kuò)展CAN具有29位標(biāo)識符,每幀數(shù)據(jù)長度為71+(0~64)=(71~135)位。
注:不計(jì)位填充(位填充將在后面的文章描述)。
擴(kuò)展CAN---29位標(biāo)識符
擴(kuò)展CAN消息相對于標(biāo)準(zhǔn)CAN消息增加的內(nèi)容如下:
· SRR – 代替遠(yuǎn)程請求位,為隱性。所以當(dāng)標(biāo)準(zhǔn)幀與擴(kuò)展幀發(fā)送相互沖突并且擴(kuò)展幀的基本標(biāo)識符與標(biāo)準(zhǔn)幀的標(biāo)識符相同時(shí),標(biāo)準(zhǔn)幀優(yōu)先級高于擴(kuò)展幀。
· IDE – 為隱性位表示標(biāo)志位擴(kuò)展幀,18位擴(kuò)展標(biāo)識符緊跟著IDE位。
·r1– 保留
CAN消息
仲裁
反轉(zhuǎn)的CAN總線邏輯
典型CAN的基本原理如上圖所示,從圖中可以看出,總線邏輯狀態(tài)與驅(qū)動(dòng)器輸入和接收器輸出邏輯是相反的。
正常情況下,邏輯高電平為1,邏輯低電平為0,但是CAN總線卻是邏輯高電平為0,稱為顯性,邏輯低電平為1,稱為隱性。
所以很多收發(fā)器的驅(qū)動(dòng)器輸入端都會(huì)內(nèi)置上拉電阻,在沒有任何輸入時(shí),CAN總線就會(huì)表現(xiàn)為隱性(邏輯低電平)。
在總線空閑時(shí),最先開始發(fā)送報(bào)文的節(jié)點(diǎn)獲得發(fā)送權(quán)。
如果多個(gè)節(jié)點(diǎn)同時(shí)訪問總線,CAN使用非破壞式、逐位仲裁的方式?jīng)Q定哪個(gè)節(jié)點(diǎn)使用總線:各發(fā)送節(jié)點(diǎn)從仲裁域(標(biāo)識符和RTR域)的第1位開始進(jìn)行仲裁,連續(xù)輸出顯性電平(0)最多的節(jié)點(diǎn)可以繼續(xù)發(fā)送。
因此標(biāo)識符數(shù)值越低的CAN報(bào)文,優(yōu)先級越高。標(biāo)識符數(shù)值為0的CAN報(bào)文,具有最高優(yōu)先級,因?yàn)樗敵龅娘@性電平最多。
消息類型
CAN有四種不同的報(bào)文類型:數(shù)據(jù)幀、遠(yuǎn)程幀、錯(cuò)誤指示幀和超載幀。
1、數(shù)據(jù)幀
CAN協(xié)議有兩種數(shù)據(jù)幀類型:標(biāo)準(zhǔn)CAN和擴(kuò)展CAN(見上文)。
一個(gè)數(shù)據(jù)幀中包括7個(gè)主要的域:
幀起始域——標(biāo)志數(shù)據(jù)幀的開始,由一個(gè)顯性位組成。
仲裁域——內(nèi)容由標(biāo)示符和遠(yuǎn)程傳輸請求位(RTR)組成,RTR用以表明此信息幀是數(shù)據(jù)幀還是不包含任何數(shù)據(jù)的遠(yuǎn)地請求幀。
當(dāng)標(biāo)準(zhǔn)CAN和擴(kuò)展CAN的數(shù)據(jù)幀必須在同一條總線上傳輸時(shí),首先判斷其優(yōu)先權(quán),如果ID相同,則非擴(kuò)展數(shù)據(jù)幀的優(yōu)先權(quán)高于擴(kuò)展數(shù)據(jù)幀。
控制域——r0、r1是保留位,作為擴(kuò)展位,DLC表示一幀中數(shù)據(jù)字節(jié)的數(shù)目。
數(shù)據(jù)域——包含0~8字節(jié)的數(shù)據(jù)。
校驗(yàn)域——檢驗(yàn)位錯(cuò)用的循環(huán)冗余校驗(yàn)域,共15位。
應(yīng)答域——包括應(yīng)答位和應(yīng)答分隔符。正確接收到有效報(bào)文的接收站在應(yīng)答期間將總線值為顯性電平。
幀結(jié)束——由七位隱性電平組成。
2、遠(yuǎn)程幀
遠(yuǎn)程幀接受數(shù)據(jù)的節(jié)點(diǎn)可通過發(fā)遠(yuǎn)程幀請求源節(jié)點(diǎn)發(fā)送數(shù)據(jù)。
它由6個(gè)域組成:幀起始、仲裁域、控制域、校驗(yàn)域、應(yīng)答域、幀結(jié)束。
3、錯(cuò)誤指示幀
錯(cuò)誤指示幀由錯(cuò)誤標(biāo)志和錯(cuò)誤分界兩個(gè)域組成。
接收節(jié)點(diǎn)發(fā)現(xiàn)總線上的報(bào)文有誤時(shí),將自動(dòng)發(fā)出“活動(dòng)錯(cuò)誤標(biāo)志”其他節(jié)點(diǎn)檢測到活動(dòng)錯(cuò)誤標(biāo)志后發(fā)送“錯(cuò)誤認(rèn)可標(biāo)志”。
4、超載幀
超載幀由超載標(biāo)志和超載分隔符組成。
超載幀只能在一個(gè)幀結(jié)束后開始。當(dāng)接收方接收下一幀之前,需要過多的時(shí)間處理當(dāng)前的數(shù)據(jù),或在幀間空隙域檢測到顯性電平時(shí),則導(dǎo)致發(fā)送超載幀。
幀間空隙位于數(shù)據(jù)幀和遠(yuǎn)地幀與前面的信息幀之間,由幀間空隙和總線空閑狀態(tài)組成。幀間空隙是必要的,在此期間, CAN不進(jìn)行新的幀發(fā)送,為的是CAN控制器在下次信息傳遞前有時(shí)間進(jìn)行內(nèi)部處理操作。當(dāng)總線空閑時(shí)CAN控制器方可發(fā)送數(shù)據(jù)。
-
微控制器
+關(guān)注
關(guān)注
48文章
7487瀏覽量
151042 -
CAN
+關(guān)注
關(guān)注
57文章
2715瀏覽量
463364 -
ecu
+關(guān)注
關(guān)注
14文章
880瀏覽量
54404 -
控制網(wǎng)絡(luò)
+關(guān)注
關(guān)注
0文章
27瀏覽量
9508
發(fā)布評論請先 登錄
相關(guān)推薦
評論