打印
[STM32H7]

【STM32H7S78-DK测评】NOR XIP执行

[复制链接]
549|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
上一篇文章介绍了开发环境搭建,那个工程模板用的就是NOR XIP执行,下面介绍其原理
所谓的XIP,意思就是就地执行。像Linux或者Windows,一般的可执行程序存放于flash,需要将其加载到内存,然后执行,而XIP,则是不需要加载到内存,直接将flash做映射,映射到内部总线的一段地址上面,然后在这段地址上面执行。我们所熟知的STM32flash起始地址0x8000000,其实也是XIP的一段地址。
下图展示了STM32XIP的流程。

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

这些是XSPI器件的读写command配置

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

配置好XSPI和内存映射后,可以执行跳转,也就是调用
BOOT_Application
ST目前也封装了这个API,不需要用户自行实现,只需要配置一下参数。在这个工程里面,参数配置在stm32_extmem_conf.h
这个地方需要指定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文件
sct文件直接用st默认的即可,不用修改
另外还要配置一下FLASH,如下图
这样,在keil点击下载,就会下载到片外flash。前提是要烧录了boot到片上flash

167267041d1a4e9ad.png (66.03 KB )

167267041d1a4e9ad.png

使用特权

评论回复
沙发
星辰大海不退缩| | 2024-10-8 22:18 | 只看该作者
XIP,则是不需要加载到内存,直接将flash做映射,映射到内部总线的一段地址上面

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

777

帖子

2

粉丝