一文看懂CAN協(xié)議
2025-7-18新聞

CAN協(xié)議的誕生與發(fā)展
CAN(Controller Area Network)協(xié)議誕生于1986年,由德國(guó)博世(Bosch)公司為了解決汽車內(nèi)各電子控制單元(ECU)之間的高效、可靠通信需求而提出。1987年發(fā)布第一版,1993年正式成為國(guó)際標(biāo)準(zhǔn) ISO11898。一句話總結(jié):CAN協(xié)議是為了解決汽車內(nèi)設(shè)備間的高速、抗干擾通信而生的總線標(biāo)準(zhǔn)。


3. CAN控制器與CAN收發(fā)器
CAN控制器負(fù)責(zé)數(shù)據(jù)幀的組幀、收幀、錯(cuò)誤檢測(cè)、仲裁和協(xié)議處理。一般集成在MCU或外部芯片內(nèi)(如SJA1000)。
CAN收發(fā)器(Transceiver)負(fù)責(zé)電氣信號(hào)的物理層轉(zhuǎn)換,將數(shù)字信號(hào)(TTL/CMOS電平)轉(zhuǎn)換為CAN差分信號(hào),常見芯片有TJA1043、SN65HVD230等。
一句話理解:控制器管“內(nèi)容”,收發(fā)器管“信號(hào)”。

4. 線與邏輯:CAN_H、CAN_L和線與仲裁
物理層:CAN采用雙線差分信號(hào)(CAN_H與CAN_L),抗干擾能力強(qiáng),支持大約40米至數(shù)公里的傳輸距離。
邏輯“線與”:CAN總線采用“線與”機(jī)制,只要有一個(gè)節(jié)點(diǎn)輸出顯性(Dominant)電平,整個(gè)總線就是顯性。
顯性電平(0): CAN_H > CAN_L(一般3.5V對(duì)1.5V)
隱性電平(1): CAN_H ≈ CAN_L(一般2.5V)
仲裁機(jī)制:所有節(jié)點(diǎn)同時(shí)發(fā)送數(shù)據(jù),ID(標(biāo)識(shí)符)低位(0)優(yōu)先。如果有節(jié)點(diǎn)發(fā)送隱性位,但總線上檢測(cè)到顯性位,則主動(dòng)退出——ID越小,優(yōu)先級(jí)越高。

5. 為什么ID越小優(yōu)先級(jí)越大?
CAN ID本質(zhì)上是數(shù)據(jù)幀的“地址”或“標(biāo)簽”。
仲裁過程:發(fā)送過程中每個(gè)節(jié)點(diǎn)在每一位都對(duì)比自己發(fā)出的和總線實(shí)際的,如果發(fā)現(xiàn)自己發(fā)的是1(隱性),但總線是0(顯性),說(shuō)明有更高優(yōu)先級(jí)的幀,自己必須讓路。
舉例:
NodeA發(fā)0x100(0001 0000 0000)
NodeB發(fā)0x080(0000 1000 0000)
誰(shuí)先在第4位上發(fā)0,誰(shuí)優(yōu)先
所以ID越小,優(yōu)先級(jí)越大!

6. 沒有時(shí)鐘信號(hào),CAN如何實(shí)現(xiàn)同步?
CAN是異步通信,不像SPI、I2C等總線需要主時(shí)鐘線。所有節(jié)點(diǎn)各自擁有自己的波特率時(shí)鐘,但數(shù)據(jù)能在網(wǎng)絡(luò)上“對(duì)齊”,靠的不是外部時(shí)鐘,而是協(xié)議自帶的“同步機(jī)制”。
1)邊沿同步(Edge Synchronization)
CAN總線采用NRZ(非歸零)編碼,數(shù)據(jù)跳變(顯性/隱性轉(zhuǎn)換)會(huì)成為各節(jié)點(diǎn)同步信號(hào)。只要偵測(cè)到邊沿(信號(hào)變化),所有節(jié)點(diǎn)自動(dòng)用這個(gè)邊沿調(diào)整采樣點(diǎn),對(duì)齊時(shí)鐘,防止時(shí)鐘漂移。
2)位填充(Bit Stuffing)
為保證傳輸中始終有同步邊沿,CAN規(guī)定:每發(fā)送5個(gè)連續(xù)相同位,就自動(dòng)插入1個(gè)反轉(zhuǎn)位,這樣強(qiáng)制制造跳變,各節(jié)點(diǎn)就能根據(jù)跳變修正采樣點(diǎn)。
3)多采樣點(diǎn)采樣
每個(gè)節(jié)點(diǎn)實(shí)際內(nèi)部是“超采樣”,通常每個(gè)比特周期分8~16份,只在最合適的點(diǎn)采樣。采樣點(diǎn)會(huì)根據(jù)實(shí)際邊沿自動(dòng)校準(zhǔn),抵抗時(shí)鐘微小漂移。
4)同步舉例
比如一個(gè)節(jié)點(diǎn)時(shí)鐘偏快,采樣點(diǎn)提前,遇到跳變后會(huì)立即修正。長(zhǎng)期運(yùn)行下,所有節(jié)點(diǎn)即使有時(shí)鐘誤差,也能靠跳變信號(hào)保持同步。
5)回傳機(jī)制(Loopback / Monitoring)
回傳機(jī)制(自監(jiān)視/回讀):
節(jié)點(diǎn)發(fā)送數(shù)據(jù)時(shí)會(huì)同步接收總線上的實(shí)際信號(hào)(邊發(fā)邊收)。


7. bus-off:CAN的自我保護(hù)機(jī)制
什么是bus-off?
當(dāng)某個(gè)節(jié)點(diǎn)連續(xù)出現(xiàn)大量發(fā)送錯(cuò)誤(典型值:128次/256次),CAN控制器會(huì)進(jìn)入bus-off狀態(tài)。
bus-off后,節(jié)點(diǎn)會(huì)停止向總線發(fā)送任何數(shù)據(jù),直到經(jīng)過一段恢復(fù)機(jī)制。作用:防止“異常節(jié)點(diǎn)”一直影響總線健康,提升系統(tǒng)魯棒性和安全性。

Q&A:CAN相關(guān)常見問題
1. CAN是全雙工通信嗎?
2. 使用CAN協(xié)議,芯片廠商是否需要向博世/ISO支付費(fèi)用?
3. CAN和LIN、FlexRay、以太網(wǎng)有何區(qū)別?
簡(jiǎn)明對(duì)比:
4. CAN網(wǎng)絡(luò)為什么要終端電阻?如果沒接會(huì)怎樣?
5. CAN節(jié)點(diǎn)可以“熱插拔”嗎?
6. CAN的典型應(yīng)用場(chǎng)景有哪些?
7. CAN幀有哪些類型?每種類型有什么用?
感謝觀看
# 免責(zé)聲明 # 本文轉(zhuǎn)自網(wǎng)絡(luò),版權(quán)歸原作者所有,如涉及作品版權(quán)問題,請(qǐng)及時(shí)與我們聯(lián)系刪除,謝謝!