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