1. 程式人生 > >CANOpen系列教程02_理解CAN匯流排協議

CANOpen系列教程02_理解CAN匯流排協議

該系列教程已經在我的個人微信公眾號 「strongerHuang」 整理並分享。因在這裡分享文章,還需單獨整理一遍,時間有限,就不再一一重複整理出來了。

想要檢視更多相關教程,可以關注我的個人微信公眾號「strongerHuang」,回覆【CANOpen系列教程】即可檢視。

申明:該文件由作者「strongerHuang」原創釋出,僅供個人學習使用,轉載請公眾號聯絡作者授權。版權所有,禁止商用

一、寫在前面

上一篇文章講述了CAN和CANOpen,相信大家CAN和CANOpen有一定理解了。本文說的CAN即是一種匯流排,也是一種協議。因此,我們常聽見CAN匯流排,也常聽見CAN協議。

CAN協議和CANOpen協議是兩套不同的協議。從軟硬體層次來劃分,CAN協議屬於硬體協議,而CANOpen屬於軟體協議

本篇文章先概述一下CAN網路,讓大家對CAN匯流排協議有一個全域性的概念,再到底層的CAN匯流排協議知識。

二、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轉換晶片。

三、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層。

四、概述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匯流排協議內容很多,初學者先了解這些,後面文章具體到每一個點上,相信大家就會更明白其中的含義。

五、說明

1.該文件部分文字來自網路,僅供個人學習使用,版權所有,禁止商用。

2.本文由我一個人編輯並整理,難免存在一些錯誤。

3.為了方便大家平時公交、地鐵、外出辦事也能用手機隨時隨地檢視該教程,該教程同步更新於微信公眾號 「strongerHuang」,關注微信公眾號回覆【CANOpen系列教程】即可檢視全系列教程。

六、最後

我的微信公眾號(ID:strongerHuang)還在分享STM8、STM32、Keil、IAR、FreeRTOS、UCOS、RT-Thread、CANOpen、Modbus…等更多精彩內容,如果想檢視更多內容,可以關注我的微信公眾號。