1.0 介紹
CAN是控制器區(qū)域網(wǎng)絡(luò)(controller area network)的縮寫,由德國(guó)博世公司(BOSCH)于1986年開(kāi)發(fā),是一種多主節(jié)點(diǎn)、消息廣播系統(tǒng),規(guī)定最大傳輸速率為每秒1兆比特。與USB或以太網(wǎng)等傳統(tǒng)網(wǎng)絡(luò)不同,CAN不會(huì)在總線中心主節(jié)點(diǎn)的監(jiān)督下,從節(jié)點(diǎn)A到節(jié)點(diǎn)B點(diǎn)對(duì)點(diǎn)地發(fā)送大塊數(shù)據(jù)。在CAN網(wǎng)絡(luò)中,許多短消息(如溫度或轉(zhuǎn)速)被廣播到整個(gè)網(wǎng)絡(luò),這保證了系統(tǒng)中每個(gè)節(jié)點(diǎn)獲得數(shù)據(jù)的一致性。
當(dāng)總線空閑時(shí),連接到總線的單元可以發(fā)送消息,即系統(tǒng)為多主站類型。當(dāng)多個(gè)單元同時(shí)開(kāi)始發(fā)送消息時(shí),它們的優(yōu)先級(jí)由位于數(shù)據(jù)幀中的消息標(biāo)識(shí)符解析。一旦,一個(gè)特定的單元贏得了總線競(jìng)爭(zhēng),消息由該單元發(fā)送。其他優(yōu)先級(jí)低的單元可以在總線進(jìn)入空閑狀態(tài)時(shí)發(fā)送它們的消息。
它是傳感器、執(zhí)行器和智能設(shè)備之間非常簡(jiǎn)單、高度可靠和優(yōu)先級(jí)通信協(xié)議?;谳d波感知多址沖突檢測(cè)(CSMA-CD)技術(shù),將生產(chǎn)-消費(fèi)技術(shù)應(yīng)用于物理介質(zhì)的訪問(wèn)。
下面,我們介紹CAN的基礎(chǔ)知識(shí),如消息格式、消息標(biāo)識(shí)符和位仲裁,闡述CAN通信方案的一個(gè)主要優(yōu)點(diǎn)。
2.0 CAN 標(biāo)準(zhǔn)
CAN通信協(xié)議ISO-11898: 2003描述了信息如何在網(wǎng)絡(luò)上的設(shè)備之間傳遞,并符合開(kāi)放系統(tǒng)互連(OSI)模型,不過(guò)其模型只有三層,即只取OSI底層的物理層、數(shù)據(jù)鏈路層和頂層的應(yīng)用層。

