• 正文
  • 相关推荐
申请入驻 产业图谱

从硬件电路到神经网络的STM32N6开发:烧录算法制作

21小时前
174
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

上一期我们介绍了自主参照 ST 官方参考设计制作的 STM32N6 硬件板卡,板载 W25Q256 串行 Flash 作为外部程序存储器,搭配 APS6404 实现外部 PSRAM 扩展。

这里我们先介绍一下为什么STM32N6需要搭载一颗外部Flash。

STM32N6 拥有高达 4.2MB 的片上 RAM,但是没有内置 Flash,这意味着芯片上电之后,内部不存在可以直接存放固件的存储区域。上电复位瞬间,MCU 无法从片内加载程序执行,必须依靠外部存储介质存放固件镜像。

从启动机制上来说,STM32N6 内置了系统启动 ROM(BootROM)。芯片上电后首先运行 FSBL,按照FSBL配置,去外接存储器件读取固件,拷贝到片内 RAM 或者外部 PSRAM 中,或者直接在Flash中运行代码。

那么如何将代码通过STM32N6烧录到Flash中就要涉及到STM32的烧录算法实现,本期我们就来介绍一下如何自制STM32N6烧录算法用以将代码代码正确的烧录到我们的自制Flash芯片中。

1、烧录算法的用处

很多使用传统STM32芯片的开发者基本感受不到“烧录算法”的存在。因为常规带内部Flash的STM32,出厂自带完整片内Flash驱动,STM32CubeProgrammer、KEIL、STM32CubeIDE等工具可以直接识别芯片、一键烧录,不需要用户额外配置。

但STM32N6是完全无片内Flash架构,所有程序、固件、资源全部依赖外置SPI Flash存储。这就导致官方默认烧录工具无法直接适配我们的自制板载W25Q256 Flash,必须依靠自定义Flash烧录算法才能完成固件烧写。

在STM32CubeProgramer中外部加载器就是对应的烧录算法。

2、CubeMX配置

首先在CubeMX中我们必须要让XSPI2(对应我们的Flash)在ExtMemLoader域使能。

XSPI2配置为四线SPI,大小对应我们的W25Q256,其他条件不用更改没事。

EXTMEM_LOADER扩展包为我们制作烧录算法的核心包。EXTMEM_MANAGER管理我们的外部存储,我们首先进入EXTMEM_MANAGER指定一下外部Flash。

Memory1为XSPI2设置为NOR_SFDP,之后进入EXTMEM_LOADER设置外部加载器(烧录算法)

指定烧录工具,存储区域,加载器名称,块区数量、大小、页大小等。在创建工程界面开启ExtMemLoader之后创建工程。

可以看到ExtMemLoader工程成功创建,其中的Postbulid.sh脚本为编译脚本并将烧录算法拷贝到CubeProgramer工具目录中。包括底层的QSPI读写都已经配置好了,这里不需要我们单独来配置。

运行postbulid.sh后就可以看到烧录算法已经生成并可以在CubeProgramer中找到了。

3、测试

在CubeProgramer中选择刚才生成的烧录算法,烧录我们的一个文件:

代码能够烧录离线运行即代表烧录算法实现成功。

相关推荐