MCX产品系列是恩智浦凭借20多年来业界领先的Kinetis和LPC产品的实力,推出的新一代可扩展、安全且以开发人员为中心的微控制器。MCX产品基于ArmCortex-M内核,采用一系列核心技术,支持广泛的工业和物联网应用。MCX作为新一代带闪存的32位微控制器,提供了更强的产品功能,存储可扩展性,且封装选项广泛。简化系统设计为智能边缘提供了最佳启用和智能外围设备,包括机器学习、无线、语音、电机控制、模拟等。
MCX N94x是其中一款典型产品,具有灵活串行外设接口(FlexSPI)的控制器,支持外接存储器。外部flash储存容量大、灵活性高,且相对独立于主芯片的更换或升级,且具有较高的可靠性和寿命,但是与内部flash相比,其配置和使用是一个比较复杂的过程,对于初次使用的用户还是会有很大的阻碍,因此本文将会手把手教你配置外部NOR Flash的启动和烧写。
操作流程
本文以FRDM-MCXN947为例详细讲解如何配置外部flash的启动和烧写,主要包含以下三部分内容:
流程一:配置外部 Flash 启动
流程二:基于 MCUXpresso IDE 创建外部 Flash 工程
流程三:烧写到外部 Flash
硬件:FRDM-MCXN947开发板
软件:BlhostMCUXpresso IDE v11.8.1
流程一:配置外部Flash启动
(一)配置注意事项
配置MCXN947从外部flash启动的关键在于配置CMPA。CMPA是芯片内的一块可编程区域,也可以理解为芯片中的一块特殊flash,通过配置CMPA中BOOT_CFG[bits 31:0]->BOOT_SRC(bits 1:0),定义如下:
BOOT_SRC(bits 1:0)=
00/11:Internal flash
01:FlexSPI-A flash XIP image
10:Secondary Boot loader in Bank1 IFRO (32KB).
此处我们应配置为BOOT_CFG[bits 1:0]=0x01,手册要求设置高16位BOOT_CFG[bits 31:16]=0x5963,其他位默认为0x00。配置完成后bootROM会自动引导外部FlexSPI NOR flash启动。CMPA文件cmpa_flexspi.bin大小为512byte,存放在blhost.exe同一目录下,内容如下图:

(二)具体配置方法
我们可以使用两种方法配置CMPA:blhost工具或者使用API函数。
第一种方法: 使用blhost配置CMPA
1.进入ISP模式:按住FRDM-MCXN947开发板上SW3(ISP键)=>按住释放SW1(RESET键)=>释放SW3。
2.使用CMD命令打开blhost.exe。
3.命令行输入“blhost -p com11 -- get-property 1”检查是否成功进入ISP模式,进入ISP模式后,显示如下图:

4.将配置好的CMPA文件“cmpa_flexspi.bin”写入CMPA,CMPA区域的起始地址是从0x1004000开始的。在命令窗输入“blhost -p com11write-memory0x1004000 cmpa_flexspi.bin”,成功写入显示如下图:

5.通过命令窗输入“blhost -p com11 read-memory 0x1004000 0x100”还可以读出写入的内容,以确保正确写入,如下图:

6.成功配置CMPA从外部flash启动,按RESET键重启。
第二种方法:使用API:ffr_cust_factory_page_writ配置CMPA
ffr_cust_factory_page_write(config, page_data, seal_part);
该API用于将CMPA数据写入CMPA区域,使用时需注意应该在flash_init()和ffr_init()之后调用,包含了三个参数,芯片手册中对参数进行了详细的描述,如下图:
config:指向内存中flash_config_t数据结构的指针,用于存储驱动程序运行时状态。
page_data:指向用户存放cmpa数据的指针。
seal_part:如果设置为true或page_data包含非零CMAC数据,则计算CMPA CMAC并将其编程到CMPA区域。

详细代码请查看附件。
流程二:基于MCUXpresso IDE创建外部Flash工程
外部flash和内部flash工程配置有些不同,以MCUXpresso创建的工程为例进行介绍,其它IDE同理。
(一)注意事项
创建外部flash启动的工程,有两种情况,一种是在工程中配置FCB,另一种是在工程中并没有配置FCB。不同的情况对应不同的烧写方法。
(二)具体情况
第一种情况:工程中包含FCB
步骤1:配置FCB

步骤2:配置外部flash地址
当我们基于MCXN947芯片创建一个新工程时,默认放在内部flash(起始地址0x0),需要根据外部flash实际地址和大小进行配置,此处起始地址和空间大小如下图:

第二种情况:工程中不包含FCB:

流程三:烧写到外部Flash
通过上面两部分流程,外部flash启动和工程配置完毕,现在只需要把程序下载到外部flash中,程序就可以在外部flash启动运行起来。有两种下载方式,一种是使用blhost烧写,另一种是使用IDE烧写。
第一种方法:使用blhost烧写
(一)注意事项
通过blhost向外部flash烧写程序分为两种情况:
第一种是工程中没有配置FCB(不包含FCB的image),我们需要通过blhost对Flexspi接口以及FCB进行配置,配置完成后再将image写入flash;第二种是在工程内配置了FCB,我们只需要在配置Flexspi接口后,直接把程序写入flash(写入命令“flash-image xx.s19”),不需要配置FCB,此处必须使用SREC格式(xx.s19)或者.hex镜像文件。
(二)具体步骤
第一步:打开blhost命令窗
在blhost.exe文件夹下启动cmd,打开命令窗口。如下图:

