0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

恩智浦MCU加油站 来源:恩智浦 2025-06-26 09:55 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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同一目录下,内容如下图:

3fec3d02-5228-11f0-b715-92fbcf53809c.png

(二)具体配置方法

我们可以使用两种方法配置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模式后,显示如下图:

4000b6b0-5228-11f0-b715-92fbcf53809c.png

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

400e3646-5228-11f0-b715-92fbcf53809c.png

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

4024663c-5228-11f0-b715-92fbcf53809c.png

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区域。

4038d2f2-5228-11f0-b715-92fbcf53809c.png

详细代码请查看附件。

流程二:基于MCUXpresso IDE创建外部Flash工程

外部flash和内部flash工程配置有些不同,以MCUXpresso创建的工程为例进行介绍,其它IDE同理

(一)注意事项

创建外部flash启动的工程,有两种情况,一种是在工程中配置FCB,另一种是在工程中并没有配置FCB。不同的情况对应不同的烧写方法。

二)具体情况

第一种情况:工程中包含FCB

步骤1:配置FCB

4049bb1c-5228-11f0-b715-92fbcf53809c.png

步骤2:配置外部flash地址

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

405e766a-5228-11f0-b715-92fbcf53809c.png

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

4073e45a-5228-11f0-b715-92fbcf53809c.png

流程三:烧写到外部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,打开命令窗口。如下图:

40867a70-5228-11f0-b715-92fbcf53809c.png

第二步:进入ISP模式

前面我们已经配置好了CMPA,可以直接进入ISP模式,进行以下操作:按住SW3(ISP键)=>按住释放SW1(RESET键)=>释放SW3。

第三步:配置FlexSPI接口

分为以下两步:

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

4095b31e-5228-11f0-b715-92fbcf53809c.png

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

40a6e8dc-5228-11f0-b715-92fbcf53809c.png

第四步:配置FCB

注意:如果工程中已经配置了FCB,则不需要执行此步,直接跳到第五步。

分为以下三步:

1.在Blhost命令行输入“blhost -p com11 flash-erase-region 0x80000000 0x10000”,对外部flash进行擦除,运行成功显示如下图:

40b726d4-5228-11f0-b715-92fbcf53809c.png

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

40c6a4b0-5228-11f0-b715-92fbcf53809c.png

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

40d87cd0-5228-11f0-b715-92fbcf53809c.png

第五步:将目标二进制文件下烧写到FlexSPI NOR flash中

(一)注意事项

如果工程中没有配置FCB,执行方法1,如果配置了FCB,执行方法2.

(二)具体方法

方法1:

把生成的.bin文件通过blhost“write-memory”进行写入。

在Blhost命令行输入

“blhost -p com11 write-memory 0x80001000 MCXN947_Project.bin”命令成功显示如下图:

40eb123c-5228-11f0-b715-92fbcf53809c.png

方法2:

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

4101cee6-5228-11f0-b715-92fbcf53809c.png

第六步:完成下载后,重新启动。

按下RESET,重新启动开发板,烧写到外部flash中的程序就启动运行。

第二种方法:MCUXpresso IDE一键下载

注意事项:此种方法只用于工程中配置了FCB的情况。

本节我们以官方demo“frdmmcxn947_hello_world_qspi_xip工程为例”,

从该工程中我们可以看到在“source”文件夹中的“mcxn_flexspi_nor_config.c”文件,里面对FCB进行了详细的配置,包含了对QSPI以及LUT的配置,如下图:

411d062a-5228-11f0-b715-92fbcf53809c.png

第一步:配置下载算法

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

41373392-5228-11f0-b715-92fbcf53809c.png

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

414a67f0-5228-11f0-b715-92fbcf53809c.png

415bc19e-5228-11f0-b715-92fbcf53809c.png

MCUXpresso IDE默认自带了非常多的flash下载算法,文件后缀名是.cfx。即使是同一颗芯,可以看到其有多个.cfx可选,这分别对应了不同的flash种类以及与主芯片连接端口。

第二步:下载程序

点击编译那妞,编译成功后,点击“GUI Flash Tool”烧写,如下图:

4174c27a-5228-11f0-b715-92fbcf53809c.png

成功烧写后,如图:

4187145c-5228-11f0-b715-92fbcf53809c.png

小结

综上,本文详细讲解了MCXN947外部flash的启动配置,并通过blhost和MCUXpresso IDE都可以成功的将程序烧写到外部flash。在用blhost工具下载时,需要注意工程中是否配置了FCB,下载步骤会有所不同。

作者:Alice Yang

恩智浦致力于打造安全的连接和基础设施解决方案,为智慧生活保驾护航。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1715

    浏览量

    154663
  • 恩智浦
    +关注

    关注

    14

    文章

    6051

    浏览量

    133984
  • 烧写
    +关注

    关注

    0

    文章

    58

    浏览量

    14816
  • N94
    N94
    +关注

    关注

    0

    文章

    2

    浏览量

    5417
  • 32位微控制器

    关注

    1

    文章

    9

    浏览量

    1962

