IAR环境下的STM32H750片外QSPI Flash下载仿真

IAR环境下的STM32H750片外QSPI Flash下载仿真

前言

做单片机开发,用的不是IAR就是KEILL,这两款IDE也说不上谁更好用,但是KEIL涉及一个版权问题,个人使用破解是没啥问题,但是公司商业使用会有点麻烦。

前段时间用STM32H750VB这块单片机做项目,这块单片机自带1M RAM,不需要外挂RAM了,价格上也是很香。但是,只有128K Flash,支持外挂扩产,加了一个8M的W25Q64 QSPI flash。开始是用KEIL做的,因为开源资料多,KEIL的Flash Download网上有参考,但是领导要换成IAR(因为一直都是用IAR的),捣鼓了两天,终于搞明白了IAR下的实现。

Boot

这里的BOOT就用内部128k flash做的,主要就是实现QSPI的初始化和地址映射,并实现跳转。网上的例程很多就不多做介绍。

FlashLoader

FlashLoader是IAR自带的,把编译生成的文件写进flash,默认是不用管的,现在写进片外flash 就要对这个文件做一点修改。在这里插入图片描述

  1. 新建一个空的工程 在这里插入图片描述
  2. 把IAR安装目录这个目录下的所有文件复制到新创建的工程目录下
    在这里插入图片描述
    在这里插入图片描述
  3. 工程中添加以下文件
    在这里插入图片描述
    我们只需要修改flash_loader_ram.c 这个文件 实现里面的几个函数就行。
uint32_t FlashInit(void *base_of_flash, uint32_t image_size,
                  uint32_t link_address, uint32_t flags,
                  int argc, char const *argv[]);
                  
uint32_t FlashWrite(void *block_start,
                   uint32_t offset_into_block,
                   uint32_t count,
                   char const *buffer);

uint32_t FlashErase(void *block_start,
                   uint32_t block_size);

这几个函数需要自己来实现,对外部flash的初始化,写,擦除操作。有需要的我会上传自己的工程给大家参考。

  1. 还有个地方要修改下
    在这里插入图片描述
    从FlashInitEntry启动,对应的就是FlashInit :时钟、外部flash的初始化。

  2. 最后编译成功生成.out文件
    在这里插入图片描述
    其实flashloader就是一段运行在单片机RAM空间里的一段引导程序,它对IAR提供三个接口,实现片外flash的初始化,写,擦除操作,程序下载进flash以后它就没用了。

用户APP

我用的是W25Q64 8M FLASH,这里使用2M做外部代码空间 地址从0x90000000U到0x901FFFFF,工程是由cube生成的。
在这里插入图片描述在这里插入图片描述这里主要介绍一下flash loader要用到的三个文件
.board
.flash
.mac

.board内容

<?xml version="1.0" encoding="iso-8859-1"?>

<flash_board>
  <pass>
    <range>CODE 0x08000000 0x0801FFFF</range>
    <loader>$TOOLKIT_DIR$\config\flashloader\ST\FlashSTM32H7xxxB.flash</loader>
  </pass>
  <pass>
    <range>CODE 0x90000000 0x901FFFFF</range>
    <loader>$PROJ_DIR$\STM32H750_QSPI.flash</loader>
  </pass>
</flash_board>

0x08000000-0x0801ffff空间的擦写,也就是内部flash的下载 使用的IAR默认的.flash文件
0x90000000-0x901fffff空间的下载,就是自己写的.flash文件

打开下面的.flash文件

<?xml version="1.0" encoding="iso-8859-1"?>

<flash_device>
  <exe>$PROJ_DIR$\STM32H750_QSPI.out</exe>
  <page>256</page>
  <block>512 0x1000</block>
  <flash_base>0x90000000</flash_base>
  <aggregate>1</aggregate>
</flash_device>

exe 就是我们之前编译生成的.out文件,它实现了包括初始化、擦、写在内的接口。
page 就是使用的w25q64的页大小256字节
block w25q64的块大小是4k (0x1000) 这里使用512块 总共是2M空间
flash_base 起始地址0x90000000

还有一点要注意的是 IAR仿真在下载程序会从当前工程的main开始运行,但是由于我们还没有开启内存映射所以是没有办法仿真的,这里就需要添加启动脚本。
在这里插入图片描述.mac文件内容

execUserSetup()
{

}


Access()
{

}

__var x1;
execUserReset()
{  
	x1 = __readMemory32(0x08000004,"Memory");
	#SP = __readMemory32(0x08000000,"Memory");
	#PC = x1;  
}


execUserPreload()
{

}

我们需要让IAR在下载完程序后从boot空间开始运行,初始化QSPI并使能地址映射 再跳转到我们的外部flash空间
在这里插入图片描述仿真调试,程序正常下载也可以跳到外部空间。

工程:
链接:https://pan.baidu.com/s/144AgcXAtD-58ZFdALw5ijg
提取码:1bmr
有问题可以留言,看到会回

  • 8
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值