CAN通信详解
一. CAN是什么?
CAN,全稱為“Controller Area Network”,即控制器局域網,是一種多主方式的串行通訊總線,是國際上應用最廣泛的現場總線之一。
二. CAN的起源
在當前的汽車產業中,出于對安全性、舒適性、方便性、低公害、低成本的要求,各種各樣的電子控制系統被開發了出來。由于這些系統之間通信所用的數據類型及對可靠性的要求不盡相同,由多條總線構成的情況很多,線束的數量也隨之增加。為適應“減少線束的數量”、“通過多個 LAN,進行大量數據的高速通信”的需要,1986 年德國電氣商博世公司開發出面向汽車的 CAN 通信協議。此后,CAN 通過 ISO11898 及 ISO11519 進行了標準化,現在在歐洲已是汽車網絡的標準協議,同時它具有很高的可靠性,被廣泛應用于:汽車電子、工業自動化、船舶、醫療設備、工業設備等方面。
三. CAN的物理層
CAN總線是一種分布式的控制總線,它的網絡由很多CAN節點構成,每個節點均由一個MCU(微控制器)、一個CAN控制器和一個CAN收發器構成,然后使用雙絞線連接到CAN網絡中。另外,在CAN總線的起止端都有一個120Ω的終端電阻,用來做阻抗匹配,以減少回波反射。
其網絡拓撲結構如下圖所示:
CAN 控制器是根據CAN_L和CAN_H上的電位差(即差分信號的形式)來判斷總線電平??偩€總線電平分為顯性電平(對應邏輯0,電位差為2V左右)和隱性電平(對應邏輯1,電位差為0V),二者必居其一。發送方通過使總線電平發生跳變,將消息發送給接收方。
顯性電平和隱性電平
總線上的電平有顯性電平和隱性電平兩種。
顯性電平的邏輯值為“0”,隱性電平為“1”。
“顯性”具有“優先”的意味,只要有一個單元輸出顯性電平,總線上即為顯性電平。并且,“隱性”具有“包容”的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平(顯性電平比隱性電平更強)。
四. CAN的特點
CAN 協議具有以下特點。
(1) 多主控制(I2C有主從機之分,CAN無所謂主機從機)
在總線空閑時,所有的單元都可開始發送消息(多主控制)。
“最先”訪問總線的單元可獲得發送權(不管后面消息的優先級是否比自身的高)。
多個單元“同時”開始發送時,發送高優先級 ID 消息的單元可獲得發送權(只在同時發送時起作用)。
(2) 消息的發送(對比I2C是根據地址進行訪問,這里ID非地址,而是一種表征優先級的標識符)
在 CAN 協議中,所有的消息都以固定的格式發送。當兩個以上的單元同時開始發送消息時,根據ID (標識符) 決定優先級,對各消息 ID 的每個位進行逐個仲裁比較。仲裁獲勝(被判定為優先級最高)的單元可繼續發送消息,仲裁失利的單元則立刻停止發送而進行接收工作,此處這里ID非地址,而是一種表征優先級的標識符。
(3) 系統的柔軟性(對比I2C總線上的每個單元都有一個獨立的地址)
與總線相連的單元沒有類似于“地址”的信息。因此在總線上增加單元時,連接在總線上的其它單元的都不需要改變。
(4) 通信速度(波特率)
由CAN的物理層就可以看出,CAN是一種異步通信方式,所以通信前必須統一好同一網絡上每個單元的波特率,即使有一個單元的通信速度與其它的不一樣,此單元也會輸出錯誤信號,妨礙整個網絡的通信。不同網絡間則可以有不同的通信速度。
(5) 遠程數據請求
可通過發送“遙控幀” 請求其他單元發送數據。
(6) 錯誤檢測功能·錯誤通知功能·錯誤恢復功能
所有的單元都可以檢測錯誤(錯誤檢測功能)。
檢測出錯誤的單元會立即同時通知其他所有單元(錯誤通知功能)。
正在發送消息的單元一旦檢測出錯誤,會強制結束當前的發送。強制結束發送的單元會不斷反復地重新發送此消息直到成功發送為止(錯誤恢復功能)。
(7) 故障封閉
CAN 可以判斷出錯誤的類型是總線上暫時的數據錯誤(如外部噪聲等)還是持續的數據錯誤(如單元內部故障、驅動器故障、斷線等)。由此功能,當總線上發生持續數據錯誤時,可將引起此故障的單元從總線上隔離出去。
(8) 連接
CAN 總線可連接的單元總數理論上是沒有限制的。但實際上可連接的單元數受總線上的時間延遲及電氣負載的限制。
五. CAN的協議層
幀的種類
通信是通過以下 5 種類型的幀進行的:
其中,數據幀和遙控幀有標準格式和擴展格式兩種格式。
標準格式有11 個位的標識符(ID),擴展格式有29 個位的ID 。
數據幀
數據幀由 7 個段構成,包括:
(1)幀起始。表示數據幀開始的段。
(2)仲裁段。表示該幀優先級的段。
(3)控制段。表示數據的字節數及保留位的段。
(4)數據段。數據的內容,一幀可發送0~8個字節的數據。
(5)CRC段。檢查幀的傳輸錯誤的段。
(6)ACK段。表示確認正常接收的段。
(7)幀結束。表示數據幀結束的段。
(1) 幀起始(標準、擴展格式相同)
表示幀開始的段。1 個位的顯性位(邏輯0)。
(2) 仲裁段(構成ID)
表示數據的優先級的段。標準格式和擴展格式在此的構成有所不同,如圖:
*1 ID
從MSB開始,禁止高7位都為隱性,即不能:ID=1111111XXXX。
*2 RTR
遠程請求位。0,數據幀;1, 遙控幀;
*3 SRR
替代遠程請求位。設置為1(隱性電平);
*4 IDE
標識符選擇位。0,標準幀;1,擴展幀;
(3) 控制段
控制段由 6 個位構成,表示數據段的字節數。標準格式和擴展格式的構成有所不同。
*1 保留位(r0、r1)
保留位必須全部以顯性電平發送。但接收方可以接收顯性、隱性及其任意組合的電平。
*2 數據長度碼(DLC)
數據的字節數必須為 0~8 字節。但接收方對 DLC = 9~15 的情況并不視為錯誤。
*3 IDE
標識符選擇位。0,標準幀;1,擴展幀;
(4) 數據段
數據段可包含 0~8 個字節的數據。從 MSB(最高位)開始輸出。
(5) CRC 段
CRC 段是檢查幀傳輸錯誤的幀。由 15 個位的 CRC 順序和 1 個位的 CRC 界定符(用于與ACK段區別開來)構成。
*1 CRC的值計算范圍包括:幀起始、仲裁段、控制段、數據段。
*2 接收方以同樣的算法計算 CRC 值并進行比較,不一致時會通報錯誤。
(6) ACK 段
ACK 段用來確認是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 個位構成。
*1 發送單元的 ACK 段
發送單元在 ACK 段發送 2 個位的隱性位。
*2 接收單元的 ACK 段
接收到正確消息的單元在 ACK 槽(ACK Slot)發送顯性位,通知發送單元正常接收結束。這稱作“發 送 ACK”或者“返回 ACK”。
(7),幀結束。由7個位的隱性位組成。標準幀和擴展幀在這個段格式完全一樣。
遙控幀
接收單元向發送單元請求發送數據所用的幀。遙控幀由 6 個段組成。遙控幀沒有數據幀的數據段。
遙控幀的構成如圖 24 所示。
(1) 幀起始(SOF)
表示幀開始的段。
(2) 仲裁段
表示該幀優先級的段??烧埱缶哂邢嗤?ID 的數據幀。
(3) 控制段
表示數據的字節數及保留位的段。
(4) CRC 段
檢查幀的傳輸錯誤的段。
(5) ACK 段
表示確認正常接收的段。
(6) 幀結束
表示遙控幀結束的段。
遙控幀和數據幀的區別
? 數據幀和遙控幀的不同
? 遙控幀的 RTR 位為隱性位,沒有數據段。
? 沒有數據段的數據幀和遙控幀可通過 RTR 位區別開來。
? 遙控幀沒有數據段,數據長度碼該如何表示?
? 遙控幀的數據長度碼以所請求數據幀的數據長度碼表示。
? 沒有數據段的數據幀有何用途?
? 例如,可用于各單元的定期連接確認/應答、或仲裁段本身帶有實質性信息的情況下。
其他的幀比較簡單,這里不做介紹。
優先級的決定
在總線空閑態,最先開始發送消息的單元獲得發送權。
多個單元同時開始發送時,各發送單元從仲裁段的第一位開始進行仲裁。連續輸出顯性電平最多的單元可繼
續發送。
仲裁的過程如圖 28 所示。
位時序
幀是以位為單位的,由發送單元在非同步的情況下發送的每秒鐘的位數稱為位速率(波特率)。一個位可分為 4 段,分別是:
? 同步段(SS)
? 傳播時間段(PTS)
? 相位緩沖段 1(PBS1)
? 相位緩沖段 2(PBS2)
這些段又由可稱為 Time Quantum(以下稱為 Tq)的最小時間單位構成。
也就是說,1 位分為 4 個段,每個段又由若干個 Tq 構成,這稱為位時序。
1 位由多少個 Tq 構成、每個段又由多少個 Tq 構成等,可以任意設定位時序。通過設定位時序,多個單元可同時采樣,也可任意設定采樣點。
各段的作用和 Tq 數如下:
簡要來說就是:
*1 同步段用來同步發送單元與接受單元的發送和接受的工作。
*2 傳播時間段:屬于一些硬件誤差,無需理會。
*3 相位緩沖段:
舉個例子:有兩個單片機之間進行CAN通信,但是由于它們各自以獨立的時鐘進行工作,晶振可能存在偏差,導致時鐘存在細微的誤差,當發送數據較多時,這個誤差會被逐漸放大,導致整個時序混亂,無法同步,這在汽車工業上是不允許的。
*4 再同步補償寬度:其實就是一個由數個Tq組成的一個段,用來對同步誤差進行補償,下面對如何補償進行闡述。
再同步
在接收過程中檢測出總線上的電平變化時進行的同步調整。
每當檢測出邊沿時,根據 SJW 值通過加長 PBS1 段,或縮短 PBS2 段,以調整同步。但如果發生了超出 SJW值的誤差時,最大調整量不能超過 SJW 值。再同步如圖 34 所示。
總結
- 上一篇: Poly-YOLO:更快,更精确的检测(
- 下一篇: 祖母绿canutillos宝石