☰
【官方原创】LAT6048 如何扩大MP2的A35核和M33核共享内存
2026/10/30 11:20:17 网站建设 项目流程

前言

STM32MP2x系列芯片都有两个相互独立的异构核,一个是Cortex-M33核,一个是Cortex-A35核,两个独立的核在同一个DDR内存运行的时候,就需要配置好各自的DDR内存映射,即要保证各自访问内存不能越界,又要保证两个核数据交互时能访问同一块内存。目前ST只提供一种默认的内存映射,有时候不能满足各种不同客户的需求,所以这篇文章主要讲解如何自由的配置Cortex-M33核和Cortex-A35核的内存映射。


1. 概括

STM32MP2x系列MPU芯片比上一代STM32MP15x系列芯片在DDR内存的访问上有很大的区别。

STM32MP2x系列的芯片异构核都能直接来访问DDR内存,所以在内存配置的时候要特别注意内存映射表一定要配置清楚。默认的内存配置可以参考这个wiki,DDR前面64MByte的内存空间是预留给OPTEE和Cortex-M33使用的。

但是在有些情况下,这个内存配置没法满足客人的需求,例如客人希望扩大CortexM33的数据内存,或者扩大CortexM33和CortexA35的共享内存,就需要扩大DDR前面的64M内存,下面就讲解如何来扩大前面预留的64MDDR内存。


2. 工作原理

2.1 Linux启动时内存的动态规划

MPU标准的linux启动过程是,先ROM Code运行,然后ROM Code通过启动外设加载第二级启动程序,也就是TF-A BL2,然后TF-A通过FIP文件来加载OP-TEE和U-boot,U-boot起来后再加载kernel并最终运行Linux系统。具体的可以参考这个wiki。

TF-A先被加载到MPU内部的SRAM,然后TF-A负责初始化一些基本的电源和DDR内存,然后再把FIP文件中的OP-TEE和Uboot加载到对应的内存中运行,Uboot运行后又需要把kernel加载到对应的DDR内存中,然后运行。

所以如果希望修改默认的DDR内存映射表,就需要修改TF-A,Uboot,OP-TEE,kernel的加载地址,防止内存冲突。默认的A35住启动时候,不同启动阶段DDR内存映射如下:

2.2 如何修改TF-A BL2运行后的内存映射表

TF-A加载FIP文件并运行,是通过FCONF文件,也就是通过stm32mp25-fw-config.dtsi这个设备树,这个设备树中引用的STM32MP_HW_CONFIG_BASE和STM32MP_BL33_BASE是在stm32mp2_def.h这个文件中定义的。

所以如果希望修改DDR内存映射,只需要修改stm32mp2_def.h这个配置文件。例如下是基于OSTL6.0的BSP,把预留DDR内存再扩大32M的patch:

当然这里还需要修改stm32mp257f-ev-ca35tdcid-fw-config.dtsi设备树配置文件,例如下列配置:

2.3 如何修改OP-TEE的内存配置

因为OP-TEE在TF-A运行后,加载到固定地址,后面整个Linux运行这个地址一直不变,这样才能保证U-boot和Kernel能正确访问OP-TEE的服务程序。

如下是基于OSTL6.0修改的OP-TEE的补丁文件内容,也是扩大32M内存:

2.4 如何修改U-boot运行的内存配置

U-boot是TF-A加载运行的,所以他本身即要告诉TF-A自己要运行的内存地址,又要保证U-Boot运行后,需要加载kernel和不能访问optee预留地址,当然所以这边需要修改如下的文件:

2.5 如何修改Kernel运行的DDR内存配置

Kernel就稍微简单一些,只需要修改DDR的预留地址,就可以了,当然这里面要注意,OP-TEE,U-boot都需要修改设备树的预留地址,保持内存预留地址一致。


3. 总结

  • 因为STM32MP2x系列的芯片Cortex-M核和Cortex-A核对外设的访问和DDR的访问几乎一样没有限制,所以如果默认的内存配置不能满足需求,可以参考这个例子来对内存重新配置。
  • 点击下载《如何扩大MP2的A35核和M33核共享内存》原文档。

重要通知 - 请仔细阅读

意法半导体公司及其子公司 (“ST”)保留随时对 ST 产品和 / 或本文档进行变更的权利,恕不另行通知。买方在订货之前应获取关于 ST 产 品的最新信息。 ST 产品的销售依照订单确认时的相关 ST销售条款。 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任。 ST 不对任何知识产权进行任何明示或默示的授权或许可。 转售的 ST 产品如有不同于此处提供的信息的规定,将导致 ST 针对该产品授予的任何保证失效。 ST 和 ST 徽标是 ST 的商标。若需 ST 商标的更多信息,请参考 www.st.com/trademarks。所有其他产品或服务名称均为其 各自所有者的财产。 本文档是ST中国本地团队的技术性文章,旨在交流与分享,并期望借此给予客户产品应用上足够的帮助或提醒。若文中内容存有局限或与ST 官网资料不一致,请以实际应用验证结果和ST官网最新发布的内容为准。您拥有完全自主权是否采纳本文档(包括代码,电路图等)信息, 我们也不承担因使用或采纳本文档内容而导致的任何风险。 本文档中的信息取代本文档所有早期版本中提供的信息。 © 2020 STMicroelectronics - 保留所有权利

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询