CAN 總線誕生于上世紀(jì) 80 年代,有助于在車(chē)輛內(nèi)進(jìn)行可靠的電子通信。本文將深入探討 CAN 總線的基本原理、架構(gòu)、協(xié)議、應(yīng)用和局限性。
簡(jiǎn)介
控制器局域網(wǎng)(CAN)總線由博世于 20 世紀(jì) 80 年代開(kāi)發(fā),是工業(yè)和汽車(chē)應(yīng)用中常用的通信協(xié)議。它的開(kāi)發(fā)旨在改善電子控制單元(ECU)之間的數(shù)據(jù)交換,從而提高汽車(chē)系統(tǒng)的效率。1993 年,CAN 被納入國(guó)際標(biāo)準(zhǔn)通信系統(tǒng) ISO 11898,應(yīng)用于工業(yè)和汽車(chē)領(lǐng)域。
它是一種基于報(bào)文的協(xié)議,最初設(shè)計(jì)用于汽車(chē)內(nèi)的多路復(fù)用電氣布線,以節(jié)省銅纜,但也用于許多其他場(chǎng)合。對(duì)于業(yè)余愛(ài)好者來(lái)說(shuō),CAN 總線可能看起來(lái)令人困惑或復(fù)雜,但其核心原理卻是簡(jiǎn)單明了的。
從汽車(chē)音響到防抱死制動(dòng)系統(tǒng),CAN 總線是一種允許汽車(chē)系統(tǒng)和設(shè)備相互通信的通信方法。CAN 總線是在對(duì)等 ECU 和其他設(shè)備之間交換指令的媒介。
CAN 總線的基本原理
控制器局域網(wǎng)(CAN)總線的運(yùn)行原理是分散式聯(lián)網(wǎng),即網(wǎng)絡(luò)上的所有節(jié)點(diǎn)(或設(shè)備)在傳輸數(shù)據(jù)的能力上都是平等的。這有別于由中央主設(shè)備控制通信的傳統(tǒng)網(wǎng)絡(luò)模式。
CAN 總線數(shù)據(jù)傳輸
在 CAN 網(wǎng)絡(luò)中,任何節(jié)點(diǎn)都可以在總線空閑時(shí)傳輸數(shù)據(jù)。數(shù)據(jù)以幀的形式發(fā)送,其中包含傳輸?shù)男畔⒁约坝糜阱e(cuò)誤檢查和識(shí)別的附加數(shù)據(jù)。
CAN 總線按照 "廣播 "原則運(yùn)行 ,即所有節(jié)點(diǎn)都能接收到所有傳輸信息。然后,每個(gè)節(jié)點(diǎn)根據(jù) CAN 幀中的標(biāo)識(shí)符決定是忽略數(shù)據(jù)還是接受數(shù)據(jù)。該標(biāo)識(shí)符不是源地址或目的地址,而是表示報(bào)文內(nèi)容的標(biāo)簽。這意味著同一報(bào)文可由多個(gè)節(jié)點(diǎn)接收和處理,這在汽車(chē)應(yīng)用中尤其有用,因?yàn)樵谄?chē)應(yīng)用中,多個(gè)系統(tǒng)可能需要相同的數(shù)據(jù)。這也意味著,特定節(jié)點(diǎn)無(wú)法根據(jù)地址向特定節(jié)點(diǎn)發(fā)送信息。
CAN 總線系統(tǒng)中的數(shù)據(jù)傳輸基于差分雙線接口(取代了復(fù)雜的線束和連接器),從而增強(qiáng)了在汽車(chē)電氣噪聲環(huán)境中的抗噪能力。CAN-High (CANH) 和 CAN-Low (CANL) 兩根線傳輸互補(bǔ)信號(hào)。當(dāng)節(jié)點(diǎn)傳輸顯性(0)信號(hào)時(shí),CAN-High 的電壓電平高于 CAN-Low。反之,當(dāng)傳輸隱性(1)信號(hào)時(shí),CAN-High 和 CAN-Low 處于同一電壓電平。
數(shù)據(jù)以幀為單位傳輸,幀由多個(gè)字段組成。其中最重要的是標(biāo)識(shí)符字段和數(shù)據(jù)字段。標(biāo)識(shí)符字段包含報(bào)文的標(biāo)識(shí)符,接收節(jié)點(diǎn)用它來(lái)決定是否接受報(bào)文。數(shù)據(jù)字段包含實(shí)際傳輸?shù)臄?shù)據(jù),在標(biāo)準(zhǔn) CAN 中最多為 8 字節(jié),在 CAN FD(靈活數(shù)據(jù)速率)中最多為 64 字節(jié)。
數(shù)據(jù)幀中各個(gè)字段的意義如下:
CAN 總線中的數(shù)據(jù)傳輸受帶沖突檢測(cè)的載波偵聽(tīng)多路訪問(wèn) (CSMA/CD)原理的控制。這意味著每個(gè)節(jié)點(diǎn)都會(huì)監(jiān)視總線(載波偵聽(tīng))并在總線空閑時(shí)進(jìn)行傳輸(多路訪問(wèn))。如果兩個(gè)節(jié)點(diǎn)同時(shí)傳輸(沖突),則標(biāo)識(shí)符值較低的節(jié)點(diǎn)繼續(xù)傳輸,而另一個(gè)節(jié)點(diǎn)停止傳輸。這是因?yàn)轱@性位會(huì)覆蓋總線上的隱性位,并且較低的標(biāo)識(shí)符(較低的數(shù)值)在 CAN 幀的開(kāi)頭具有更多的顯性位。這種機(jī)制確保首先傳輸最高優(yōu)先級(jí)的消息(具有較低標(biāo)識(shí)符的消息)。
錯(cuò)誤檢測(cè)和處理
CAN 總線系統(tǒng)的主要特點(diǎn)之一是其高效的錯(cuò)誤檢測(cè)和處理能力。該系統(tǒng)包含五種錯(cuò)誤檢測(cè)方法,每種方法都旨在確保數(shù)據(jù)傳輸?shù)耐暾?,具體討論如下:
比特監(jiān)控:CAN 網(wǎng)絡(luò)系統(tǒng)中的每個(gè)傳輸節(jié)點(diǎn)在傳輸過(guò)程中都會(huì)監(jiān)控總線的狀態(tài)。如果總線狀態(tài)與預(yù)期狀態(tài)不符,節(jié)點(diǎn)就會(huì)知道發(fā)生了錯(cuò)誤。
幀校驗(yàn)序列(FCS):該字段包含一個(gè)循環(huán)冗余校驗(yàn)(CRC)值,該值根據(jù)幀中的數(shù)據(jù)計(jì)算得出。每個(gè)接收節(jié)點(diǎn)計(jì)算自己的 CRC 值,并與接收到的 FCS 進(jìn)行比較。如果兩個(gè)值不匹配,節(jié)點(diǎn)就會(huì)知道發(fā)生了錯(cuò)誤。
確認(rèn)檢查:每個(gè)幀都包含一個(gè) ACK 時(shí)隙,所有其他節(jié)點(diǎn)都要在這個(gè)時(shí)隙中發(fā)送一個(gè)顯性比特,以確認(rèn)收到該幀。如果發(fā)送節(jié)點(diǎn)在 ACK 時(shí)隙中沒(méi)有檢測(cè)到主位,它就知道發(fā)生了錯(cuò)誤。
幀格式檢查:每個(gè)幀都有特定的格式,包括預(yù)期顯性位和隱性位的特定位置。如果節(jié)點(diǎn)檢測(cè)到違反此格式的情況,就知道發(fā)生了錯(cuò)誤。
錯(cuò)誤幀:當(dāng)節(jié)點(diǎn)使用上述任何一種方法檢測(cè)到錯(cuò)誤時(shí),它會(huì)傳輸一個(gè)特殊的錯(cuò)誤幀,提醒所有其他節(jié)點(diǎn)注意該錯(cuò)誤。這會(huì)導(dǎo)致所有節(jié)點(diǎn)丟棄當(dāng)前幀,等待重新傳輸正確的幀。
檢測(cè)到錯(cuò)誤時(shí),檢測(cè)到錯(cuò)誤的節(jié)點(diǎn)會(huì)自動(dòng)重新傳輸幀。這種情況一直持續(xù)到無(wú)錯(cuò)傳輸幀為止。如果節(jié)點(diǎn)檢測(cè)到太多錯(cuò)誤,它就會(huì)進(jìn)入錯(cuò)誤被動(dòng)狀態(tài),此時(shí)它只監(jiān)聽(tīng)總線而不傳輸。如果錯(cuò)誤繼續(xù)發(fā)生,節(jié)點(diǎn)將進(jìn)入總線關(guān)閉狀態(tài),與總線斷開(kāi)連接。這種機(jī)制可確保故障節(jié)點(diǎn)不會(huì)中斷總線上的通信。
2024-10-14 09:19
2024-10-13 12:05
2024-10-11 11:57
2024-10-10 10:00
2024-10-09 10:05
2024-10-08 11:01
2024-10-08 09:55
2024-09-29 10:07
2024-09-29 09:59