1. 问题背景

STM32N6是集成了高性能CPU与NPU的新一代MCU,内置了丰富的外设接口,以及高达4. 2MB的SRAM。其内置的BootROM支持从多种接口启动,包括SDCard,EMMC,XSPINOR Flash。有些客户在使用STM32N6时,仅外接一块EMMC,用于存放FSBL,APPLI以及文件系统。

通过STM32CubeMX配置,在EXTMEM_MANAGER中间件,配置生成启动代码,使用Load and Run方式,FSBL在运行时自动将APPLI代码拷贝到内部SRAM运行。而中间件的memory driver中没有EMMC,只有EXTMEM_SDCARD比较合适,但生成的工程编译会出错。


2.解决办法

SDCard与EMMC类似,都由SDMMC外设驱动,因此可以参照SDCard driver来实现EMMC的驱动。

2.1 实现stm32_sal_mmc驱动

在stm32_sdcard_driver.c中,已经通过宏EXTMEM_SAL_MMC来识别EMMC对应的代码,可参考stm32_sal_sd.c来实现EMMC代码stm32_sal_mmc.c。

图 1 添加stm32_sal_mmc代码


2.2 更新stm32_sdcard_driver

在stm32_sdcard_driver.c中,补充宏EXTMEM_SAL_MMC对应的代码,相关代码主要在各个函数实现中的 case EXTMEM_DRIVER_SDCARD_LINKMMC部分,比如初始化函数:


3.通过STM32N6 Nucleo板验证

按上述步骤修改后,还需要将工程中的hsd1替换成hmmc1,在EXTMEM_MANAGER初始化时,配置为EXTMEM_DRIVER_SDCARD_LINKMMC,解决编译问题后,即可下载程序到STM32N6 Nucleo板外接的EMMC芯片进行测试。

测试后发现,还需要在EMMC 初始化开始前,先对EMMC进行复位操作:

这样修改后,FSBL能成功将APPLI从EMMC加载到SRAM运行。


4.小结

在已有的EXTMEM SDCARD驱动代码基础上,可以快速的实现EMMC的启动加载代码,对于STM32N6应用中,仅使用EMMC作为外部存储的场景,可采用此方法快速实现Load & Run运行。


重要通知 - 请仔细阅读

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

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