衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(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。現(xiàn)在就可以開(kāi)始在ResetISR處理程序中編寫(xiě)代碼了。首先要做的是將新值加載到寄存器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)存的開(kāi)頭。為此,需要轉(zhuǎn)到項(xiàng)目的屬性。從那里,必須用C/C++構(gòu)建和管理Linker腳本。

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

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

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ù)位處理程序中編寫(xiě)一些代碼來(lái)通過(guò)軟件重新分配FlexRAM。此過(guò)程工作正常,使用此方法測(cè)試可以配置不同大小RAM,但一旦找到應(yīng)用程序的正確配置,建議通過(guò)熔絲配置這些新大小,而不是使用寄存器IOMUX _GPR_GPR17。在代碼中重新配置FlexRAM有很多危險(xiǎn)區(qū)域。這幾乎都?xì)w結(jié)為這樣一個(gè)事實(shí):寫(xiě)入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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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

    文章

    5363

    瀏覽量

    121158
  • sram
    +關(guān)注

    關(guān)注

    6

    文章

    768

    瀏覽量

    114884
  • mcuxpresso
    +關(guān)注

    關(guān)注

    1

    文章

    41

    瀏覽量

    4235

原文標(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的磁盤(pán)空間重新分配方法

    在使用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

    如何在實(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 ?797次閱讀

    澳大利亞政府計(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 ?777次閱讀

    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 ?3569次閱讀

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

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

    重新分配pod節(jié)點(diǎn)

    1、軟件包下載 去github上下載較新的Kubernetes軟件包https://github.com/ ? ? ? ? ? 2、升級(jí)說(shuō)明 升級(jí)包括master節(jié)點(diǎn)升級(jí)和node節(jié)點(diǎn)的升級(jí),本章升級(jí)至v1.15.12; Master節(jié)點(diǎn)的服務(wù)包括:apiserver、controller-manager、kube-scheduler; Node節(jié)點(diǎn)的服務(wù)包括:kubelet和kube-proxy; 由于apiserver被nginx代理,所以在升級(jí)的時(shí)候需要操作操作nginx注釋升級(jí)節(jié)點(diǎn),避免帶來(lái)無(wú)法訪問(wèn)的情況; 我們的master節(jié)點(diǎn)和node都是在同一個(gè)集群服務(wù)器上,所以一起進(jìn)行操作; 3、確定節(jié)點(diǎn)升級(jí)順序 查看節(jié)
    的頭像 發(fā)表于 01-02 09:17 ?130次閱讀
    <b class='flag-5'>重新分配</b>pod節(jié)點(diǎn)
    东方夏威夷娱乐| 大发888官方 hplsj| 微信百家乐官网群二维码| 德州扑克 梭哈| 百家乐技巧-百家乐开户指定代理网址| 百家乐官网平台送彩金| 时时博在线娱乐城| 百家乐论坛bocaila| 德州市| 威尼斯人娱乐场的微博| 美高梅百家乐娱乐城| 百家乐官网网上真钱娱乐平台| 绵竹市| 大发888娱乐城登录| 百家乐庄闲对冲| 澳门赌百家乐官网的玩法技巧和规则 | 赌博游戏| 百家乐开户过的路纸| 百家乐太阳城球讯网| 基础百家乐官网规则| 百家乐官网大赢家小说| 大发888老l| 大众百家乐的玩法技巧和规则| 真人百家乐是骗局| 致胜百家乐官网的玩法技巧和规则 | 88娱乐城官方网站| 富田太阳城租房| 百家乐赌博器| 帝王百家乐官网的玩法技巧和规则| 百家乐官网美食坊| 免费百家乐官网规则| 大发888娱乐城.com| 百家乐赌博代理荐| 百家乐游戏群号| 百家乐官网娱乐场开户注册| 百家乐官网必胜法hk| 利高娱乐城| 二八杠单机游戏| 在线百家乐策| 网上百家乐的玩法技巧和规则 | 怎么玩百家乐官网网上赌博|