[STM32H7] 【STM32H7S78-DK测评】NOR XIP执行

[复制链接]
1513|1
 楼主| chen000000009 发表于 2024-10-8 01:40 | 显示全部楼层 |阅读模式
上一篇文章介绍了开发环境搭建,那个工程模板用的就是NOR XIP执行,下面介绍其原理
所谓的XIP,意思就是就地执行。像Linux或者Windows,一般的可执行程序存放于flash,需要将其加载到内存,然后执行,而XIP,则是不需要加载到内存,直接将flash做映射,映射到内部总线的一段地址上面,然后在这段地址上面执行。我们所熟知的STM32flash起始地址0x8000000,其实也是XIP的一段地址。
下图展示了STM32XIP的流程。
4327467041cd6d16ca.png

XIP的主要流程都在Template_XIP_Boot工程里面。要实现片外FLASHXIP,首先还是需要初始化存储器,初始化的函数为
MX_XSPI2_InitMX_XSPI1_Init
这两个函数最终调用了
HAL_XSPI_Init
HAL_XSPIM_Config
具体硬件配置可以看原理图
744967041cdba3cab.png
259367041cdfcc9f9.png
其中XSPI2外接的是NOR FLASH,型号是MX66UW1G
XSPI1外接的是PSRAM,型号是 APS256XXN
注意这个函数是用于实现XSPI上器件的初始化,这个XSPI器件也可以不开启XIP功能的
这里的XSPI初始化,只需要注意一下GPIO的速度,要设置为最高,不然会初始化失败
7844667041ce507b10.png
完成XSPI初始化之后,会调用
MX_EXTMEM_MANAGER_Init
进行内存映射操作
这个函数的配置直接参考ST默认的即可
6904067041ceb53767.png
这个是XSPI的对应关系,以及带宽

2818367041cf223679.png
这些是XSPI器件的读写command配置

内存映射的地址,可以见ST的手册,可以看到XSPI1固定使用0x90000000XSPI2固定使用0x70000000

8825167041cf8185e3.png
配置好XSPI和内存映射后,可以执行跳转,也就是调用
BOOT_Application
ST目前也封装了这个API,不需要用户自行实现,只需要配置一下参数。在这个工程里面,参数配置在stm32_extmem_conf.h
876267041cfd6f211.png
这个地方需要指定XIP的器件在哪个extmem_list_config上面,这个extmem_list_config结构体定义就是在上面的MX_EXTMEM_MANAGER_Init函数里面实现。这里选择EXTMEMORY_1,也就是EXTMEM_NOR_SFDP

这个强制跳转就不过多介绍了,跟以前F1经常使用的IAP跳转API差不多,不过对于H7系列的,还要关掉cache

下面再介绍下app下载的流程。打开Template_XIP_Appli,这里要配置一个sct文件
4907567041d0f4d78a.png
sct文件直接用st默认的即可,不用修改
另外还要配置一下FLASH,如下图
5557167041d140a16c.png
这样,在keil点击下载,就会下载到片外flash。前提是要烧录了boot到片上flash
167267041d1a4e9ad.png
星辰大海不退缩 发表于 2024-10-8 22:18 | 显示全部楼层
XIP,则是不需要加载到内存,直接将flash做映射,映射到内部总线的一段地址上面
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

780

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部