第二步:进入ISP模式
前面我们已经配置好了CMPA,可以直接进入ISP模式,进行以下操作:按住SW3(ISP键)=>按住释放SW1(RESET键)=>释放SW3。
第三步:配置FlexSPI接口
分为以下两步:
1.在Blhost命令行输入“blhost -p com11 fill-memory 0x20020000 4 0xc0000001”,运行成功显示如下图:

2.在Blhost命令行输入“blhost -p com11configure-memory 0x9 0x20020000”,运行成功显示如下图:

第四步:配置FCB
注意:如果工程中已经配置了FCB,则不需要执行此步,直接跳到第五步。
分为以下三步:
1.在Blhost命令行输入“blhost -p com11 flash-erase-region 0x80000000 0x10000”,对外部flash进行擦除,运行成功显示如下图:

2.在Blhost命令行输入“blhost -p com11 fill-memory 0x20020000 4 0xf000000f”,运行成功显示如下图:

3.在Blhost命令行输入“blhost -p com11 configure-memory 0x9 0x20020000”,运行成功显示如下图:

第五步:将目标二进制文件下烧写到FlexSPI NOR flash中
(一)注意事项
如果工程中没有配置FCB,执行方法1,如果配置了FCB,执行方法2.
(二)具体方法
方法1:
把生成的.bin文件通过blhost“write-memory”进行写入。
在Blhost命令行输入
“blhost -p com11 write-memory 0x80001000 MCXN947_Project.bin”命令成功显示如下图:

方法2:
在blhost命令行输入“blhost -p com11 -- flash-imagefrdmmcxn947_hello_world_qspi_xip.s19”,成功显示如下图:

第六步:完成下载后,重新启动。
按下RESET,重新启动开发板,烧写到外部flash中的程序就启动运行。
第二种方法:MCUXpresso IDE一键下载
注意事项:此种方法只用于工程中配置了FCB的情况。
本节我们以官方demo“frdmmcxn947_hello_world_qspi_xip工程为例”,
从该工程中我们可以看到在“source”文件夹中的“mcxn_flexspi_nor_config.c”文件,里面对FCB进行了详细的配置,包含了对QSPI以及LUT的配置,如下图:

第一步:配置下载算法
FCB是放在flash偏移地址0X08000400开始用于FlexSPI NOR boot的头代码,在“MCU settings”我们可以看到QSPI_FLASH以及QSPI_FCB的起始地址及其大小,如下图:

“Driver”->“MCXN9xx_SFDP_FlexSPI.cfx”是MCXN9xx系列芯片的外部flash下载算法文件,通过该下载算法IDE可以直接将程序下载到外部flash。对于不同的芯片在MCUXpresso IDE中,我们可以点击“MCXN9xx_SFDP_FlexSPI.cfx”出现“…”按钮,打开就可以看到不同芯片的下载算法文件了,如下图:


MCUXpresso IDE默认自带了非常多的flash下载算法,文件后缀名是.cfx。即使是同一颗芯,可以看到其有多个.cfx可选,这分别对应了不同的flash种类以及与主芯片连接端口。
第二步:下载程序
点击编译那妞,编译成功后,点击“GUI Flash Tool”烧写,如下图:

成功烧写后,如图:

小结
综上,本文详细讲解了MCXN947外部flash的启动配置,并通过blhost和MCUXpresso IDE都可以成功的将程序烧写到外部flash。在用blhost工具下载时,需要注意工程中是否配置了FCB,下载步骤会有所不同。
作者:Alice Yang
恩智浦致力于打造安全的连接和基础设施解决方案,为智慧生活保驾护航。
-
FlaSh
+关注
关注
10文章
1715浏览量
154663 -
恩智浦
+关注
关注
14文章
6051浏览量
133984 -
烧写
+关注
关注
0文章
58浏览量
14816 -
N94
+关注
关注
0文章
2浏览量
5417 -
32位微控制器
+关注
关注
1文章
9浏览量
1962
原文标题:MCX N94x外部flash启动配置和烧写
文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
《电子发烧友电子设计周报》聚焦硬科技领域核心价值 第21期:2025.07.21--2025.07.25
《电子发烧友电子设计周报》聚焦硬科技领域核心价值 第20期:2025.07.14--2025.07.18
《电子发烧友电子设计周报》聚焦硬科技领域核心价值 第19期:2025.07.7--2025.07.11
《电子发烧友电子设计周报》聚焦硬科技领域核心价值 第18期:2025.06.30--2025.07.4
《电子发烧友电子设计周报》聚焦硬科技领域核心价值 第17期:2025.06.23--2025.06.27
如何在MCXN947微控制器上配置安全启动和生命周期
如何在MCXN947板的FlexSPI接口接HyperRAM
恩智浦MCU MCXN947 基于MCUXpresso Config tools创建IIC的教程步骤
MCXN947如何配置和外扩PSRAM?
MCXN947使用ADC并编写代码,总是报警告是怎么回事?
关于将Flash写入FRDM-MCXN947的问题求解
使用NXP MCX-N板卡搭建环境及点灯
恩智浦 MCX N系列之电源管理(MCX N94/54与MCX N23)

基于ArmCortex-M内核的MCXN947(MCX N94x)外部flash启动配置和烧写
评论