小猫爪:i.MX RT1050学习笔记11-FlexRAM的使用

本文深入探讨i.MXRT1050的FlexRAM特性,包括其16个bank的配置方法及ITCM、DTCM、OCRAM的使用技巧。介绍了通过FUSE、IDE脚本、BootLoader等多种方式配置FlexRAM。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 前言

对于RT1050的内部SRAM则是有着非常灵活的功能。接下来让我们一起来学习一下吧。

2 FlexRAM介绍

RT1050总共有512KB大小的内部RAM,然后将其按照32KB大小分成了16个bank,每一个bank都可以分成ITCM, DTCM, OCRAM,三者的描述如下:

名称描述
I-TCM (Instruction-Tightly Coupled Memory)指令高速缓存,可以通过一个64位 I-TCM接口访问,只能供内核访问,速度贼快,通常存一些需要高速访问的代码指令
D-TCM (Data- Tightly Coupled Memory)数据高速缓存,可以通过两个 I-TCM接口访问,只能供内核访问,速度一般快,通常存一些需要高速访问的数据
OCRAM(On-Chip RAM)普通RAM,可以通过AXI接口访问,内核外设均可访问,速度较之有点慢

16个bank都可以无序打乱,但是有一个限制条件就是ITCM和DTCM的大小必须是2的多少次方,比如:0K,16K,32K,64K,128K,256K;OCRAM可以为0 ~ 512K。

(说到这里或许有的小伙伴就有人来问了,为什么512KB不能完全是TCM,因为BootROM在启动时会使用掉最少32K+4(1)K的OCRAM,所以我们最少要给OCRAM预留出64KB的空间来保证其正常启动)

默认配置如下:

ITCMDTCMOCRAM
128KB128KB256KB

3 FlexRAM配置方法

配置FlexRAM也是非常简单,有两种渠道可以实现:
①通过配置FUSE的0x6D0处的[19:16]。
②通过配置寄存器IOMUXC_GPR_GPR17。

可以通过配置寄存器IOMUXC_GPR_PGR16的FLEXRAM_BANK_CFG_SEL位来选择上面两种方式之一,默认是通过FUSE来配置。

下表显示了RT1050的可能配置:
在这里插入图片描述
注意:如果通过寄存器对32个Bank的分配配置完成后,还需要进行配置寄存器IOMUXC_GPR_GPR14来告诉内核ITCM和DTCM的大小,另外如果我们在配置ITCM和DTCM的大小为0之前,我们还需要配置寄存器IOMUXC_GPR_GPR16的DTCM和ITCM的使能位INIT_DTCM_EN和INIT_ITCM_EN)

总结通过配置寄存器来初始化FlexRAM流程如下:
①配置寄存器IOMUXC_GPR_GPR17对16个bank进行分配。
②配置寄存器IOMUXC_GPR_PGR16的FLEXRAM_BANK_CFG_SEL来选择配置源寄存器。
③如果配置ITCM或者DTCM大小为0,则应配置IOMUXC_GPR_GPR16中对应的TCM使能位。
④配置寄存器IOMUXC_GPR_GPR14,修改DTCM和ITCM的大小。

4 FlexRAM使用

RT提供了配置寄存器的方法来配置FlexRAM,所以我们是可以在程序运行的时候来改变FlexRAM的配置的,不过这需要注意很多方面的影响,比如中断,比如数据存储等,不当的操作非常容易造成难以想象的结果,所以还是不建议这样做。最好在程序运行前完成FlexRAM的配置。下面介绍几种不同的使用场景:

4.1 修改FSUE

这种方法就是一次性的,一般只有在产品发布的情况下才会这样做,所以我们就直接PASS掉。

4.2 通过IDE脚本

我们在程序调试阶段,则可以通过IDE的脚本文件改变相关寄存器的值,IDE脚本的方式我已经在我的前一篇文章《小猫爪:i.MX RT1050学习笔记10-SDRAM的提前初始化》具体介绍过了,大家可以参考。

4.3 在BootLoader中

如果在有BootLoader的应用开发中,我们可以在BootLoader中通过在跳转到APP之前,添加对相关寄存器的配置来实现。

4.4 修改startup.s文件

我们可以在入口函数Reset_Handler中添加配置相关寄存器的汇编代码,保证在启动后RAM中无任何数据前完成对FlexRAM的配置。参考代码如下:

在这里插入图片描述

4.5 通过DCD

通过DCD也可以配置FlexRAM,列出DCD中可以操作的寄存器表如下:
在这里插入图片描述

可以看到FlexRAM相关的寄存器也在其中,所以我们可以将FlexRAM相关的寄存器信息写入至DCD中,BootROM读取DCD数据后,也是可以完成对FlexRAM的初始化配置。DCD数据的生成在前一章也详细说过了,在这里就不举例了。

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猫爪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值