原文标题:MCX N94x外部flash启动配置和烧写

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    FLASH/编程白皮书

    白皮书:如何Flash——不同场景不同需求下的选择认识Flash NAND vs. NOR如何
    发表于 07-28 16:05 0次下载

    《电子发烧友电子设计周报》聚焦硬科技领域核心价值 第21期:2025.07.21--2025.07.25

    、Docker进行自定义数据集训练? https://www.elecfans.com/d/6771345.html 10、基于ArmCortex-M内核MCXN947MCX
    发表于 07-25 20:03

    《电子发烧友电子设计周报》聚焦硬科技领域核心价值 第20期:2025.07.14--2025.07.18

    /6771345.html 10、基于ArmCortex-M内核MCXN947MCX N94x外部
    发表于 07-18 21:36

    《电子发烧友电子设计周报》聚焦硬科技领域核心价值 第19期:2025.07.7--2025.07.11

    自定义数据集训练? https://www.elecfans.com/d/6771345.html 10、基于ArmCortex-M内核MCXN947MCX
    发表于 07-11 20:36

    《电子发烧友电子设计周报》聚焦硬科技领域核心价值 第18期:2025.06.30--2025.07.4

    /6771345.html 7、基于ArmCortex-M内核MCXN947MCX N94x外部
    发表于 07-04 19:37

    《电子发烧友电子设计周报》聚焦硬科技领域核心价值 第17期:2025.06.23--2025.06.27

    检测电阻的高频失真难题 https://www.elecfans.com/d/6756099.html 4、基于ArmCortex-M内核MCXN947MCX
    发表于 06-27 18:24

    如何在MCXN947微控制器上配置安全启动和生命周期

    本文档旨在介绍如何在MCXN947微控制器上配置安全启动和生命周期,以确保产品在量产阶段的安全性,防止代码被窃取和篡改,并且能够安全地升级更新固件。通过本应用笔记,开发者可以更好地理解和实施安全
    的头像 发表于 06-26 09:49 2069次阅读
    如何在<b class='flag-5'>MCXN947</b>微控制器上<b class='flag-5'>配置</b>安全<b class='flag-5'>启动</b>和生命周期

    如何在MCXN947板的FlexSPI接口接HyperRAM

    MCXN947芯片是一款高度集成的微控制器,具有强大的处理能力、丰富的外设支持和高级安全特性,适用于多种复杂应用。其中有个非常重要的外设为FlexSPI。
    的头像 发表于 06-04 09:39 1722次阅读
    如何在<b class='flag-5'>MCXN947</b>板的FlexSPI接口接HyperRAM

    恩智浦MCU MCXN947 基于MCUXpresso Config tools创建IIC的教程步骤

    MCXN947是NXP推出的高性能微控制器,支持丰富的通信接口,如I2C。借助MCUXpresso Config Tools,开发者可快速配置I2C外设,生成初始化代码。该工具提供图形化界面,简化
    的头像 发表于 05-22 09:40 1794次阅读
    恩智浦MCU <b class='flag-5'>MCXN947</b> 基于MCUXpresso Config tools创建IIC的教程步骤

    MCXN947怎么驱动FRDM-STBI-A8974三轴陀螺仪?

    MCXN947怎么驱动FRDM-STBI-A8974三轴陀螺仪
    发表于 04-14 10:50

    MCXN947如何配置和外扩PSRAM?

    mcxn947自带的ram太小了,无法满足需求,想外扩一块psram,比如乐鑫的esp-psram64芯片,这个需求有哪个案例可以参考吗?
    发表于 03-31 06:54

    MCXN947使用ADC并编写代码,总是报警告是怎么回事?

    我使用 MCXN947,我想使用 ADC 并编写代码,但警告总是发生。然后我创建了一个新项目进行调试,它仍然发生了。 我试着打扫,但还是没用。 警告:无法将 \'main\' 从主机编码 (CP1252) 转换为 UTF-32。 这通常不会发生,请提交 bug 报告。
    发表于 03-20 08:17

    关于将Flash写入FRDM-MCXN947的问题求解

    这次我想问一个关于使用 MCXN947Flash 写入另一个板的问题。 我尝试使用 FRDM-MCXN947 的写入方法作为参考写入此板,但发生了错误。 下面是当时控制台的内容。 NXP
    发表于 03-17 06:29

    使用NXP MCX-N板卡搭建环境及点灯

    FRDM-MCXN947开发板是一个基于MCXN947器件的低成本设计的评估板。MCXN947器件将两个Arm Cortex-M33微控制器和神经处理单元(NPU)集成在一个封装中。
    的头像 发表于 02-12 09:07 1669次阅读
    使用NXP <b class='flag-5'>MCX-N</b>板卡搭建环境及点灯

    恩智浦 MCX N系列之电源管理(MCX N94/54与MCX N23)

    给大家揭秘MCX N系列在电源管理方面的卓越性能。电源管理对于硬件设计的优化以及低功耗应用的实现至关重要,因此,深入了解MCX N系列的电源管理机制对于开发者而言意义非凡。同时小编也列
    的头像 发表于 12-05 09:49 2082次阅读
    恩智浦 <b class='flag-5'>MCX</b> <b class='flag-5'>N</b>系列之电源管理(<b class='flag-5'>MCX</b> <b class='flag-5'>N94</b>/54与<b class='flag-5'>MCX</b> <b class='flag-5'>N</b>23)