Model3(簡稱M3芯片)簡介
基于Model3芯片的核心板
Model3 是一款高性能的顯示交互和智能控制 MCU,采用國產(chǎn)自主高算力 RISC-V 內(nèi)核,內(nèi)置片上 1MB 大容量 SRAM 以及 64Mb PSRAM,并提供豐富的互聯(lián)外設(shè)接口,配備了 2D 圖像加速引擎和 PNG 解碼/JPEG 編 解碼引擎,可以滿足各類交互設(shè)計場景和多媒體互動需求,具有高可靠性、高安全性、高開放度的特點,可以面向于泛工業(yè)領(lǐng)域應(yīng)用。
Model3芯片功能框圖
Model3(簡稱M3芯片)接口圖如下:
M3芯片接口圖
今天小編主要介紹Model3(簡稱M3芯片)CAN通信的架構(gòu)及寄存器說明
CAN通信簡介
CAN控制器,多應(yīng)用于汽車控制系統(tǒng)和一般工業(yè)環(huán)境中的區(qū)域網(wǎng)絡(luò)控制。CAN是一種多主機(jī)、多廣播的通信協(xié)議,CAN總線上的各個節(jié)點都可以向總線發(fā)送數(shù)據(jù),多個節(jié)點同時發(fā)送時利用仲裁機(jī)制,從而確保最高優(yōu)先級的數(shù)據(jù)可以正常發(fā)送到總線上,具有很高的實時性和可靠性。
Model3芯片(簡稱M3芯片)CAN接口基本特性如下:
支持CAN2.0A和CAN2.0B協(xié)議
支持11位標(biāo)識符(標(biāo)準(zhǔn)格式)和29位標(biāo)識符(擴(kuò)展格式)
可編程通信速率最高達(dá)1Mbps驅(qū)動配置
支持多種操作模式:正常模式、只聽模式、自測模式、休眠模式、復(fù)位模式
錯誤檢測與處理:錯誤計數(shù)、錯誤報警閾值可配置、錯誤捕獲、仲裁丟失捕獲
CAN配置指南:
驅(qū)動配置
Board options --->
[*] Using CAN0
[ ] Using CAN1
zx-rtt CAN的driver層是基于RT-Thread的CAN驅(qū)動框架實現(xiàn)的,所以需要使能RT-Thread的CAN驅(qū)動框架:
RT-Thread options --->
RT-Thread Components --->
Device Drivers --->
[*] Using CAN device drivers
[*] Enable CAN hardware filter
[ ] Enable CANFD support
備注:
CAN模塊不支持CANFD
為了使用方便,選擇Using CAN0/1后會自動選擇CAN驅(qū)動框架
測試說明
硬件準(zhǔn)備:
測試板:帶有兩個CAN接口的測試板
PC:用于和測試板交互
串口線:連接測試板的調(diào)試串口
軟件:
PC端串口終端軟件
can_sample測試程序
CAN收發(fā)測試:
將測試板上的兩個CAN接口對接。執(zhí)行can_sample命令,CAN0會向CAN1發(fā)送數(shù)據(jù),CAN1會打印接收到的數(shù)據(jù)。
注意:
Model3芯片(簡稱M3芯片)的CAN 只能設(shè)置1個過濾表,支持屏蔽模式;如果要支持雙過濾模式,擴(kuò)展幀只能過濾id28~id13,id12~id0和rtr不能過濾。
Model3芯片(簡稱M3芯片)CAN的架構(gòu)還有寄存器說明
CAN控制器原理框圖
位時序邏輯BTL:負(fù)責(zé)同步位時序,確保數(shù)據(jù)傳輸?shù)姆€(wěn)定性,以預(yù)先配置的波特率發(fā)送和接受報文。
位流處理器BSP:負(fù)責(zé)對發(fā)送數(shù)據(jù)進(jìn)行位填充、附加CRC等處理,并為位時序邏輯模塊生成位流;負(fù)責(zé)對接收的位流進(jìn)行去填充、驗證CRC等處理;負(fù)責(zé)檢測總線上的錯誤并將錯誤報告給錯誤管理邏輯。
接收過濾器:是一個可編程的報文過濾單元,允許控制器根據(jù)報文的標(biāo)識符接收或拒絕該報文,可以過濾掉總線發(fā)送的與節(jié)點無關(guān)的消息,使節(jié)點效率提高。
緩沖FIFO:大小為64byte,負(fù)責(zé)存儲通過接收過濾器的報文。FIFO中的第一條報文將被映射到13byte 的接收緩沖寄存器中可被CPU訪問,直到該報文被清除,空間被釋放。隨后,接收緩沖寄存器將繼續(xù)映射FIFO 中的下一條報文。
錯誤管理邏輯EML:負(fù)責(zé)更新發(fā)送錯誤計數(shù)TEC 和接收錯誤計數(shù)REC 的數(shù)值,記錄錯誤類型、錯誤位置,更新控制器錯誤狀態(tài),確保BSP 模塊發(fā)送正確的錯誤標(biāo)志;還負(fù)責(zé)記錄報文仲裁丟失時的bit位置。
CAN典型應(yīng)用
運行模式
控制器包含5種運行模式,由模式寄存器(CAN_MODE)定義設(shè)置。
復(fù)位模式:Reset Mode,進(jìn)入復(fù)位模式,控制器離線不參與總線任何活動,可修改CAN控制器的各種參數(shù)配置。退出復(fù)位模式后,控制器需等待11 個連續(xù)隱性位出現(xiàn)(等效于總線空閑),才能正常接收和發(fā)送報文。
正常模式: Normal Mode,CAN 控制器可以發(fā)送和接收包含錯誤信號在內(nèi)的報文。
自測模式:Self-Test Mode, 與正常模式相同,但在該模式下,CAN 控制器發(fā)送報文時,即使沒有接收到應(yīng)答,也不會產(chǎn)生應(yīng)答錯誤。通常在控制器自測時使用該模式。
只聽模式: Listen Only Mode,CAN 控制器可以接收報文,但在CAN 總線上保持完全被動。因此,CAN 控制器將無法發(fā)送任何報文、應(yīng)答或錯誤信號,錯誤計數(shù)將保持凍結(jié)狀態(tài)。該模式用于CAN 總線監(jiān)控。
休眠模式:Sleep Mode,無總線活動及無中斷發(fā)生,可進(jìn)入低功耗休眠模式,該模式下時鐘停止。SLEEP_MOD為0或總線有信號輸入時喚醒,產(chǎn)生喚醒中斷。
位時序
為了實現(xiàn)位同步,每個正常位時間劃分為幾個不重疊時間的片段,包括同步段SS,傳播段PS,相位緩沖段PBS1,相位緩沖段PBS2,一個完整的位由8~25個時間定額Tq組成。
如圖所示,將傳播段PS和相位緩沖段PBS1合并形成新的時間段Ts1。
在復(fù)位模式下,配置總線時序0寄存器(CAN_BTR0)和總線時序1寄存器(CAN_BTR1)中的BRP、SJW、TS1、TS2、SAM等參數(shù),決定CAN的波特率。
SJW具體作用是增大或減小CAN波特率的容許偏差量,其大小與波特率值沒有太大關(guān)系,可理解為波特率精度調(diào)節(jié),SJW值越大則總線獲得更寬波特率容忍度。
位時序各參數(shù)計算關(guān)系如下:
時間定額Tq = 2*(BRP[5:0]+1)*Tpclk,其中Tpclk為APB時鐘(通常為24MHz)周期。
位時間Tbit = [1+ (TS1+1) + (TS2+1)]*Tq;
波特率Baud = 1/Tbit;
采樣點= [1 + (TS1+1)]/ [1+ (TS1+1) + (TS2+1)]。
舉例:假設(shè)單次采樣SAM為0,且SJW=2,TS1=8,TS2=1,BRP=0,則波特率為24M/[2*(0+1)*(1+9+2)]=1Mbps,采樣點為(1+9)/ (1+9+2)=83%。建議選取規(guī)則:TS2>=SJW;BRP盡量小、SJW盡量大;采樣點選取范圍75%~85%之間;盡量采用單次采樣。
通信報文
CAN通信報文類型包含數(shù)據(jù)幀、遠(yuǎn)程幀、錯誤幀、過載幀、間隔幀這5種類型。
CAN標(biāo)準(zhǔn)格式和擴(kuò)展格式數(shù)據(jù)幀
CAN標(biāo)準(zhǔn)格式和擴(kuò)展格式遠(yuǎn)程幀
CAN錯誤幀、過載幀、間隔幀
中斷管理
控制器提供8種中斷包括總線錯誤中斷、仲裁丟失中斷、被動錯誤中斷、喚醒中斷、數(shù)據(jù)溢出中斷、錯誤報警中斷、發(fā)送中斷、接收中斷。
由中斷寄存器(CAN_INTR)定義,通過設(shè)置中斷使能寄存器(CAN_INTEN)中相應(yīng)使能位,每個中斷源都可以單獨允許和禁用。
當(dāng)有一個或多個中斷觸發(fā),控制器IRQ有效,當(dāng)所有中斷位都被清除,控制器IRQ失效。
中斷寄存器被讀取后,除接收中斷外,其中的中斷位將自動清除。
接收中斷直到通過RXB_REL 指令位清除所有接收報文后,才能被清除,否則會影響接收緩沖狀態(tài)RXB_STAT。
接收中斷RX_INT:當(dāng)接收FIFO 中有待讀取報文(接收數(shù)據(jù)計數(shù)寄存器(CAN_RXC)中RXC > 0)時觸發(fā)此中斷。計數(shù)的報文數(shù)量包括有效報文和溢出報文。直到通過RXB_REL 指令位清除所有掛起接收報文后,接收中斷才會失效。
發(fā)送中斷TX_INT:當(dāng)發(fā)送緩沖器空閑,將其他報文加載到緩沖器中等待發(fā)送時,都會觸發(fā)此中斷。
錯誤報警中斷ERRW_INT:狀態(tài)寄存器(CAN_STAT)中ERR_STAT或BUS_STAT的位值發(fā)生改變(由0變1或由1變0)都會觸發(fā)此中斷。觸發(fā)時狀態(tài)值可分以下幾種:
ERR_STAT = 0 與BUS_STAT = 0:如果控制器處于主動錯誤狀態(tài),則表示TEC 和REC 的值都返回ERRWT 所設(shè)閾值之下;如果控制器此前處于總線恢復(fù)狀態(tài),則表示此時總線恢復(fù)已成功完成。
ERR_STAT = 1 與BUS_STAT = 0:表示TEC 或REC 數(shù)值已超過ERRWT所設(shè)閾值。
ERR_STAT = 1 與BUS_STAT = 1:表示控制器已進(jìn)入離線狀態(tài)(TEC> =255)。
ERR_STAT = 0 與BUS_STAT = 1:表示總線恢復(fù)期間,控制器TEC 數(shù)值已低于ERRWT所設(shè)閾值。
仲裁丟失中斷ARBLOST_INT :控制器發(fā)送報文并且丟失仲裁時觸發(fā)此中斷。丟失仲裁位置將被捕獲記錄在狀態(tài)寄存器(CAN_STAT)的ARBLOST_CAP中,狀態(tài)被清除之前(通過CPU 的讀?。?,將不會再記錄新的仲裁丟失位置。
總線錯誤中斷ERRB_INT:控制器在總線上檢測到錯誤時觸發(fā)此中斷。錯誤類型和錯誤位置都將被捕獲記錄在狀態(tài)寄存器(CAN_STAT)的ERR_TYPE和ERR_CODE中。狀態(tài)被清除之前(通過CPU 的讀?。瑢⒉粫儆涗浶碌目偩€錯誤信息。
數(shù)據(jù)緩沖器
下表描述了數(shù)據(jù)緩沖寄存器布局。發(fā)送和接收緩沖寄存器的訪問地址范圍相同(0x40~0x70),且只有當(dāng)控制器處于非復(fù)位模式時才可訪問。
發(fā)送緩沖寄存器:CPU 的寫入操作訪問,配置待發(fā)送報文,指定報文的幀類型、幀格式、幀標(biāo)識符和數(shù)據(jù)。CPU通過控制寄存器(CAN_MCR)配置發(fā)送報文模式:
正常報文發(fā)送,需將TX_REQ置1。
自發(fā)自收,需將SELF_REQ 置1。
單次發(fā)送,需將TX_REQ 和ABORT_REQ同時置1。
接收緩沖寄存器:CPU 的讀取操作訪問,接收緩沖寄存器映射到緩沖FIFO 中的第一條報文,獲取第一條報文的幀類型、幀格式、幀標(biāo)識符和數(shù)據(jù)。讀取完接收緩沖寄存器中的報文后,CPU 通過控制寄存器(CAN_MCR)中的RXB_REL置1來釋放接收緩沖寄存器,若接收FIFO 中仍有待處理的報文,按照接收報文的先后次序?qū)⒆钤缃邮盏降膱笪挠成涞浇邮站彌_寄存器中。
緩沖FIFO: 是一個64字節(jié)大小的內(nèi)部緩沖器,以先進(jìn)先出原則存儲接收到的報文。接收緩沖寄存器為FIFO中可訪問窗口,偏移地址0x40~0x70,將被映射到FIFO 中第一條報文,一條報文可在FIFO 中占3 ~ 13字節(jié)空間,其中字節(jié)序與接收緩沖寄存器相同。當(dāng)控制器接收到一條報文時,接收數(shù)據(jù)計數(shù)器RXC增加1,最大值為64。如果FIFO中有足夠空間,報文內(nèi)容將被寫入到FIFO 中。首先,CPU讀取接收緩沖寄存器中的報文后,通過將RXB_REL置1,釋放FIFO 中第一條報文所占的空間, RXC將減小1。然后,接收緩沖寄存器將映射FIFO 中的下一條報文。
FIFO數(shù)據(jù)溢出:在任何情況下,F(xiàn)IFO 中可以存儲的報文數(shù)量取決于各條報文的長度,當(dāng)FIFO 中沒有足夠空間完整地存儲新的報文,控制器會產(chǎn)生數(shù)據(jù)溢出,通過狀態(tài)位或數(shù)據(jù)溢出中斷反饋給CPU。FIFO在內(nèi)部將溢出報文標(biāo)記為無效,后續(xù)接收到的溢出報文仍然將增加RXC 到最大值64。為了清除FIFO 中的溢出報文,應(yīng)重復(fù)調(diào)用RXB_REL,直到RXC為0。這樣可以讀取接收FIFO 中的所有有效報文,并清除所有溢出報文。
CAN緩沖FIFO存儲報文過程
接收過濾器
接收過濾器,是一個可編程的報文過濾單元,允許控制器根據(jù)報文的標(biāo)識符、幀類型、第一個數(shù)據(jù)字節(jié)接收或拒絕該報文,由4個接收代碼寄存器(CAN_RXCODE)和4個接收屏蔽寄存器(CAN_RXMASK)定義組成。
如 圖 8 所示,每條報文中的位必須匹配RXCODE 值所指定的模式或者被RXMASK值屏蔽,才能使該報文通過過濾并存儲到接收FIFO中。
接收代碼寄存器、接收屏蔽寄存器,分別與緩沖0~3寄存器(偏移地址0x40~0x4C)、緩沖4~7寄存器(偏移地址0x50~5C)地址空間相同,所以只有控制器在復(fù)位模式時,才能訪問這兩個寄存器。
接收過濾器原理
單過濾模式:在模式寄存器(CAN_MODE)中將FILTER_SEL設(shè)置為1啟動單過濾模式。根據(jù)RXCODE / RXMASK的值定義單個過濾器,其定義及過濾報文格式如圖1-11所示。
雙過濾模式:在模式寄存器(CAN_MODE)中將FILTER_SEL設(shè)置為0啟動雙過濾模式。根據(jù)RXCODE / RXMASK的值將定義2個過濾器,分別為過濾器0和過濾器1,其標(biāo)準(zhǔn)格式和擴(kuò)展格式下過濾報文定義如圖1-12和圖1-13所示。雙過濾模式下,如果報文通過這2個濾波器中至少一個,則表示該報文成功通過過濾。
雙過濾模式下SFF標(biāo)準(zhǔn)格式過濾報文定義
雙過濾模式下EFF擴(kuò)展格式過濾報文定義
錯誤管理
錯誤計數(shù)包含發(fā)送錯誤計數(shù)TEC和接收錯誤計數(shù)REC,錯誤計數(shù)將決定CAN控制器當(dāng)前的錯誤狀態(tài)(如主動錯誤、被動錯誤、離線)。
除了錯誤狀態(tài)外,控制器還提供錯誤報警閾值ERRWT功能,這個功能可在控制器進(jìn)入被動錯誤狀態(tài)前,提醒用戶當(dāng)前發(fā)生的嚴(yán)重總線錯誤。
控制器當(dāng)前的錯誤狀態(tài)通過TEC、REC、ERR_STAT 、BUS _STAT和ERRWT體現(xiàn),這些數(shù)值和狀態(tài)位的變化將觸發(fā)中斷,從而提醒用戶當(dāng)前的錯誤狀態(tài)變化(參考中斷管理)。
錯誤捕獲
錯誤捕獲功能允許控制器以錯誤代碼的形式,記錄總線錯誤類型和錯誤位置。
當(dāng)檢測到一個總線錯誤時,總線錯誤中斷ERRB_INT將被觸發(fā),相應(yīng)的錯誤代碼將記錄在狀態(tài)寄存器(CAN_STAT)的ERR_CODE中。
在當(dāng)前錯誤代碼被讀取前,后續(xù)的總線錯誤中斷觸發(fā)時,將不會再記錄。
仲裁丟失捕獲
仲裁丟失捕捉功能允許控制器記錄仲裁丟失的bit位置。
當(dāng)控制器丟失仲裁時,所丟失bit位置將被記錄在狀態(tài)寄存器(CAN_STAT)的ARBLOST_CAP中,同時觸發(fā)仲裁丟失中斷ARBLOST_INT。
在當(dāng)前仲裁丟失捕獲bit位置被讀取前,后續(xù)的仲裁丟失中斷觸發(fā)時,將不會再記錄。
仲裁丟失位置記錄
審核編輯 黃宇
-
CAN
+關(guān)注
關(guān)注
57文章
2744瀏覽量
463614 -
通信
+關(guān)注
關(guān)注
18文章
6024瀏覽量
135950 -
HMI
+關(guān)注
關(guān)注
9文章
587瀏覽量
48539 -
Model3
+關(guān)注
關(guān)注
1文章
230瀏覽量
20789
發(fā)布評論請先 登錄
相關(guān)推薦
評論