Cortex-M3 外部 RAM 区域
Cortex-M3 External RAM Region
我目前正在研究 RAM/ROM/Stack/Heap 和数据段等主题。
我正在查看 ARM Cortex-M3 内存映射并看到标记为“外部 RAM”的区域。
根据随机 Cortex-M3 STM32 MCU 的 data sheet,外部 RAM 区域从 0x60000000 映射到 0x9FFFFFFF,因此它非常大!
我找不到关于该区域实际使用方式的明确答案。
我想你会有一个外部 SRAM 并且你会在两个选项之间进行选择。
- (1) 通过SPI 接口读取并放入本地缓冲区(堆栈),然后将该本地缓冲区加载到外部ram 区域。这个选项似乎有很多负面后果,例如占用 CPU 并在请求的数据非常大时临时增加堆栈。
- (2) 利用DMA从SPI接口传输到外部ram区域。
我现在想不明白,为什么要把数据映射到这个特定的地址范围,有什么好处,为什么不直接把数据放在那个巨大的内存区域呢?
现在我问这个问题是因为我有一种 轻微的 感觉我完全错过了外部 RAM 区域的真正含义。
-编辑-
在链接到 STM32 设备的数据 sheet 中,内存区域“外部 RAM”被标记为保留。我的结论是 ARM 列出的内存区域显示了 32 位 MCU 的全部潜力,因为我错误地指出外部 RAM 区域“非常大!”不一定意味着这是该区域的“真实”大小,即使使用它,也取决于供应商可以在 MCU 硬件中实际实现什么,我想他们会限制硬件功能以在价格、功率方面具有竞争力消费等
I imagine you would have an external [SRAM][3] and you would choose
between two options.
- (1) Read via the SPI interface and place into a local buffer(stack), then load that local buffer into the external ram region. This option
seems to have a lot of negative consequences, such as hogging the CPU
and increasing the stack temporarily if the requested data is very
large.
- (2) Utilize a DMA and transfer from the SPI interface into the external ram region.
None 以上。 SPI 总线上的外部存储器不是存储器映射的。如果你有一个 SPI 内存,它没有映射到那个区域,它只是一个 SPI 设备,“地址”只是从内存设备本身开始的偏移量。具有 Quad 或 Octo-SPI 控制器的 MCU 是内存映射的。 QSPI RAM 并不常见且相对昂贵。 QSPI更常用于闪存。
外部存储区域可以被带有FSMC的STM32部件使用(灵活
静态内存控制器)或 FMC(灵活内存控制器),或提到 QPSI 接口。后者是 FMC SDRAM,通常在高端部件上可用。除了 QSPI 和 NAND 闪存外,这些接口还需要使用 GPIO EMIF(外部存储器接口)替代功能来创建地址和数据总线。因此,它通常需要具有高引脚数的部件来容纳。 EMIF 可以配置为 8、16 或 32 位数据总线,以减少引脚数(并降低访问速度)。
Now I can't understand, why you would map the data to this specific
address range, what are the advantages, why don't you just place the
data directly in that huge memory region?
由于您早先的误解促成了这个问题,这个问题可能是多余的,但是内存映射中存在的内存可用于存储作为常规变量访问的数据,而不是从内部缓冲区传输到内部缓冲区,并且可以使用作为执行区域 - 代码可以加载到这样的内存中并直接从中执行。
Now I'm asking this question because I have a slight feeling I have completely missed the point of what the External RAM region really is.
自我意识是一种技能。这被称为 有意识的无能,是学习的动力。
It is my conclusion that the memory regions listed by ARM is showing the full potential of a 32bit MCU, as I incorrectly state that the external RAM region "is quite large!" does not necessarily mean that this is "real" size of that region, if it is even used, it depends on what the vendor can physically achieve within the MCU hardware, and I imagine they would limit hardware capabilities to be competitive on price, power consumption etc.
不,这主要与地址总线可用的引脚数有关(QSPI 除外)。外部存储器是电路板设计的问题——它不是 MCU 供应商决定必须存在的东西。约束是最大,而不是需要 的物理内存量。 STM32 FMC支持以下内存sizes/types:
例如,您最多可以拥有 512Mb 的 SDRAM。可用于静态存储器 (NOR/PSRAM/SRAM) 的 space 明显大于此类存储器的典型大小。
我目前正在研究 RAM/ROM/Stack/Heap 和数据段等主题。 我正在查看 ARM Cortex-M3 内存映射并看到标记为“外部 RAM”的区域。
根据随机 Cortex-M3 STM32 MCU 的 data sheet,外部 RAM 区域从 0x60000000 映射到 0x9FFFFFFF,因此它非常大!
我找不到关于该区域实际使用方式的明确答案。
我想你会有一个外部 SRAM 并且你会在两个选项之间进行选择。
- (1) 通过SPI 接口读取并放入本地缓冲区(堆栈),然后将该本地缓冲区加载到外部ram 区域。这个选项似乎有很多负面后果,例如占用 CPU 并在请求的数据非常大时临时增加堆栈。
- (2) 利用DMA从SPI接口传输到外部ram区域。
我现在想不明白,为什么要把数据映射到这个特定的地址范围,有什么好处,为什么不直接把数据放在那个巨大的内存区域呢?
现在我问这个问题是因为我有一种 轻微的 感觉我完全错过了外部 RAM 区域的真正含义。
-编辑- 在链接到 STM32 设备的数据 sheet 中,内存区域“外部 RAM”被标记为保留。我的结论是 ARM 列出的内存区域显示了 32 位 MCU 的全部潜力,因为我错误地指出外部 RAM 区域“非常大!”不一定意味着这是该区域的“真实”大小,即使使用它,也取决于供应商可以在 MCU 硬件中实际实现什么,我想他们会限制硬件功能以在价格、功率方面具有竞争力消费等
I imagine you would have an external [SRAM][3] and you would choose between two options.
- (1) Read via the SPI interface and place into a local buffer(stack), then load that local buffer into the external ram region. This option seems to have a lot of negative consequences, such as hogging the CPU and increasing the stack temporarily if the requested data is very large.
- (2) Utilize a DMA and transfer from the SPI interface into the external ram region.
None 以上。 SPI 总线上的外部存储器不是存储器映射的。如果你有一个 SPI 内存,它没有映射到那个区域,它只是一个 SPI 设备,“地址”只是从内存设备本身开始的偏移量。具有 Quad 或 Octo-SPI 控制器的 MCU 是内存映射的。 QSPI RAM 并不常见且相对昂贵。 QSPI更常用于闪存。
外部存储区域可以被带有FSMC的STM32部件使用(灵活 静态内存控制器)或 FMC(灵活内存控制器),或提到 QPSI 接口。后者是 FMC SDRAM,通常在高端部件上可用。除了 QSPI 和 NAND 闪存外,这些接口还需要使用 GPIO EMIF(外部存储器接口)替代功能来创建地址和数据总线。因此,它通常需要具有高引脚数的部件来容纳。 EMIF 可以配置为 8、16 或 32 位数据总线,以减少引脚数(并降低访问速度)。
Now I can't understand, why you would map the data to this specific address range, what are the advantages, why don't you just place the data directly in that huge memory region?
由于您早先的误解促成了这个问题,这个问题可能是多余的,但是内存映射中存在的内存可用于存储作为常规变量访问的数据,而不是从内部缓冲区传输到内部缓冲区,并且可以使用作为执行区域 - 代码可以加载到这样的内存中并直接从中执行。
Now I'm asking this question because I have a slight feeling I have completely missed the point of what the External RAM region really is.
自我意识是一种技能。这被称为 有意识的无能,是学习的动力。
It is my conclusion that the memory regions listed by ARM is showing the full potential of a 32bit MCU, as I incorrectly state that the external RAM region "is quite large!" does not necessarily mean that this is "real" size of that region, if it is even used, it depends on what the vendor can physically achieve within the MCU hardware, and I imagine they would limit hardware capabilities to be competitive on price, power consumption etc.
不,这主要与地址总线可用的引脚数有关(QSPI 除外)。外部存储器是电路板设计的问题——它不是 MCU 供应商决定必须存在的东西。约束是最大,而不是需要 的物理内存量。 STM32 FMC支持以下内存sizes/types:
例如,您最多可以拥有 512Mb 的 SDRAM。可用于静态存储器 (NOR/PSRAM/SRAM) 的 space 明显大于此类存储器的典型大小。