0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

重新分配FlexRAM的方法

li1756686189 ? 來(lái)源:嵌入式 MCU ? 2022-12-28 13:55 ? 次閱讀

應(yīng)用筆記AN12077 解釋了如何通過(guò)應(yīng)用程序啟動(dòng)代碼中的軟件重新分配FlexRAM。下面將進(jìn)一步詳細(xì)說(shuō)明進(jìn)行這些修改的方法。

RT Internal SRAM FlexRAM
RT1010 Up to128KB Up to128KB
RT1015 Up to128KB Up to128KB
RT1020 Up to256KB Up to256KB
RT1050 Up to 512 KB Up to 512 KB
RT1060 Up to 1MB Up to 512 KB
RT1064 Up to 1MB Up to 512 KB

對(duì)于RT106x系列,1MB的內(nèi)部SRAM中只有512 KB可以通過(guò)FlexRAM重新分配為DTCM、ITCM和OCRAM。剩余的512 KB來(lái)自O(shè)CRAM,無(wú)法重新分配。對(duì)于所有其他RT10xx,可以將整個(gè)內(nèi)部SRAM重新分配為DTCM、ITCM和OCRAM。應(yīng)用筆記AN12077 第3.1.3.1節(jié)解釋了重新分配FlexRAM時(shí)的大小限制。值得一提的是,所有RT10xx部件中的ROM引導(dǎo)加載程序都使用OCRAM,因此在重新分配FlexRAM時(shí),應(yīng)該保留一些OCRAM,這不適用于RT106x,因?yàn)閷⑹冀K擁有512 KB的OCRAM,無(wú)法重新分配。

MCUXpresso IDE中的實(shí)現(xiàn)

首先,需要將SDK示例導(dǎo)入MCUXpresso IDE工作區(qū)。為RT1050-EVKB導(dǎo)入了igpio_led_output示例。如果編譯此項(xiàng)目,將看到RT1050-EVKB上FlexRAM的默認(rèn)配置如下:

SRAM_DTC:128 KB,SRAM_ITC:128 KB,SRAM_OC:256 KB

現(xiàn)在需要轉(zhuǎn)到文件startup_mimxrt1052.c中的復(fù)位處理程序。重新分配FlexRAM必須在配置FlexRAM之前完成,這就是為什么要在復(fù)位處理程序中完成的原因。需要修改以重新分配FlexRAM的寄存器是IOMUX _GPR_GPR16和IOMUX _GPR _GPR17。

Register Address
IOMUXC_GPR_GPR16 0x400AC040
IOMUXC_GPR_GPR17 0x400AC044

需要確定如何重新分配FlexRAM,以查看需要加載到寄存器IOMUXC_GPR_GPR17中的值。如果希望具有以下配置:

SRAM_DTC 256 KB
SRAM_ITC 128 KB
SRAM_OC 128KB

以下對(duì)IOMUXC_GPR_GPR17寄存器的解釋:

01c91946-8674-11ed-bfe3-dac502259ad0.png

需要加載到寄存器的值是0xAAAAFF55。其中,前4個(gè)存儲(chǔ)塊對(duì)應(yīng)于128KB的SRAM_OC,接下來(lái)的4個(gè)存儲(chǔ)塊對(duì)應(yīng)于128 KB的SRAM_ITC,最后8個(gè)存儲(chǔ)塊是256KB的SRAM-DTC?,F(xiàn)在就可以開始在ResetISR處理程序中編寫代碼了。首先要做的是將新值加載到寄存器IOMUXC_GPR_GPR17中。之后,需要配置寄存器IOMUXC_GPR_GPR16,以指定FlexRAM存儲(chǔ)體配置應(yīng)取自寄存器IOMUX _GPR_GPR 17,而不是熔絲Fuse。然后,如果在FlexRAM的新配置中,SRAM_DTC或SRAM_ITC的大小為0,則需要禁用寄存器IOMUXC_GPR_GPR16中的這些存儲(chǔ)器。代碼如下所示:

