車載網絡CAN(一):CAN協議基礎知識
摘要
從本期開始,我們連載“車載網絡CAN機制”系列文章,該專題連載共分為“五”篇,這是第一篇。在這一部分中,我們將對車載網絡中使用的標準“CAN(控制器局域網)”進行更詳細的解釋。
車載網絡應用廣泛,涵蓋動力系統、車身系統和舒適性設備系統等,但它們必須滿足諸多要求,包括安全性、可靠性、成本、抗外部因素能力和開發周期。為了滿足這些要求,人們設計并應用了各種通信方法,但毫不夸張地說,本系列文章重點介紹的CAN總線是目前車載網絡的實際“標準”。
本系列的第一篇將介紹理解CAN協議所需的基礎知識。從下一篇開始,我們計劃解釋數據傳輸機制。
CAN功能
首先,CAN的特性如下所示。
·線路結構
·多主系統
·CSMA/CA
·使用 ID 進行消息尋址
·抗噪聲物理層
·錯誤檢測機制
·數據一致性
這些物品被采用的目的是什么?它們有什么作用?讓我們快速了解一下。
線路結構
不僅適用于車載網絡,一般來說,任何連接到網絡的通信設備都被稱為“節點”。在車載網絡中,這個節點就是“電子控制單元(ECU) ”。
網絡是通過連接多個節點而創建的,拓撲結構有多種類型,例如環形拓撲、星形拓撲和線形拓撲。CAN使用“線形拓撲”(圖 1)。

圖1、線型結構圖
線型網絡方法的優點在于網絡結構簡單易于設計,只需將每個節點連接到通信線路即可完成配置(注)。車載網絡的最初目的是“消除復雜的布線”,從這個角度來看,線型結構非常符合這一目的。
CAN使用“多主系統”,允許 線路結構中連接的每個節點平等地訪問總線(注意)。
使用多主系統的優勢在于:
·每個節點都可以設計成統一的規格。
·由于節點之間沒有優劣之分,因此它適用于面向事件的通信。
·易于添加節點
例如:
這意味著在開發過程中,每個節點都可以按照相同的規格進行設計,并且數據僅在必要時傳輸,從而實現高度靈活的網絡配置,因為節點之間不存在優劣之分。由于車載網絡會面臨各種使用場景和設計變更,這種高度靈活的網絡配置至關重要。
CSMA/CA
通常情況下,如果多個節點自由發送數據,就會發生數據沖突,因此會采用一種機制來“當通信線路正在使用時阻止數據傳輸”。然而,當多個節點同時向通信線路發送數據時,這種情況就無法避免了。
相比之下,CAN使用CSMA/CA(載波偵聽多路訪問/沖突避免)機制,這意味著即使多個節點同時向通信線路發送數據,也只會發送優先級最高的數據(不會發生沖突)。只要重要數據被賦予高優先級,就能確保即使多個節點同時發送數據,數據傳輸也能可靠進行(圖 2)。

圖2、CSMA/CA圖
例如,如果發動機ECU的數據非常重要,您可以預先設置發動機ECU端的優先級。這樣,即使發動機ECU的數據和空調ECU的數據同時發送,發動機ECU的數據也能完整地發送到通信線路,而不會出現數據損壞。具體的處理方法將在下一篇文章中詳細介紹。
使用ID進行消息尋址
使用 ID 的消息尋址是一種在發送數據之前為其添加 ID(標識符)的方法,用于節點間的數據交換。數據的接收者可以使用此 ID 來確定“數據類型”以及“該數據是否供其使用”。
此外,利用這種方法,一個發送節點的數據可以同時被多個接收節點接收。在車載網絡中,來自發動機ECU的數據可以同時被儀表ECU和空調ECU接收和使用。換句話說,多個ECU更容易協同工作并同時執行控制。
抗噪聲物理層
動力總成系統中使用的“高速CAN(CAN-C)”采用“雙線差分電壓法”進行通信。雙線差分電壓法根據兩根導線(雙絞線)之間的電壓差來傳輸數據。采用這種方法,即使引入外部噪聲,每根導線上的噪聲電壓也幾乎相同(換句話說,每根導線之間的差分電壓不會改變),因此不易受噪聲影響(圖3)。