其信號(hào)傳輸介質(zhì)可以是雙絞線、同軸電纜或光導(dǎo)纖維。CAN可提供高達(dá)1Mbps的數(shù)據(jù)傳輸速率(此時(shí)通信距離最長(zhǎng)為40m),直接傳輸距離最遠(yuǎn)可達(dá)10km(速率5Kbps以下)。CAN總線通信接口集成了CAN協(xié)議的物理層和數(shù)據(jù)鏈路層功能,可完成對(duì)通信數(shù)據(jù)的成幀處理,包括位填充、數(shù)據(jù)塊編碼、循環(huán)冗余檢驗(yàn)、優(yōu)先級(jí)判別等。CAN協(xié)議的一個(gè)最大特點(diǎn)是廢除了傳統(tǒng)的站地址編碼,而對(duì)通信數(shù)據(jù)塊進(jìn)行編碼。采用這種方法可使網(wǎng)絡(luò)內(nèi)的節(jié)點(diǎn)個(gè)數(shù)在理論上不受限制,但在實(shí)際應(yīng)用中,節(jié)點(diǎn)數(shù)目受網(wǎng)絡(luò)硬件的電氣特性所限制。例如,當(dāng)使用Philips PCA82C250作為CAN收發(fā)器時(shí),同一網(wǎng)絡(luò)中允許掛接110個(gè)節(jié)點(diǎn)。數(shù)據(jù)塊的標(biāo)識(shí)碼可由11位或29位二進(jìn)制數(shù)組成,這種按數(shù)據(jù)塊編碼的方式,還可使不同的節(jié)點(diǎn)同時(shí)接收到相同的數(shù)據(jù),這一點(diǎn)在分布式控制系統(tǒng)中非常有用。
3.0 標(biāo)準(zhǔn)CAN 和擴(kuò)展CAN
CAN通信協(xié)議是一種載波偵聽(tīng)、多址接入、基于消息優(yōu)先級(jí)的沖突檢測(cè)和仲裁(CSMA/CD+AMP)協(xié)議。CSMA意味著總線上的每個(gè)節(jié)點(diǎn)在嘗試發(fā)送消息之前必須等待一段規(guī)定的不活動(dòng)時(shí)間。CD+AMP意味著沖突通過(guò)按位仲裁解決,基于消息標(biāo)識(shí)符字段中每個(gè)消息的預(yù)編程優(yōu)先級(jí)。優(yōu)先級(jí)較高的標(biāo)識(shí)符總是獲得總線訪問(wèn)權(quán)。也就是說(shuō),標(biāo)識(shí)符中最后一個(gè)邏輯高位會(huì)繼續(xù)傳輸,因?yàn)樗膬?yōu)先級(jí)最高。由于總線上的每個(gè)節(jié)點(diǎn)都參與“在被寫入時(shí)”寫入每個(gè)比特,因此仲裁節(jié)點(diǎn)知道它是否將邏輯高位位放置在總線上。
ISO-11898:2003標(biāo)準(zhǔn)使用了標(biāo)準(zhǔn)的11位標(biāo)識(shí)符,規(guī)定了從125 kbps到1 Mbps的信號(hào)速率。該標(biāo)準(zhǔn)后來(lái)被修改為“擴(kuò)展”的29位標(biāo)識(shí)符。標(biāo)準(zhǔn)11位標(biāo)識(shí)符字段可提供2048個(gè)不同的消息標(biāo)識(shí)符,而擴(kuò)展29位標(biāo)識(shí)符可提供5.37億個(gè)標(biāo)識(shí)符。
3.1 標(biāo)準(zhǔn)CAN

上圖位段的含義是:
- SOF(幀起始) — SOF(幀起始)由一個(gè)單獨(dú)的“顯性”位組成。只用當(dāng)總線空閑時(shí),才允許站開(kāi)始發(fā)送。 所有的站必須同步于首先開(kāi)始發(fā)送消息的站的幀起始前沿。
- Identifier(標(biāo)識(shí)符) — 標(biāo)準(zhǔn)CAN 11位標(biāo)識(shí)符確定消息的優(yōu)先級(jí)。二進(jìn)制值越低,優(yōu)先級(jí)越高。
- RTR(遠(yuǎn)程幀標(biāo)志) — 當(dāng)需要從另一個(gè)節(jié)點(diǎn)獲得信息時(shí),這個(gè)遠(yuǎn)程傳輸請(qǐng)求(RTR)位為顯性。所有節(jié)點(diǎn)都收到請(qǐng)求,但標(biāo)識(shí)符決定指定的節(jié)點(diǎn)。響應(yīng)數(shù)據(jù)也會(huì)被所有節(jié)點(diǎn)接收,并供任何感興趣的節(jié)點(diǎn)使用。這樣,系統(tǒng)中使用的所有數(shù)據(jù)都是統(tǒng)一的。
- IDE — 標(biāo)識(shí)符擴(kuò)展(IDE)位,顯性表示傳輸?shù)氖且粋€(gè)沒(méi)有擴(kuò)展的標(biāo)準(zhǔn)CAN標(biāo)識(shí)符。
- r0 — 預(yù)留位(為將來(lái)的標(biāo)準(zhǔn)修訂可能使用)。
- DLC — 4位數(shù)據(jù)長(zhǎng)度碼(DLC)包含正在傳輸?shù)臄?shù)據(jù)的字節(jié)數(shù)。
- 數(shù)據(jù) — 最多可傳輸64位的應(yīng)用程序數(shù)據(jù)。
- CRC — 16位(15位加分隔符)循環(huán)冗余校驗(yàn)(CRC)包含校驗(yàn)和(傳輸?shù)谋忍財(cái)?shù))的上述應(yīng)用程序數(shù)據(jù)進(jìn)行錯(cuò)誤檢測(cè)。
- ACK — 當(dāng)節(jié)點(diǎn)收到正確消息時(shí),節(jié)點(diǎn)在原消息中把這個(gè)隱性位重寫為顯性,表示收到消息正確。如果接收節(jié)點(diǎn)檢測(cè)到錯(cuò)誤并保留該位隱性,則丟棄消息,發(fā)送節(jié)點(diǎn)在重新仲裁后重復(fù)該消息。通過(guò)這種方式,每個(gè)節(jié)點(diǎn)都確認(rèn)其數(shù)據(jù)的完整性。ACK是2位,一個(gè)是應(yīng)答位,第二個(gè)是分隔符。
- EOF — 即幀尾(end-of-frame, EOF), 7個(gè)“隱性”位表示CAN幀(消息)的結(jié)束。
- IFS — 7位幀間隔空間。
3.2 擴(kuò)展CAN

