在STM32F4中的物理重新映射到RAM之后,使用了哪个数据总线



stm32f4控制器(带有ARM Cortex M4 CPU)允许使用SYSCFG_MEMRMP寄存器使用SYSCFG_MEMRMP寄存器中的最低地址(0x00000000至0x03ffffff)。我确实了解的是,寄存器选择哪个内存(flash/ram/etc。)被混合到最低地址,因此在重置后从哪个内存中获取重置向量和堆栈指针。

文档[1]还提到

在重新模式下,CPU可以通过ICODE BUS访问外部存储器

而不是增强性能的系统总线。

这意味着在重新映射之后,例如要使用从别名地址空间(0x00000000到0x03ffffff)中获取的指令。

现在我的问题:这样的重新映射操作之后,例如到RAM,将提取到RAM的非确定位置使用系统总线或ICODE BUS?

问题的背景是我想编写一个仅从RAM执行的图像(在调试器的控制下)的映像。.TEXT部分应该进入哪个内存区域?别名空间或物理空间?

[1] ST DOCID018909 REV 7


感谢Sean,我可以在ARM®Cortex® -M4处理器技术参考手册第2.3.1巴士接口中找到答案:

icode内存接口:指令从代码存储空间获取, 0x00000000至0x1ffffff,在[SIC!:this] 32位AHB-LITE BUS上执行。

dcode内存接口:数据和调试访问代码存储空间, 0x00000000至0x1fffffff,在[SIC!:this] 32位AHB-LITE BUS上执行。

系统接口:指令获取和数据以及调试访问 地址范围0x20000000至0xdfffffff和0xe0100000至0xffffffff 在[sic!:this] 32位AHB-Lite Bus上执行。

这也清楚地表明,使用ICODE/DCODE BUSSS(通过CPU Core)始终访问位于0x08000000的STM32F4 MCUS的闪存,无论它是否被重塑。这是因为两者都在代码内存空间(0x00000000至0x1fffffff)内。

但是,如果代码位于SRAM位于0x20000000中,则访问在0x0000000000的重设位置时,请使用ICODE/DCODE BUSSES访问原始位置(在代码存储器之外)使用System Bus。

核心上的总线接口的选择取决于所访问的地址。如果您通过0x00000004访问指令,则可以在ICODE总线上完成。使用系统总线完成了对0x20000004的访问。

重新映射函数的作用是更改物理内存系统,以便访问0x00000004(ICODE BUS)将使用相同的RAM,以便您在系统总线上访问。对0x20000004的任何访问都将不受影响,并且仍然通过核心在系统总线上生成。

相关内容

最新更新