1寫在前面
上一篇文章講述了CAN和CANOpen,相信大家CAN和CANOpen有一定理解了。本文說的CAN即是一種總線,也是一種協議。因此,我們常聽見CAN總線,也常聽見CAN協議。
CAN協議和CANOpen協議是兩套不同的協議。從軟硬件層次來劃分,CAN協議屬于硬件協議,而CANOpen屬于軟件協議。
本篇文章先概述一下CAN網絡,讓大家對CAN總線協議有一個全局的概念,再到底層的CAN總線協議知識。
2
CAN網絡
CAN網絡可以理解為多臺CAN設備連接在同一條CAN總線上組合成的網絡,其中的CAN設備我們稱之為節點。CAN網絡拓撲結構如下圖:
如上圖,一個CAN節點主要包含三類:MCU應用程序、CAN控制器、CAN收發器。
2.1 MCU應用程序
MCU應用程序我將其分為三塊:業務邏輯代碼、協議層代碼、底層驅動代碼。
A.業務邏輯代碼:是根據項目需求而定,也很好理解。比如我讀取一個傳感器數據,并對其做出相應邏輯處理。
B.協議層代碼:比如后續要講述的CANOpen。
C.底層驅動代碼:配置CAN總線相應參數、控制收發的代碼。
2.2 CAN控制器
CAN控制器內部結構還是挺復雜的,一般現在CAN控制器都是與處理器集成在一起。
其實對于編程的人來說,無非也就是包含一些控制、狀態、配置等寄存器。
比如我們看到有些STM32芯片帶有CAN,也就是說CAN控制器已經集成在STM32芯片中了,我們只需要編程操作其中的寄存器即可。
2.3 CAN收發器
CAN收發器:將CAN收發引腳(CAN_TX和CAN_RX)的TTL信號轉換成CAN總線的電平信號。
PS:你可以把CAN總線通信認為是UART通過485進行通信:CAN控制器就如UART的控制器,而CAN收發器就如485轉換芯片。
3
ISO標準化的CAN協議
寫這一章節的主要目的就是想讓大家了解CAN總線位于OSI所在層次。
3.1 ISO/OSI基本參照模型
【注】
ISO:International Standardization Organization國際標準化組織;
OSI:Open Systems Interconnection開放式系統間互聯;
3.2 CAN在OSI模型中的定義
【注】
LLC:Logical Link Control邏輯鏈路控制;
MAC:Medium Access Control媒介訪問控制;
從上圖可以知道CAN總線底層硬件的內容(CAN控制器、收發器)主要位于OSI的第1層和第2層。
4
概述CAN總線協議
CAN總線協議:就是為了保證通信(收發)數據在CAN總線上能穩定傳輸而制訂的一套協議。
CAN總線協議的內容很多,為方便初學者理解,本文先大概描述一下CAN總線協議,后續文章詳細講述CAN總線協議的內容。
4.1 總線信號
CAN總線為「兩線」「差分」信號,用隱形代表邏輯1,顯性代表邏輯0。如下圖:
4.2 優先級
假如某一時刻,一個設備(節點)往總線發0,一個設備往總線發1。那么總線會呈現什么現象?
答案:最后總線呈現為顯性,也就是0。
4.3 位時序
位時序邏輯將監視串行總線,執行采樣并調整采樣點,在調整采樣點時,需要在起始位邊沿進行同步并后續的邊沿進行再同步。
簡單的說就是對一個bit位分幾段進行采樣,目的就是提高數據傳輸穩定性。在STM32中底層驅動代碼就需要進行位時序編程,在STM32參考手冊中也會發現如下位時序圖:
4.4 幀的種類和格式
幀的種類有多種:
數據幀:用于發送單元向接收單元傳送數據的幀。
遙控幀:用于接收單元向具有相同 ID 的發送單元請求數據的幀。
錯誤幀:用于當檢測出錯誤時向其它單元通知錯誤的幀。
過載幀:用于接收單元通知其尚未做好接收準備的幀。
幀間隔:用于將數據幀及遙控幀與前面的幀分離開來的幀。
數據幀和遙控幀有標準格式和擴展格式兩種格式。標準格式有11個位的標識符ID,擴展格式有29個位的ID。
4.5 位填充
位填充是為防止突發錯誤而設定的功能。當同樣的電平持續 5 位時則添加一個位的反型數據。如下圖:
4.6 錯誤的種類
CAN總線協議內容很多,初學者先了解這些,后面文章具體到每一個點上,相信大家就會更明白其中的含義。
-
CAN
+關注
關注
57文章
2744瀏覽量
463621 -
CANopen
+關注
關注
8文章
253瀏覽量
43582 -
總線協議
+關注
關注
0文章
115瀏覽量
14850
發布評論請先 登錄
相關推薦
評論