void ResetISR(void) {

 // Disable interrupts
 __asm volatile ("cpsid i");

 /* Reallocating the FlexRAM */
 __asm (".syntax unified
"

 "LDR R0, =0x400ac044
"http://Address of register IOMUXC_GPR_GPR17
 "LDR R1, =0xaaaaff55
"http://FlexRAM configuration DTC = 265KB, ITC = 128KB, OC = 128KB
 "STR R1,[R0]
"

 "LDR R0,=0x400ac040
"http://Address of register IOMUXC_GPR_GPR16
 "LDR R1,[R0]
"
 "ORR R1,R1,#4
"http://The 4 corresponds to setting the FLEXRAM_BANK_CFG_SEL bit in register IOMUXC_GPR_GPR16
 "STR R1,[R0]
"

#ifdef FLEXRAM_ITCM_ZERO_SIZE
 "LDR R0,=0x400ac040
"http://Address of register IOMUXC_GPR_GPR16
 "LDR R1,[R0]
"
 "AND R1,R1,#0xfffffffe
"http://Disabling SRAM_ITC in register IOMUXC_GPR_GPR16
 "STR R1,[R0]
"
#endif

#ifdef FLEXRAM_DTCM_ZERO_SIZE
 "LDR R0,=0x400ac040
"http://Address of register IOMUXC_GPR_GPR16
 "LDR R1,[R0]
"
 "AND R1,R1,#0xfffffffd
"http://Disabling SRAM_DTC in register IOMUXC_GPR_GPR16
 "STR R1,[R0]
"
#endif

 ".syntax divided
");

#if defined (__USE_CMSIS)
// If __USE_CMSIS defined, then call CMSIS SystemInit code
 SystemInit();

01e240ba-8674-11ed-bfe3-dac502259ad0.png

如果編譯項(xiàng)目,將看到控制臺(tái)上顯示的內(nèi)存分布仍然是默認(rèn)配置。這是因?yàn)樾薷牧薘eset處理程序以重新分配FlexRAM,但沒(méi)有修改鏈接器文件以匹配這些新大小。為此,需要轉(zhuǎn)到項(xiàng)目的屬性。進(jìn)入屬性后,需要轉(zhuǎn)到C/C++構(gòu)建->MCU設(shè)置。一旦進(jìn)入MCU設(shè)置,需要修改SRAM內(nèi)存的大小以匹配新配置。

02039fbc-8674-11ed-bfe3-dac502259ad0.png

在進(jìn)行這些更改后,如果編譯項(xiàng)目,將看到控制臺(tái)中顯示的內(nèi)存分布與現(xiàn)在新大小相匹配。

022491ea-8674-11ed-bfe3-dac502259ad0.png

需要修改內(nèi)存保護(hù)單元(MPU)以匹配這些新的內(nèi)存大小。為此,需要轉(zhuǎn)到文件板中的函數(shù)BOARD_ConfigMPU.c。在該函數(shù)中,需要找到分別對(duì)應(yīng)于SRAM_ITC、SRAM_DTC和SRAM_OC的區(qū)域5、6和7。與寄存器IOMUXC_GPR_GPR14相同,如果內(nèi)存的新大小不是32、64、128、256或512,則需要選擇下一個(gè)更大的數(shù)字。配置應(yīng)如下所示:

/* Region 5 setting: Memory with Normal type, not shareable, outer/inner write back */
 MPU->RBAR = ARM_MPU_RBAR(5, 0x00000000U);
 MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_128KB);

 /* Region 6 setting: Memory with Normal type, not shareable, outer/inner write back */
 MPU->RBAR = ARM_MPU_RBAR(6, 0x20000000U);
 MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_256KB);

 /* Region 7 setting: Memory with Normal type, not shareable, outer/inner write back */
 MPU->RBAR = ARM_MPU_RBAR(7, 0x20200000U);
 MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_128KB);

02484bb2-8674-11ed-bfe3-dac502259ad0.png

最后,需要將堆棧放在DTCM內(nèi)存的開頭。為此,需要轉(zhuǎn)到項(xiàng)目的屬性。從那里,必須用C/C++構(gòu)建和管理Linker腳本。

02720830-8674-11ed-bfe3-dac502259ad0.png

然后,需要在ResetISR函數(shù)中再添加兩條匯編指令。我們必須在匯編代碼的開頭添加以下兩條指令:

02c1f408-8674-11ed-bfe3-dac502259ad0.png

這些就是在啟動(dòng)期間重新分配FlexRAM所需的所有更改。

調(diào)試會(huì)話: 為了驗(yàn)證剛才所做的所有修改是否正確,將啟動(dòng)調(diào)試會(huì)話。一旦到達(dá)main,在運(yùn)行應(yīng)用程序之前,將轉(zhuǎn)到外設(shè)視圖查看寄存器IOMUX _GPR_GPR16和IOMUX _GPR _GPR17,并驗(yàn)證值是否正確。如下圖所示,在寄存器IOMUXC_GPR_GPR16中,將FLEXRAM_BANK_CFG_SEL配置為1,以使用寄存器IOMUX _GPR_GPRS17配置FLEXRAM。

02dd2142-8674-11ed-bfe3-dac502259ad0.png

最后,在寄存器IOMUXC_GPR_GPR17中,我們可以看到對(duì)應(yīng)于新配置的值0xAAAAFF55。

02fe3d8c-8674-11ed-bfe3-dac502259ad0.png

通過(guò)熔絲重新分配FlexRAM

