本文以i.MXRT1050為例來(lái)做說(shuō)明,其它i.MX RT10xx系列在FlexRAM的使用上是一樣的,只是容量大小有差別。
一、文檔說(shuō)明
i.MX RT1050一共有512KB內(nèi)部FlexRAM,默認(rèn)的情況是128KB ITCM,128KB DTCM,256KB的OCRAM。在實(shí)際的使用中,有些客戶需要重新分配各個(gè)存儲(chǔ)區(qū)的大小,來(lái)均衡自己應(yīng)用所需要的ITCM, DTCM以及OCRAM容量。
通過(guò)官方應(yīng)用筆記Using the i.MX RT FlexRAM,我們可以知道一些關(guān)于FlexRAM的知識(shí)以及配置的限制等。
重新配置FlexRAM的分區(qū)情況,主要可以通過(guò)FUSE或者IOMUXC_GPR_GPR17寄存器去配置,具體關(guān)系如下:
如果修改fuse,那么以后就難以重新修改,因?yàn)閒use的位只能從0到1,不能從1到0,所以,在實(shí)際的調(diào)試過(guò)程中,可以通過(guò)修改內(nèi)部寄存器方式臨時(shí)修改FlexRAM的分區(qū)配置。
最近發(fā)現(xiàn)有部分網(wǎng)友在使用寄存器重新分區(qū)FlexRAM的過(guò)程中,出現(xiàn)了各種各樣的問(wèn)題,比如不能debug,debug問(wèn)題解決之后,又出現(xiàn)debug可以運(yùn)行,但是下載進(jìn)去,重新復(fù)位代碼不能起來(lái)的問(wèn)題。
本篇文章針對(duì)需要配置FlexRAM功能的網(wǎng)友,總結(jié)了在MCUXPresso IDE下具體的重新配置i.MX RT1050 FlexRAM ITCM、DTCM以及OCRAM大小的步驟, 其他i.MX RT芯片系列方法也是類(lèi)似,只是具體的寄存器分區(qū)大小,按照實(shí)際的芯片寄存器去配置。
二、FlexRAM配置分析
i.MXRT1050 默認(rèn)的FlexRAM配置為:128KB ITCM、128KB DTCM和256KB的OCRAM。那么如果需要配置FlexRAM為:128KB ITCM、256KB DTCM和128KB的OCRAM,應(yīng)該怎么做呢?
從上面的表格,我們可以看出,可以將IOMUXC_GPR_GPR17配置為下表的黃色行數(shù)據(jù):
IOMUXC_GPR_GPR17寄存器中每2位表示一個(gè)Bank,定義如下:
00b—bank is not used.
01b—bank is configured for OCRAM.
10b—bank is configured for DTCM.
11b—bank is configured for ITCM.
i.MX RT1050共有512KB FlexRAM, 做16等分,則每個(gè)bank 為512KB/16=32KB。
所以需要128KB ITCM, 256KB DTCM, 128KB的OCRAM時(shí),分配如下:
ITCM:4個(gè)bank,共4個(gè)11b
DTCM: 8個(gè)bank, 共8個(gè)10b
OCRAM: 4個(gè)bank, 共4個(gè)01b
FlexRAM分區(qū)地址關(guān)系如下:
相關(guān)的寄存器配置如下: IOMUXC_GPR->GPR17 = 0x5AAFFAA5; IOMUXC_GPR->GPR16 |= 0x7; IOMUXC_GPR->GPR14 = (9<<20) | (8<<16);
三、MCUXPresso IDE的配置步驟
下面在MIMXRT1050-EVKB開(kāi)發(fā)板上以SDK 的led_blinky MCUXpresso工程為例,給出具體操作步驟。
首先下載最新的SDK并且在MCUXpresso IDE中導(dǎo)入led_blinky工程。
修改MCU Settings的memory配置
將DTCM, ITCM, OCRAM改為實(shí)際需要的大小后,點(diǎn)擊apply。
在startup文件里的Reset代碼部分添加FlexRAM的代碼:
FLEXRAM->TCM_CTRL = 4;
IOMUXC_GPR->GPR17 = 0x5AAFFAA5;
IOMUXC_GPR->GPR16 |= 0x7;
IOMUXC_GPR->GPR14 = (9<<20) | (8<<16) ;
準(zhǔn)備IDE的調(diào)試腳本.scp文件
RT1050_connect_128Kocram_128Kitcm_256Kdtcm.scp 內(nèi)容為:
100REM=============================== 110REMRT1050_connect.scp 120REM 130REMCopyright2019NXP 140REMAllrightsreserved. 150REM=============================== 160print"RT1050ConnectScript" 170REMprobelist 180p%=probefirstfound 190remprobeopenbyindexp% 200wireswdconnectp% 210selectprobecorep%0 220cminitapdpthis 230cmhaltthis 235goto320 240remtrapinbootrom 250cmwatchsetthis00x400F8004RW 260cmresetvectorcatchclearthis 270print"Resettingandtrapping" 280cmsysresetreqthis 290print"Backfromreset" 300cmresetvectorcatchsetthis 310cmwatchclearthis0 320print"DisablingMPU" 330s%=Peek32this0xE000ED94 340s%=s% 0xFFFFFFFE 350Poke32this0xE000ED94s% 360REM======ConfigureFlexRAM====== 370print"ConfigureFlexRAMfor128KBOCRAM,128KBI-TCM,256KBD-TCM" 380REMTCMCTRLPoke0x400B0000-toforceRAMclockingandsetwaitstates=b100 390Poke32this0x400B00000x4 400REMIOMUXC_GPR170x400AC044-thissetsbitfieldallocationofFlexRAM32KBbankstoOC256KBb01,I128KBb11,D128KBb10 410Poke32this0x400AC0440x5AAFFAA5 420REMIOMUXC_GPR160x400AC040-thissetsenablesforIandDTCMandthesourceoftheTCMconfig=0x200007 430Poke32this0x400AC0400x200007 440print"Finished" 450REM=============================== 460end
將這個(gè)超長(zhǎng)文件名的文件,RT1050_connect_128Kocram_128Kitcm_256Kdtcm.scp拷貝到IDE安裝目錄下:
C:nxpMCUXpressoIDE_11.1.0_3209idebinariesScripts
拷貝完之后,在debug configuration界面的script connect 中添加這個(gè)腳本文件:
修改stack的起始位置
將STACK的位置由end改為start,這樣可以解決燒錄之后,重新上電不運(yùn)行的問(wèn)題。
下面就可以編譯代碼,并且運(yùn)行,測(cè)試結(jié)果如下:
可以發(fā)現(xiàn),寄存器的FlexRAM情況確實(shí)是需要的配置情況,燒錄之后,退出debug重新上電,可以發(fā)現(xiàn)led還是可以閃爍,說(shuō)明功能已經(jīng)正常工作。
本文最初發(fā)表在“恩智浦中文社區(qū)”,可以在原帖那里下載到代碼。
來(lái)源:恩智浦MCU加油站
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系小編進(jìn)行處理
審核編輯 黃宇
-
寄存器
+關(guān)注
關(guān)注
31文章
5250瀏覽量
119192 -
i.MX
+關(guān)注
關(guān)注
1文章
44瀏覽量
35484
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論