加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 1、CAN網(wǎng)絡(luò)
    • 2、ISO標(biāo)準(zhǔn)化的CAN協(xié)議
    • 3、概述 CAN總線協(xié)議
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

通信教程 | CAN總線協(xié)議基礎(chǔ)原理

2022/02/09
1163
閱讀需 6 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

本文說的CAN即是一種總線,也是一種協(xié)議。因此,我們常聽見CAN總線,也常聽見CAN協(xié)議。

CAN協(xié)議和CANOpen協(xié)議是兩套不同的協(xié)議。從軟硬件層次來劃分,CAN協(xié)議屬于硬件協(xié)議,而CANOpen屬于軟件協(xié)議。

本文將概述CAN網(wǎng)絡(luò),讓大家對CAN總線協(xié)議有一個全局的概念,再到底層的CAN總線協(xié)議知識。

1、CAN網(wǎng)絡(luò)

CAN網(wǎng)絡(luò)可以理解為多臺CAN設(shè)備連接在同一條CAN總線上組合成的網(wǎng)絡(luò),其中的CAN設(shè)備我們稱之為節(jié)點。CAN網(wǎng)絡(luò)拓?fù)?/a>結(jié)構(gòu)如下圖:

如上圖,一個CAN節(jié)點主要包含三類:MCU應(yīng)用程序、CAN控制器、CAN收發(fā)器。

1. MCU應(yīng)用程序MCU應(yīng)用程序我將其分為三塊:業(yè)務(wù)邏輯代碼、協(xié)議層代碼、底層驅(qū)動代碼。

A.業(yè)務(wù)邏輯代碼:是根據(jù)項目需求而定,也很好理解。比如我讀取一個傳感器數(shù)據(jù),并對其做出相應(yīng)邏輯處理。

B.協(xié)議層代碼:比如后續(xù)要講述的CANOpen。

C.底層驅(qū)動代碼:配置CAN總線相應(yīng)參數(shù)、控制收發(fā)的代碼。

2.CAN控制器CAN控制器內(nèi)部結(jié)構(gòu)還是挺復(fù)雜的,一般現(xiàn)在CAN控制器都是與處理器集成在一起。

其實對于編程的人來說,無非也就是包含一些控制、狀態(tài)、配置等寄存器。比如我們看到有些STM32芯片帶有CAN,也就是說CAN控制器已經(jīng)集成在STM32芯片中了,我們只需要編程操作其中的寄存器即可。

3.CAN收發(fā)器CAN收發(fā)器:將CAN收發(fā)引腳(CAN_TX和CAN_RX)的TTL信號轉(zhuǎn)換成CAN總線的電平信號。

PS:你可以把CAN總線通信認(rèn)為是UART通過485進(jìn)行通信:CAN控制器就如UART的控制器,而CAN收發(fā)器就如485轉(zhuǎn)換芯片。

2、ISO標(biāo)準(zhǔn)化的CAN協(xié)議

寫這一章節(jié)的主要目的就是想讓大家了解CAN總線位于OSI所在層次。

1.ISO/OSI基本參照模型

【注】

ISO:International Standardization Organization國際標(biāo)準(zhǔn)化組織;

OSI:Open Systems Interconnection開放式系統(tǒng)間互聯(lián);

2.CAN在OSI模型中的定義

【注】

LLC:Logical Link Control邏輯鏈路控制;

MAC:Medium Access Control媒介訪問控制;

從上圖可以知道CAN總線底層硬件的內(nèi)容(CAN控制器、收發(fā)器)主要位于OSI的第1層和第2層。

3、概述 CAN總線協(xié)議

CAN總線協(xié)議:就是為了保證通信(收發(fā))數(shù)據(jù)在CAN總線上能穩(wěn)定傳輸而制訂的一套協(xié)議。

CAN總線協(xié)議的內(nèi)容很多,為方便初學(xué)者理解,本文先大概描述一下CAN總線協(xié)議,后續(xù)文章詳細(xì)講述CAN總線協(xié)議的內(nèi)容。

1.總線信號CAN總線為「兩線」「差分」信號,用隱形代表邏輯1,顯性代表邏輯0。如下圖:

2.優(yōu)先級

假如某一時刻,一個設(shè)備(節(jié)點)往總線發(fā)0,一個設(shè)備往總線發(fā)1。那么總線會呈現(xiàn)什么現(xiàn)象?

答案:最后總線呈現(xiàn)為顯性,也就是0。

3.位時序

位時序邏輯將監(jiān)視串行總線,執(zhí)行采樣并調(diào)整采樣點,在調(diào)整采樣點時,需要在起始位邊沿進(jìn)行同步并后續(xù)的邊沿進(jìn)行再同步。

簡單的說就是對一個bit位分幾段進(jìn)行采樣,目的就是提高數(shù)據(jù)傳輸穩(wěn)定性。在STM32中底層驅(qū)動代碼就需要進(jìn)行位時序編程,在STM32參考手冊中也會發(fā)現(xiàn)如下位時序圖

4.幀的種類和格式幀的種類有多種:數(shù)據(jù)幀:用于發(fā)送單元向接收單元傳送數(shù)據(jù)的幀。遙控幀:用于接收單元向具有相同 ID 的發(fā)送單元請求數(shù)據(jù)的幀。錯誤幀:用于當(dāng)檢測出錯誤時向其它單元通知錯誤的幀。過載幀:用于接收單元通知其尚未做好接收準(zhǔn)備的幀。幀間隔:用于將數(shù)據(jù)幀及遙控幀與前面的幀分離開來的幀。

數(shù)據(jù)幀和遙控幀有標(biāo)準(zhǔn)格式和擴(kuò)展格式兩種格式。標(biāo)準(zhǔn)格式有11個位的標(biāo)識符ID,擴(kuò)展格式有29個位的ID。

5.位填充位填充是為防止突發(fā)錯誤而設(shè)定的功能。當(dāng)同樣的電平持續(xù) 5 位時則添加一個位的反型數(shù)據(jù)。如下圖:

6.錯誤的種類

CAN總線協(xié)議內(nèi)容很多,初學(xué)者可以先了解這些,希望對你有所幫助。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

作者黃工,從事嵌入式軟件開發(fā)工作8年有余,高級嵌入式軟件工程師,業(yè)余維護(hù)公眾號『strongerHuang』,分享嵌入式軟硬件、單片機(jī)、物聯(lián)網(wǎng)等內(nèi)容。