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

ProfiNet轉(zhuǎn)CAN/CANopen網(wǎng)關(guān)技術(shù)詳解


CAN總線(xiàn)通訊原理-原來(lái)這么簡(jiǎn)單!#總線(xiàn)通訊 #總線(xiàn)傳輸 #汽車(chē)CAN總線(xiàn)? #電路知識(shí)
使用ES32實(shí)現(xiàn)CANopen從機(jī)

CANOPEN協(xié)議詳細(xì)介紹
解析ECAN-E02單過(guò)濾器CAN硬件過(guò)濾

基于Xilinx的A7系列FPGA的CAN總線(xiàn)協(xié)議開(kāi)發(fā)

使用CAN總線(xiàn)進(jìn)行數(shù)據(jù)采集的方法
CAN總線(xiàn)通信原理介紹 CAN總線(xiàn)模塊選擇指南
使用CAN總線(xiàn)的注意事項(xiàng) CAN總線(xiàn)與其他通信協(xié)議對(duì)比
CAN總線(xiàn)應(yīng)用領(lǐng)域 CAN總線(xiàn)協(xié)議解析
三格電子- EtherCAT轉(zhuǎn)CANopen/ CAN網(wǎng)關(guān)

CAN總線(xiàn)通信協(xié)議詳解

CAN總線(xiàn)基礎(chǔ)知識(shí)匯總#CAN #CANoe #汽車(chē)總線(xiàn)

評(píng)論