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

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

國(guó)產(chǎn)工業(yè)級(jí)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高清顯示

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

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

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

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

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

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

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

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

Model系列工業(yè)級(jí)HMI芯片:開(kāi)源RISC-V+RTOS實(shí)時(shí)系統(tǒng),拒絕管控

評(píng)論