在前2天的推送中我們介紹了I2C、SPI 總線,但它們多用于傳輸距離短、協(xié)議簡單、數(shù)據(jù)量小、主要面向 IC(集成電路)間通信的“輕量級”場合。而 CAN 總線則不同,CAN 總線定義了更為優(yōu)秀的物理層、數(shù)據(jù)鏈路層,并且擁有種類豐富、簡繁不一的上層協(xié)議。
什么是CAN 總線
CAN 是“Controller Area Network”的縮寫,即“控制器局域網(wǎng)”,是一個 ISO 標(biāo)準(zhǔn)的串行通信協(xié)議。CAN 總線由德國 BOSCH 公司研發(fā)設(shè)計,用于應(yīng)對汽車上日益龐大的電子控制系統(tǒng)的需求,其最大的特點是可拓展性好,可承受大量數(shù)據(jù)的高速通信,并且高度穩(wěn)定可到。ISO 組織通過 ISO11898 和 ISO11519 對 CAN 總線進行了標(biāo)準(zhǔn)化,使其早早確立了歐洲汽車總線標(biāo)準(zhǔn)的地位。時至今日,CAN 總線已經(jīng)獲得業(yè)界的高度認(rèn)可,其應(yīng)用也從汽車電子領(lǐng)域延伸至工業(yè)自動化、船舶、醫(yī)療設(shè)備、工業(yè)設(shè)備等領(lǐng)域。
CAN 總線網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
CAN 總線的物理連接只需要兩根線,常稱為CAN_H和CAN_L,通過差分信號進行數(shù)據(jù)的傳輸。CAN 總線有兩種電平,分別為隱性電平和顯性電平,這兩種電平有著類似漏極 I/O 電平信號之間“與”的關(guān)系:
·若隱性電平相遇,則總線表現(xiàn)為隱性電平;
·若顯性電平相遇,則總線表現(xiàn)為顯性電平;
·若隱性電平和顯性電平相遇,則總線表現(xiàn)為顯性電平。
一個典型的 CAN 總線網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖1所示,注意兩端的終端電阻是必需的。
圖1. CAN 總線網(wǎng)絡(luò)拓?fù)?/p>
CAN 總線的幾種數(shù)據(jù)幀
CAN 總線協(xié)議規(guī)定了5種幀,分別是數(shù)據(jù)幀、遙控幀、錯誤幀、過載幀以及幀間隔,實踐中數(shù)據(jù)幀的應(yīng)用最為頻繁。各種幀的用途如表1所示。
表1. CAN 總線數(shù)據(jù)幀的種類及用途
CAN 總線的特點
CAN 總線網(wǎng)絡(luò)是一種真正的多主機網(wǎng)絡(luò),在總線處于空閑狀態(tài)時,任何一個節(jié)點單元都可以申請成為主機,向總線發(fā)送消息。其原則是:最先訪問總線的節(jié)點單元可以獲得總線的控制權(quán);多個節(jié)點單元同時嘗試獲取總線的控制權(quán)時,將發(fā)生仲裁事件,具有高優(yōu)先級的節(jié)點單元將獲得總線控制權(quán)。
CAN 協(xié)議中,所有的消息都以固定的數(shù)據(jù)格式打包發(fā)送。兩個以上的節(jié)點單元同時發(fā)送信息時,根據(jù)節(jié)點標(biāo)識符(常稱為 ID,亦打包在固定的數(shù)據(jù)格式中)決定各自優(yōu)先級關(guān)系,所以 ID 并非表示數(shù)據(jù)發(fā)送的目的地址,而是代表著各個節(jié)點訪問總線的優(yōu)先級。如此看來,CAN 總線并無類似其他總線“地址”的概念,在總線上增加節(jié)點單元時,連接在總線的其他節(jié)點單元的軟硬件都不需要改變。
CAN 總線的通信速率和總線長度有關(guān),在總線長度小于 40m 的場合中,數(shù)據(jù)傳輸速率可以達(dá)到 1Mbps,而即便總線長度上升至 1000m,數(shù)據(jù)的傳輸速率仍可達(dá)到 50Kbps,無論在速率還是傳輸距離都明顯優(yōu)于常見的 RS232、RS485 和 I2C 總線。
對于總線錯誤,CAN 總線有錯誤檢測功能、錯誤通知功能、錯誤恢復(fù)功能三種應(yīng)對措施,分別應(yīng)對于下面三點表述:所有的單元節(jié)點都可以自動檢測總線上的錯誤;檢測出錯誤的節(jié)點單元會立刻將錯誤通知給其他節(jié)點單元;若正在發(fā)送消息的單元檢測到當(dāng)前總線發(fā)生錯誤,則立刻強制取消當(dāng)前發(fā)送,并不斷反復(fù)發(fā)送此消息至成功為止。
CAN 總線上的每個節(jié)點都可以通過判斷得出,當(dāng)前總線上的錯誤時暫時的錯誤(如瞬間的強干擾)還是持續(xù)的錯誤(如總線斷裂)。當(dāng)總線上發(fā)生持續(xù)錯誤時,引起故障的節(jié)點單元會自動脫離總線。
CAN 總線上的節(jié)點數(shù)量在理論上沒有上限,但在實際上收到總線上的時間延時及電氣負(fù)載的限制。降低最大通信速率,可以增加節(jié)點單元的連接數(shù);反之,減少節(jié)點單元的連接數(shù),則最大通信速率可以提高。
-
CAN
+關(guān)注
關(guān)注
57文章
2760瀏覽量
463993 -
總線
+關(guān)注
關(guān)注
10文章
2892瀏覽量
88210 -
I2C
+關(guān)注
關(guān)注
28文章
1490瀏覽量
124080
原文標(biāo)題:淺淡CAN總線,相比I2C、SPI?,它有更為擁有種類豐富、簡繁不一的上層協(xié)議
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論