如上圖所示,擴(kuò)展CAN消息與標(biāo)準(zhǔn)消息相同,只是增加了以下內(nèi)容:
- SRR — 遠(yuǎn)程請(qǐng)求(SRR)位取代標(biāo)準(zhǔn)消息位置中的RTR位。
- IDE — 標(biāo)識(shí)符擴(kuò)展(IDE)位,隱性表示后面有18位擴(kuò)展標(biāo)識(shí)符。
- r1 — 在RTR和r0位之后,DLC位之前增加的預(yù)留位。
4.0 CAN 消息
4.1 仲裁
如下圖所示,CAN總線具有兩種邏輯狀態(tài):顯性或隱形。在隱形狀態(tài)下,VCANH和VCANL被固定于平均電壓電平,電平差近似于零;顯性狀態(tài)以大于閾值的差分電壓表示。在顯性位期間,顯性狀態(tài)改變隱形狀態(tài)并發(fā)送。

總線訪問(wèn)是事件驅(qū)動(dòng)的,是隨機(jī)發(fā)生的。如果兩個(gè)節(jié)點(diǎn)試圖同時(shí)占用總線,則使用非破壞性的逐位仲裁實(shí)現(xiàn)訪問(wèn)。非破壞性意味著贏得仲裁的節(jié)點(diǎn)只是繼續(xù)處理消息,消息不會(huì)被另一個(gè)節(jié)點(diǎn)破壞或損壞。
在標(biāo)識(shí)符中為消息分配優(yōu)先級(jí)是CAN的一個(gè)特性,這使得它特別適合在實(shí)時(shí)控制環(huán)境中使用。二進(jìn)制消息標(biāo)識(shí)符編號(hào)越低,其優(yōu)先級(jí)越高。完全由0組成的標(biāo)識(shí)符是網(wǎng)絡(luò)上優(yōu)先級(jí)最高的消息,因?yàn)樗加玫目偩€支配時(shí)間最長(zhǎng)。因此,如果兩個(gè)節(jié)點(diǎn)同時(shí)開(kāi)始傳輸,一個(gè)節(jié)點(diǎn)發(fā)送最后一個(gè)標(biāo)識(shí)符位為0(顯性),而其他節(jié)點(diǎn)發(fā)送標(biāo)識(shí)符位為1(隱性),則該節(jié)點(diǎn)保留對(duì)CAN總線的控制權(quán),繼續(xù)完成其消息。
下圖,顯示了由CAN控制器自動(dòng)處理的CAN仲裁過(guò)程。由于每個(gè)節(jié)點(diǎn)都在持續(xù)監(jiān)控自己的傳輸,當(dāng)節(jié)點(diǎn)B的隱性比特被節(jié)點(diǎn)C的高優(yōu)先級(jí)的顯性比特覆蓋時(shí),節(jié)點(diǎn)B會(huì)檢測(cè)到總線狀態(tài)與它傳輸?shù)谋忍夭黄ヅ洹R虼?,?jié)點(diǎn)B停止傳輸,而節(jié)點(diǎn)C繼續(xù)傳輸它的消息。節(jié)點(diǎn)C釋放總線后,節(jié)點(diǎn)B會(huì)再次嘗試傳輸消息。這個(gè)功能是ISO 11898物理信號(hào)層的一部分,它完全包含在CAN控制器中,對(duì)CAN用戶完全透明。

