STM32
直播中

李继明

7年用户 1032经验值
私信 关注
[问答]

请问SRAM地址重映射是在哪一级实现的?

SRAM容量比较大的型号,常见的除了SRAM分为几块如 SRAM1, SRAM2, TCM RAM 等之外,还常见地址重映射的设计。
例如下面这个图是 STM32L4Rx 的地址空间,其中 SRAM2 在 0x20030000 和 0x10000000 两个地址都可以访问。
手册是这么叙述的:
Execution can be performed from SRAM2 with maximum performance without any remap thanks to access through ICode bus.
The SRAM2 is aliased at address 0x2004 0000, offering a continuous address space with the SRAM1 and SRAM3.

此外,选择了从片内SRAM启动时,SRAM1 会被重映射到 0x00000000 处:
Boot from the embedded SRAM1: the SRAM1 is aliased in the boot memory space (0x0000 0000), but it is still accessible from its original memory space (0x2000 0000).

我有个疑问是,像上面这重地址重映射,是在 Cortex-m4 内核中实现的,还是在总线上,如 AHB Bus matrix 里面实现的?或者还有其它方式?
如果影射是总线的功能,那么DMA能够从两个地址访问同一个SRAM,没问题?

回帖(1)

马占云

2024-4-25 17:48:44
SRAM地址重映射通常是在硬件级别实现的,具体来说,是在微控制器或处理器的内存管理单元(Memory Management Unit, MMU)中实现的。MMU负责将虚拟地址映射到物理地址,地址重映射就是通过修改MMU中的映射表来实现的。

在STM32L4Rx系列微控制器中,SRAM2可以在两个不同的地址访问:0x20030000和0x10000000。这种设计允许在不进行地址重映射的情况下,通过ICode总线以最大性能执行SRAM2中的代码。同时,SRAM2在地址0x20040000处有一个别名,与SRAM1和SRAM3形成一个连续的地址空间。

当选择从片内SRAM启动时,SRAM1会被重映射到0x0000...的地址空间。这种重映射通常是通过配置微控制器的内存重映射寄存器来实现的。在STM32系列微控制器中,这个寄存器通常是MMCU(Memory Mapping Configuration Unit)寄存器。

总结一下,SRAM地址重映射是在硬件级别,特别是内存管理单元中实现的。在STM32L4Rx系列微控制器中,可以通过配置MMCU寄存器来实现SRAM1的地址重映射。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分