上述操作是如何通過(guò)在復(fù)位處理程序中編寫一些代碼來(lái)通過(guò)軟件重新分配FlexRAM。此過(guò)程工作正常,使用此方法測(cè)試可以配置不同大小RAM,但一旦找到應(yīng)用程序的正確配置,建議通過(guò)熔絲配置這些新大小,而不是使用寄存器IOMUX _GPR_GPR17。在代碼中重新配置FlexRAM有很多危險(xiǎn)區(qū)域。這幾乎都?xì)w結(jié)為這樣一個(gè)事實(shí):寫入RAM的任何代碼/數(shù)據(jù)/堆棧信息都可能在重新分配期間改變位置。這就是為什么一旦找到正確的配置,就應(yīng)該通過(guò)熔絲進(jìn)行應(yīng)用。如果使用Fuse來(lái)配置FlexRAM,那么就不必?fù)?dān)心代碼和數(shù)據(jù)的移動(dòng),因?yàn)镕use 設(shè)置被應(yīng)用為硬件默認(rèn)設(shè)置。記住,一旦燒了熔絲,就沒(méi)有退路了!這就是為什么首先通過(guò)軟件方法嘗試配置很重要。燒完熔絲后,無(wú)需修改復(fù)位處理程序,只需修改MPU以更改我們之前看到的區(qū)域大小和項(xiàng)目的MCU設(shè)置,以匹配通過(guò)熔絲配置的新內(nèi)存大小。

負(fù)責(zé)FlexRAM配置的熔絲為Default_FlexRAM_Part,此熔絲的地址為0x6D0[15:13]??梢栽趨⒖际謨?cè)的Fusemap一章中找到有關(guān)此保險(xiǎn)絲和不同配置的更多信息。要燒熔絲,建議使用blhost或MCUBootUtility。兩個(gè)工具的下載鏈接如下:

https://www.nxp.com/webapp/sps/download/license.jsp?colCode=blhost_2.6.2&appType=file1&location=null&DOWNLOAD_ID=null

https://github.com/JayHeng/NXP-MCUBootUtility

ResetISR.c參考代碼:

0315dfaa-8674-11ed-bfe3-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5275

    瀏覽量

    119680
  • sram
    +關(guān)注

    關(guān)注

    6

    文章

    761

    瀏覽量

    114562
  • mcuxpresso
    +關(guān)注

    關(guān)注

    1

    文章

    38

    瀏覽量

    4133

原文標(biāo)題:重新分配 FlexRAM