圖3、電壓差圖
車載設備不可避免地會受到外部噪聲的影響,但 CAN 采用的方法使其不易受到此類影響,從而可以構建高度可靠的網絡。
錯誤檢測機制
在車載網絡中,安全是一個重要的考慮因素,因此必須避免由于某種異常情況導致每個節點使用的數據到達錯誤,從而妨礙正常控制的情況。
為了解決這個問題,CAN 實現了多種錯誤檢測機制,使得各種錯誤的檢出率接近 100%。例如,發送節點會檢查其發送的數據是否與通信線路上傳輸的數據匹配,如果存在差異,則會檢測到錯誤。詳細的錯誤檢測機制將在下一篇文章中解釋。
數據一致性
在車輛控制中,有些情況下節點會協同工作,并在特定時間同時執行控制。
例如,如果多個節點使用當前發動機轉速進行控制,則發動機轉速數據會從發動機ECU發送到每個節點。通常情況下,如果所有接收節點都能正常接收數據,則不會出現問題;但如果其中一個節點出現故障而無法接收數據,會發生什么情況?
你可能會認為,如果只有那些未能接收到數據的節點才能讓發動機ECU重新發送數據,那就沒問題了,但這也就意味著接收到的數據可能是在發動機轉速發生變化之后的數據,也就是說,每個節點使用的發動機轉速數據可能會有所不同。
相比之下,CAN 的設計使得如果一個節點未能接收到數據,所有能夠接收到數據的節點都會丟棄該數據,并且這個過程會重復進行,直到所有節點都成功接收到數據為止。通過這種方式,CAN 能夠保持數據的一致性。
CAN的其他特性包括:
·一次最多可以發送 8 字節的數據
·最大通信速度為 1Mbps
CAN基礎知識
接下來,我們將解釋以下術語,作為 CAN 的基礎知識。
·顯性和隱性
·信號編碼
·通信速度
·同步
·位填充規則
顯性和隱性
CAN總線采用數字方式傳輸數據。待傳輸的數據被轉換成二進制數“0”和“1”,并通過通信線路發送。在CAN總線中,傳輸的二進制數據中的“0”被稱為“顯性”,“1”被稱為“隱性”。
顯性就是“顯性”,隱性就是“隱性”,因此,如果顯性基因和隱性基因同時從不同的節點傳遞,顯性基因會優先表達。CAN利用這一規則來實現各種機制,所以理解顯性基因和隱性基因之間的關系至關重要。
信號編碼
CAN 使用“NRZ(不歸零)方法”來轉換和傳輸待傳輸的數據。這種方法轉換起來相對簡單,因此被廣泛應用于各種通信協議中。

圖4、NRZ圖
例如,在NRZ格式中,如果要傳輸的數據是“0001100”,則連續的“0”將保持為“0”,連續的“1”將保持為“1”,從而產生一系列顯性和隱性狀態。連續狀態存在一些缺點,但已有機制可以解決這個問題,稍后將對此進行討論。
通信速度
通信速度通常以“ bps(比特每秒) ” 表示。它表示每秒可以傳輸多少比特的數據。數值越高,短時間內可以傳輸的數據量就越多。例如,2 bps 的通信速度意味著每秒可以傳輸 2 比特的數據。
如圖 5 所示,在節點 A 以 1 bps 運行,節點 B 以 2 bps 運行的環境中,當節點 A 發送一個“1”時,節點 B 會收到兩個“1”。換句話說,節點 A 和節點 B 之間的數據傳輸無法正常進行。

圖5、通信速度圖表
為了確保正常通信,保持各節點之間“相同的通信速度”非常重要。
同步
各種各樣的節點連接到車載網絡,每個節點都有一個“晶體振蕩器”,用于生成內部程序處理的參考時間(以下簡稱系統時鐘)。
該晶體振蕩器可以相對準確地產生時間,但由于車載網絡中的每個節點都安裝在不同的位置,因此很容易受到外部溫度等因素的影響,從而導致每個節點的系統時鐘因通電時間的變化而出現差異。
CAN 使用系統時鐘將顯性狀態和隱性狀態的長度配置為 1 位,但如果每個節點的系統時鐘不同,則每個 1 位的長度也會不同。此外,1 位長度的差異會導致上述通信速度的差異,從而無法正確交換數據。
防止這種情況發生的控制機制稱為“同步”,它可以校正各個節點之間系統時鐘的差異。在CAN總線中,當信號從隱性變為顯性(即信號從“1”變為“0”)時,同步就實現了。
位填充規則
在上述NRZ編碼格式中,如果連續出現“0”,例如“0000”,則狀態將保持不變。同步是通過在“1”和“0”之間切換來實現的,因此如果“0”長時間持續,則無法進行同步。如果無法同步,則各節點之間的通信速度將出現差異,從而導致無法進行正常的通信。
因此,CAN使用“位填充規則”。
這是一種機制,如果通信線路上連續五次傳輸相同的狀態,則會插入一個與之前傳輸的狀態相反的比特(“填充比特”)。圖 6 顯示了它的工作原理。

圖6、位填充規則
例如,如果序列為“000000111111”,則實際傳輸為“00000 1 011111 0 1”(粗體字符表示插入的填充位)。
另外,如果重復為“0000011111”,則會變成“00000 1 1111 0 1”。
這是因為插入的填充位也被計入通信線路的狀態中。這樣,通過采用位填充規則,就可以防止通信線路上同一狀態無限延續。
你可能會想:“等等,這豈不是意味著原本應該發送的數據在通信線路上被這些填充位改變了?”然而,由于發送方和接收方都遵循相同的規則,如果相同的狀態連續出現五次,接收方就可以很容易地判斷出接收到的下一個比特是填充位,從而可以使用不包含填充位的數據。
下一篇文章,我們將逐步解釋“數據傳輸機制”。更多內容,關注牛喀網,學習更多汽車科技。有興趣的朋友,可以添加牛小喀微信:NewCarRen,加入專家社群參與討論。

(添加微信號NewCarRen咨詢)
