[分享] 基于MCUXpresso RT1050 FlexRAM重新配置
788 查看
1 回复
 楼主 | 发布于 2020-09-21 | 只看楼主
分享到:
一,文档说明
    RT1050一共有512KB内部FlexRAM,默认的情况是128KB ITCM, 128KBDTCM,256KBOCRAM。在实际的使用中,有些客户需要重新分配这个FlexRAM,来均衡自己应用所需要ITCM, DTCM以及OCRAM。通过官方应用笔记Using the i.MX RT FlexRAM:https://www.nxp.com/docs/en/application-note/AN12077.pdf
我们可以知道一些关于FlexRAM的知识以及配置的限制等。重新配置FlexRAM的分区情况,主要可以通过FUSE或者IOMUXC_GPR_GPR17寄存器情况去配置,具体关系如下:


如果修改fuse,那么以后就难以重新修改,因为fusebit只能从01,不能从10,所以,在实际的调试过程中,客户可以通过修改内部寄存器方式临时修改FlexRAM的分区情况。最近发现有部分网友在使用寄存器重新分区FlexRAM的过程中,出现了各种各样的问题,比如不能debugdebug问题解决之后,又出现debug可以运行,但是下载进去,重新复位代码不能起来的问题。所以本篇文章为了需要使用这个功能的网友使用,总结了在MCUXPressoIDE下具体的重新配置RT1050 FlexRAM ITCM, DTCM以及OCRAM大小的步骤其他RT芯片系列方法也是类似,只是具体的寄存器分区大小按照实际的芯片寄存器去配置。

二,FlexRAM配置分析

     RT1050 默认的FlexRAM为:128KB ITCM, 128KB DTCM, 256KBOCRAM。那么如果需要配置FlexRAM为:128KB ITCM, 256KBDTCM, 128KBOCRAM,应该怎么做呢?
从上面的表格,我们可以看出,可以将IOMUXC_GPR_GPR17配置为下表的黄色行数据:


IOMUXC_GPR_GPR17寄存器中:
   • 00b—bankis not used.
    • 01b—bank is configured forOCRAM.
    • 10b—bankis configured for DTCM.
    • 11b—bankis configured for ITCM.
RT1050一共512KB FlexRAM, 做16等分,一个bank 为512KB/16=32KB。

所以需要128KBITCM, 256KB DTCM, 128KB的OCRAM, 则:

ITCM: 4bank,共411b

DTCM:  8bank, 810b

OCRAM: 4个bank,401b

FlexRAM分区地址关系如下:


相关的寄存器有:
    IOMUXC_GPR->GPR17 =0x5AAFFAA5;
   IOMUXC_GPR->GPR16 |= 0x7;
IOMUXC_GPR->GPR14 = (9<<20) |(8<<16);
三,MCUXPressoIDE配置步骤

  下面在MIMXRT1050-EVKB开发板上以SDK led_blinky MCUXpresso工程为例,给出具体操作步骤。下载最新的SDK并且在MCUXpresso IDE中导入led_blinky工程。
3.1 修改MCU Settingsmemory

 
DTCM,ITCM, OCRAM改为实际需要的大小,点击apply


3.2 Reset代码里面添加FlexRAM的代码

   FLEXRAM->TCM_CTRL = 4;
   IOMUXC_GPR->GPR17 = 0x5AAFFAA5;
   IOMUXC_GPR->GPR16 |= 0x7;
    IOMUXC_GPR->GPR14=  (9<<20) | (8<<16) ;

3.3  IDE debug脚本.scp文件准备
RT1050_connect_128Kocram_128Kitcm_256Kdtcm.scp内容为:
  1. 100 REM===============================
  2. 110 REM RT1050_connect.scp
  3. 120 REM
  4. 130 REM Copyright 2019 NXP
  5. 140 REM All rights reserved.
  6. 150 REM===============================
  7. 160 print "RT1050 ConnectScript"
  8. 170 REM probelist
  9. 180 p% = probefirstfound
  10. 190 rem probeopenbyindex p%
  11. 200 wireswdconnect p%
  12. 210 selectprobecore p% 0
  13. 220 cminitapdp this
  14. 230 cmhalt this
  15. 235 goto 320
  16. 240 rem trap in bootrom
  17. 250 cmwatchset this 0 0x400F8004 RW
  18. 260 cmresetvectorcatchclear this
  19. 270 print "Resetting andtrapping"
  20. 280 cmsysresetreq this
  21. 290 print "Back from reset"
  22. 300 cmresetvectorcatchset this
  23. 310 cmwatchclear this 0
  24. 320 print "Disabling MPU"
  25. 330 s% = Peek32 this 0xE000ED94
  26. 340 s% = s% & 0xFFFFFFFE
  27. 350 Poke32 this 0xE000ED94 s%
  28. 360 REM ====== Configure FlexRAM======
  29. 370 print "Configure FlexRAM for128KB OC RAM, 128KB I-TCM, 256KB D-TCM"
  30. 380 REM TCM CTRL Poke 0x400B0000 - toforce RAM clocking and set wait states = b100
  31. 390 Poke32 this 0x400B0000 0x4
  32. 400 REM IOMUXC_GPR17 0x400AC044 - thissets bitfield allocation of FlexRAM 32KB banks to OC 256KB b01, I 128KB b11, D128KB b10
  33. 410 Poke32 this 0x400AC044 0x5AAFFAA5
  34. 420 REM IOMUXC_GPR16 0x400AC040 - thissets enables for I and DTCM and the source of the TCM config = 0x200007
  35. 430 Poke32 this 0x400AC040 0x200007
  36. 440 print "Finished"
  37. 450 REM===============================
  38. 460 end
复制代码

   RT1050_connect_128Kocram_128Kitcm_256Kdtcm.scp拷贝到IDE安装目录下:
C:\nxp\MCUXpressoIDE_11.1.0_3209\ide\binaries\Scripts
拷贝完之后,在debug configuration界面的script connect 中添加刚刚的脚本:


3.4  修改stack的起始位置

   STACK的位置由end改为start,这样可以解决烧录之后,重新上电不运行的问题。

下面就可以编译代码,并且运行,测试结果如下:


可以发现,寄存器的FlexRAM情况确实是需要的配置情况,烧录之后,退出debug重新上电,可以发现led还是可以闪烁,说明功能已经正常工作。

本帖有更多资源,需 登录 才可以下载,没有帐号?立即 注册

(0 ) (0 )
回复 举报

回复于 2021-05-11 沙发

收下学习先。


(0 )
评论 (0) 举报
  • 发表回复
    0/3000





    举报

    请选择举报类别

    • 广告垃圾
    • 违规内容
    • 恶意灌水
    • 重复发帖

    全部板块

    返回顶部