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

國產(chǎn)工業(yè)級HMI芯片Model3/Model4應(yīng)用于充電機(jī)解決方案:2D圖形加速、雙CAN通信

國產(chǎn)工業(yè)級Model3芯片應(yīng)用于醫(yī)療床頭7寸觸摸屏,為醫(yī)療注入智慧力量

農(nóng)業(yè)灌溉設(shè)備HMI方案:Model3芯片10.1寸電阻觸摸屏,RGB50pin高清顯示接口

農(nóng)業(yè)灌溉設(shè)備HMI方案:Model3芯片搭配10.1寸電阻觸摸大屏,1024*600 RGB50pin高清顯示

低成本國產(chǎn)HMI應(yīng)用實(shí)現(xiàn)方案:工業(yè)、醫(yī)療、商業(yè)多場景應(yīng)用

工業(yè)級HMI芯片Model3C詳解(三)通信接口

工業(yè)級HMI芯片Model3C詳解(二)圖像顯示

Model3C工業(yè)級HMI芯片詳解系列專題(一):芯片性能

Model3工業(yè)級HMI芯片詳解系列專題(三):安全、穩(wěn)定、高防護(hù)

工業(yè)級HMI芯片Model3芯片詳解(二)圖像顯示

ZX_Model3數(shù)據(jù)手冊
Model3工業(yè)級HMI芯片詳解系列專題(一):芯片性能

Model4 工業(yè)級HMI芯片詳解系列專題(一):芯片性能

評論