文章出處:【微信號(hào):嵌入式 MCU,微信公眾號(hào):嵌入式 MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    xilinx,ddrmig文件中管腳分配

    使用xilinx spartan6,在工程中使用原語(yǔ)生成DDR控制器mig文件,DDR數(shù)據(jù)管腳定義發(fā)生改變,需要重新分配管腳,求告知,這個(gè)管腳分配要怎么弄
    發(fā)表于 07-19 09:54

    6678工程如何分配存儲(chǔ)器地址范圍

    各位好! ??????? 之前使用ccs3.3創(chuàng)建2812的工程時(shí),一般直接在TCF文件中手動(dòng)的去重新分配存儲(chǔ)器的地址范圍,然后生成的cmd文件中也可以看到具體分配的結(jié)果。 ??????? 目前
    發(fā)表于 06-25 06:54

    無(wú)法修改許可證以允許重新分配產(chǎn)品

    嗨,我正在嘗試為獨(dú)立計(jì)算機(jī)重新分配vivado許可證文件。當(dāng)我進(jìn)入許可網(wǎng)站時(shí),修改按鈕顯示為灰色。我已經(jīng)使用激活后來(lái)的html鏈接導(dǎo)航到網(wǎng)站,并通過(guò)標(biāo)準(zhǔn)的Web訪問(wèn)進(jìn)入。請(qǐng)告訴我如何從舊的獨(dú)立機(jī)器
    發(fā)表于 12-13 10:49

    Linux的磁盤空間重新分配方法

    在使用CentOS6.3版本linux系統(tǒng)的時(shí)候,發(fā)現(xiàn)根目錄(/)的空間不是很充足,而其他目錄空間有很大的空閑,所以本文主要是針對(duì)現(xiàn)在已有的空間進(jìn)行調(diào)整。首先,先來(lái)查看一下系統(tǒng)的空間分配情況:
    發(fā)表于 07-22 08:44

    使用i.MX RT的FlexRAM的教程

    使用i.MX RT的FlexRAM
    發(fā)表于 12-12 07:36

    請(qǐng)問(wèn)STM32MP1開機(jī)后可以分配外設(shè)嗎?

    大家好,例如,我可以將 UART 分配給 Cortex M4 運(yùn)行時(shí)上下文,并為 STM32MP1 生成適當(dāng)?shù)脑O(shè)備樹文件,然后在啟動(dòng)后,以某種方式將 UART 重新分配給 Cortex A7 運(yùn)行時(shí)上下文嗎?
    發(fā)表于 02-07 09:08

    如何在實(shí)時(shí)邊緣yocto項(xiàng)目中為監(jiān)獄牢房重新分配資源?

    我想在實(shí)時(shí)邊緣 yocto 項(xiàng)目中為監(jiān)獄牢房重新分配資源(can1)。我使用修改后的文件 fsl-ok1028a-rdb-jailhouse.dtb、inmate-ls1028a-rdb.dtb
    發(fā)表于 03-28 08:26

    S32K314在CS自動(dòng)控制的情況下,可以在運(yùn)行程序時(shí)重新分配CS引腳嗎?

    我正在使用 S32K314,在我的項(xiàng)目中我正在使用 QuadSPI。在我的 spi 閃存中,有兩個(gè)芯片選擇用于兩個(gè)不同的內(nèi)存組。我猜在示例項(xiàng)目中,CS 引腳由驅(qū)動(dòng)程序代碼控制。但我想將兩個(gè)引腳分配為 CS 并手動(dòng)控制。我該怎么做? 在 CS 自動(dòng)控制的情況下,我可以在運(yùn)行程序時(shí)
    發(fā)表于 04-26 07:36

    如何為MIMXRT1062重新分配FlexRAM?

    我正在研究 MIMXRT1062。 SRAM_DTC 溢出“SRAM_DTC”。我嘗試將 SRAM_DTC 加倍到 256KB 并相應(yīng)地減少 SRAM_OC(如下)。之后,調(diào)試器停止工作。 我已經(jīng)嘗試過(guò)這種方式 - 鏈接 1. 如何為 MIMXRT1062 重新分配 Flex
    發(fā)表于 05-29 06:17

    stm32f4的堆棧怎么分配

    使用一些大型的庫(kù)文件,要重新分配堆或者棧,那要怎么分配大小,總不可能一點(diǎn)點(diǎn)改變吧
    發(fā)表于 09-21 06:39

    電荷重新分配DAC,電荷重新分配DAC原理是什么?

    電荷重新分配DAC,電荷重新分配DAC原理是什么? DAC的發(fā)展經(jīng)歷了從電子管、晶體管到集成電路的發(fā)展過(guò)程,早期的DAC采用電子管組裝而成。進(jìn)入五
    發(fā)表于 03-24 13:38 ?1.1w次閱讀

    沃達(dá)豐及其競(jìng)爭(zhēng)對(duì)手正在向政府施壓要求重新分配無(wú)線頻譜

    WISPA NZ主席邁克·史密斯(Mike Smith)在一份聲明中表示,“沃達(dá)豐及其競(jìng)爭(zhēng)對(duì)手正在向政府施加巨大壓力,要求他們重新分配無(wú)線頻譜,以便他們能夠更經(jīng)濟(jì)地運(yùn)營(yíng)5G”,但指出一些頻譜已經(jīng)被大約30家地區(qū)性無(wú)線互聯(lián)網(wǎng)服務(wù)提供商使用,他們共同為數(shù)以萬(wàn)計(jì)的農(nóng)村客戶提供服務(wù)。
    發(fā)表于 08-06 10:55 ?759次閱讀

    澳大利亞政府計(jì)劃在2021年初對(duì)26GHz頻段的頻譜進(jìn)行重新分配

    在澳大利亞通信和媒體管理局(ACMA)根據(jù)行業(yè)反饋制定了頻譜計(jì)劃后,通信、網(wǎng)絡(luò)安全和藝術(shù)部長(zhǎng)保羅·弗萊徹(Paul Fletcher)發(fā)布了一份針對(duì)26GHz頻段頻譜的重新分配聲明。
    發(fā)表于 10-27 09:29 ?724次閱讀

    FCC將重新分配大部分5.9GHz頻段,為了非授權(quán)頻譜技術(shù)和C-V2X

    據(jù)外媒報(bào)道,當(dāng)?shù)貢r(shí)間12月12日,美國(guó)聯(lián)邦通信委員會(huì)(FCC)一致投票通過(guò)了一項(xiàng)提案,該提案將重新分配5.9GHz頻段的大部分頻譜,并將這些頻譜專用于非授權(quán)頻譜技術(shù)和C-V2X技術(shù)。
    的頭像 發(fā)表于 12-13 15:48 ?3466次閱讀

    i.MX RT的FlexRAM配置問(wèn)題

    i.MX RT的FlexRAM配置問(wèn)題
    的頭像 發(fā)表于 10-24 15:46 ?743次閱讀
    i.MX RT的<b class='flag-5'>FlexRAM</b>配置問(wèn)題