消息優(yōu)先級(jí)的分配取決于系統(tǒng)設(shè)計(jì)人員,但行業(yè)團(tuán)體對(duì)某些消息的重要性達(dá)成一致。例如,電機(jī)驅(qū)動(dòng)的制造商可以指定消息0010是來(lái)自CAN網(wǎng)絡(luò)上的電機(jī)的繞組電流反饋信號(hào),0011是轉(zhuǎn)速表速度。因?yàn)?010具有最低的二進(jìn)制標(biāo)識(shí)符,在總線上,與當(dāng)前值相關(guān)的消息總是比與轉(zhuǎn)速計(jì)讀數(shù)相關(guān)的消息具有更高的優(yōu)先級(jí)。
在DeviceNet的情況下,來(lái)自許多制造商的設(shè)備(如接近開(kāi)關(guān)和溫度傳感器)可以合并到同一系統(tǒng)中。由于DeviceNet傳感器生成的消息已經(jīng)由開(kāi)放DeviceNet 供應(yīng)商協(xié)會(huì) (ODVA)預(yù)定義,因此無(wú)論實(shí)際制造商是誰(shuí),某種消息總是與特定類型的傳感器相關(guān),如溫度。
4.2 消息類型
可以在CAN總線上傳輸?shù)乃姆N不同的消息類型或幀是,數(shù)據(jù)幀、遠(yuǎn)程幀、錯(cuò)誤幀和過(guò)載幀。
4.2.1 數(shù)據(jù)幀
數(shù)據(jù)幀是最常見(jiàn)的消息類型,由仲裁字段、數(shù)據(jù)字段、CRC字段和確認(rèn)字段組成。仲裁字段包含一個(gè)11位的標(biāo)識(shí)符和RTR位,后者在數(shù)據(jù)幀中占主導(dǎo)地位。擴(kuò)展CAN包含29位的標(biāo)識(shí)符和RTR位。接下來(lái)是數(shù)據(jù)字段,它包含0到8字節(jié)的數(shù)據(jù),以及CRC字段,它包含用于錯(cuò)誤檢測(cè)的16位校驗(yàn)和。最后是確認(rèn)段。
4.2.2 遠(yuǎn)程幀
遠(yuǎn)程幀的預(yù)期目的是從另一個(gè)節(jié)點(diǎn)請(qǐng)求數(shù)據(jù)傳輸。遠(yuǎn)程幀與數(shù)據(jù)幀類似,有兩個(gè)重要區(qū)別。首先,這種類型的消息被仲裁字段中的隱性RTR位標(biāo)記為遠(yuǎn)程幀,其次,沒(méi)有數(shù)據(jù)。
4.2.3 錯(cuò)誤幀
錯(cuò)誤幀是違反CAN消息格式規(guī)則的特殊消息。當(dāng)一個(gè)節(jié)點(diǎn)檢測(cè)到消息中的錯(cuò)誤時(shí),它將被傳輸,并導(dǎo)致網(wǎng)絡(luò)中的所有其他節(jié)點(diǎn)也發(fā)送一個(gè)錯(cuò)誤幀。然后,原來(lái)的發(fā)送器自動(dòng)重新傳輸消息。在CAN控制器中,一個(gè)復(fù)雜的錯(cuò)誤計(jì)數(shù)器系統(tǒng)可以確保節(jié)點(diǎn)不會(huì)因重復(fù)傳輸錯(cuò)誤幀而阻塞總線。
4.2.4 過(guò)載幀
為了完整起見(jiàn),這里提到了過(guò)載幀。在格式方面,它與錯(cuò)誤幀類似,并且它是由一個(gè)過(guò)于繁忙的節(jié)點(diǎn)傳輸?shù)?。它主要用于提供消息之間的額外延遲。
4.3 有效幀
當(dāng)接收到消息的結(jié)束EOF段的最后一位隱性,則認(rèn)為該消息是無(wú)錯(cuò)誤的。EOF段中的有顯性位,則發(fā)送節(jié)點(diǎn)重復(fù)一次傳輸。
4.4 錯(cuò)誤檢查和故障限制
CAN的健壯性部分歸功于它豐富的錯(cuò)誤檢查程序。CAN協(xié)議包含五種錯(cuò)誤檢查方法:三種在消息級(jí),兩種在位級(jí)。如果消息未能通過(guò)這些錯(cuò)誤檢測(cè)方法中的任何一種,則不接受該消息,并從接收節(jié)點(diǎn)生成錯(cuò)誤幀。這迫使發(fā)送節(jié)點(diǎn)重新發(fā)送消息,直到正確接收到它。但是,如果一個(gè)故障節(jié)點(diǎn)通過(guò)不斷重復(fù)錯(cuò)誤而使總線掛起,它的傳輸能力將在達(dá)到錯(cuò)誤限制后被控制器刪除。
消息級(jí)別的錯(cuò)誤檢查由CRC和ACK槽執(zhí)行。16位的CRC包含了用于錯(cuò)誤檢測(cè)的上述應(yīng)用程序數(shù)據(jù)的校驗(yàn)和,其中有15位的校驗(yàn)和和1位的定界符。ACK段有兩個(gè)比特位,由確認(rèn)位和確認(rèn)分隔符位組成。
同樣在消息級(jí)別還有形式檢查。此檢查在消息中查找必須總是隱性位的段。如果檢測(cè)到顯性位,則產(chǎn)生錯(cuò)誤。檢查的位是SOF、EOF、ACK分隔符和CRC分隔符位。
在位級(jí),傳輸?shù)拿總€(gè)位都由消息的發(fā)送方監(jiān)視。如果一個(gè)數(shù)據(jù)位(不是仲裁位)被寫入總線,而監(jiān)測(cè)到它的反相位,則會(huì)產(chǎn)生一個(gè)錯(cuò)誤。唯一的例外是用于仲裁的消息標(biāo)識(shí)符段,以及需要由顯性位覆蓋隱性位的確認(rèn)槽。
錯(cuò)誤檢測(cè)的最后一種方法是位填充規(guī)則,即在相同邏輯層的六個(gè)連續(xù)比特相同,則產(chǎn)生錯(cuò)誤。
5.0 CAN 總線
CAN總線的數(shù)據(jù)鏈路和物理信號(hào)層,通常對(duì)系統(tǒng)操作者是透明的,包含在任何實(shí)現(xiàn)CAN協(xié)議的控制器中。然后通過(guò)CAN總線收發(fā)器實(shí)現(xiàn)與物理介質(zhì)的連接,形成如下圖所示的系統(tǒng)節(jié)點(diǎn)。

總線的兩條信號(hào)線CANH和CANL在靜態(tài)隱性狀態(tài)下被動(dòng)偏置到?2.5 V??偩€上的顯性狀態(tài)在CANH和CANL之間形成典型的2v差分信號(hào)。
信號(hào)是差分的,可以得到其健壯的抗噪性和容錯(cuò)性。平衡差分信號(hào)降低了噪聲耦合,并允許雙絞線上的高信號(hào)速率。平衡是指流過(guò)每條信號(hào)線的電流相等但方向相反,從而產(chǎn)生場(chǎng)抵消效應(yīng),這是低噪聲釋放的關(guān)鍵。采用平衡差動(dòng)接收機(jī)和雙絞線布線提高了CAN總線的共模抑制能力和抗噪能力。
電子發(fā)燒友App
























評(píng)論