• 正文
    • 1、前言
    • 2、CubeMX配置
    • 3、源代码
  • 相关推荐
申请入驻 产业图谱

STM32N6570-DK如何将工程下载到外部Flash中并使用FSBL引导

03/18 08:08
347
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1、前言

上期我们介绍了STM32N6中的FSBL工作原理及其应用,本期我们介绍STM32N6570中如何将程序下载到外部Flash并利用FSBL进行引导。

2、CubeMX配置

STM32N6570DK中的外部flash通过XSPI通讯,因此我们需要开启XSPI2,这是连接到第一块(总共两块)内存的接口。

通讯方式选用Octo SPI,这是一种八线并行SPI通讯,与传统 SPI 的 1 线(标准 SPI)、4 线(Quad SPI)相比,数据通道数量大幅增加,同一时间的传递数据量大幅度提升。参数具体配置如下:

配置XSPIM模式如上图所示。

外部内存管理中使能存储管理,接下来设置一下引导程序。

勾选生成引导程序后,选择FSBL+XPI即Appli的程序在外部Flash中直接使用,而不是镜像到内部Flash使用。

设置Application offset为0x100000,这代表着我们的外部Flash程序为0x70000000+0x00100000为0x70100000,这是等会我们要下载到的外部Flash的地址。

内存设置中使用八线模式连接。

将之前摄像头和LCD的应用程序配置为Application中。

设置XSPI的时钟为50MHZ,这样子就完成了CubeMX中的所有配置了。

3、源代码

这里要注意到利用CubeMX生成时会提示是否使用非安全域,上述CubeMX的配置均在安全域中进行。

但是如果我们在创建CubeMX中使用非安全域的话,那么在上述流程生成的代码中将会出现一些需要注意的地方。

这时候工程会包含FSBL和Appli两个,在FSBL的工程中,main.c执行完CubeMX中的初始化(FSBL部分)单片机将程序跳转至Appli中的部分。

Appli工程中执行我们的主要程序。

但是如果我们是在非安全域中的话,AppliSecure(安全域的Application)将会多出来一段代码。

在Appli工程中,他将会暂时禁用系统滴答定时器并跳转到非安全域中进行初始化,不过不知道为什么在跳转过程中会出现异常,可能和非安全域那部分的配置有关系。

总之这段内容还得再研究一下,工程先使用安全域中进行。

编译完后可以找到两个二进制bin文件,分别是工程名_FSBL/Appli.bin。我们需要使用STM32CubeProgram工具对这两个文件进行签名和下载。

STM32_SigningTool_CLI.exe -bin F:CodeSTM32CodeSTM32N67XTemplate_Appli.bin -nk -of 0x80000000 -t fsbl -o F:CodeSTM32CodeSTM32N67XAppli-trusted.bin -hv 2.3 -dump F:CodeSTM32CodeSTM32N67XAppli-trusted.bin

在CMD命令行中输入上述代码,对指定文件进行签名,这里需要让STM32_SigningTool_CLI.exe的路劲添加到系统路径,否则就需要用绝对路径来寻址。

签名完成后就可以获得这两个签名文件(文件名是自己定的)

CubeProgram中下载算法选择STM32N6570DK的外部Flash下载算法。

开发板的BOOT1置高之后,将FSBL的bin文件(签名后)下载到0x70000000中,将Appli的代码下载到0x70100000中。然后将BOOT1重新设置为低电平,就可以从外部Flash启动代码了。

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录