查看: 427|回复: 1

[原创] MCX N94x外部flash启动配置和烧写

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20039
最后登录
2024-4-26
发表于 2024-2-21 10:48:55 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2024-2-21 10:48 编辑

MCX N94x外部flash启动配置和烧写
一、MCX概述
MCX产品系列是恩智浦凭借20多年来业界领先的Kinetis和LPC产品的实力,推出的新一代可扩展、安全且以开发人员为中心的微控制器。MCX产品基于Arm®Cortex®-M内核,采用一系列核心技术,支持广泛的工业和物联网应用。MCX作为新一代带闪存的32位微控制器,提供了更强的产品功能,存储可扩展性,且封装选项广泛。简化系统设计为智能边缘提供了最佳启用和智能外围设备,包括机器学习、无线、语音、电机控制、模拟等。
MCX N94x是其中一款典型产品,具有灵活串行外设接口(FlexSPI)的控制器,支持外接存储器。外部flash储存容量大、灵活性高,且相对独立于主芯片的更换或升级,且具有较高的可靠性和寿命,但是与内部flash相比,其配置和使用是一个比较复杂的过程,对于初次使用的用户还是会有很大的阻碍,因此本文将会手把手教你配置外部NOR Flash的启动和烧写。

二、操作流程
本文以FRDM-MCXN947为例详细讲解如何配置外部flash的启动和烧写,主要包含以下三部分内容:
硬件:FRDM-MCXN947开发板

三、流程一:配置外部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同一目录下,内容如下图:
             图片1.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模式后,显示如下图:
图片2.png

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

5.通过命令窗输入“blhost -pcom11 read-memory 0x1004000 0x100”还可以读出写入的内容,以确保正确写入,如下图:
图片4.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()之后调用,包含了三个参数,芯片手册中对参数进行了详细的描述,如下图:
图片5.png
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
图片6.png


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


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

图片8.png

五、流程三:烧写到外部Flash
通过上面两部分流程,外部flash启动和工程配置完毕,现在只需要把程序下载到外部flash中,程序就可以在外部flash启动运行起来。有两种下载方式,一种是使用blhost烧写,另一种是使用IDE烧写。
第一种方法:使用blhost烧写
(一)注意事项
通过blhost向外部flash烧写程序分为两种情况:
第一种是工程中没有配置FCB(不包含FCB的image),我们需要通过blhost对Flexspi接口以及FCB进行配置,配置完成后再将image写入flash;第二种是在工程内配置了FCB,我们只需要在配置Flexspi接口后,直接把程序写入flash(写入命令“flash-imagexx.s19”),不需要配置FCB,此处必须使用SREC格式(xx.s19)或者.hex镜像文件。
(二)具体步骤
第一步:打开blhost命令窗
在blhost.exe文件夹下启动cmd,打开命令窗口。如下图:
图片9.png
第二步:进入ISP模式
前面我们已经配置好了CMPA,可以直接进入ISP模式,进行以下操作:按住SW3(ISP键)=>按住释放SW1(RESET键)=>释放SW3。
第三步:配置FlexSPI接口
分为以下两步:
1.在Blhost命令行输入“blhost -p com11 fill-memory 0x20020000 4 0xc0000001”,运行成功显示如下图:
图片10.png
2.在Blhost命令行输入“blhost -p com11 configure-memory 0x9 0x20020000”,运行成功显示如下图:
图片11.png
第四步:配置FCB
注意:如果工程中已经配置了FCB,则不需要执行此步,直接跳到第五步。
分为以下三步:
1.在Blhost命令行输入“blhost -pcom11   flash-erase-region 0x800000000x10000”,对外部flash进行擦除,运行成功显示如下图:
图片12.png
2.在Blhost命令行输入“blhost -p com11 fill-memory 0x20020000 4 0xf000000f”,运行成功显示如下图:
图片13.png
3.在Blhost命令行输入“blhost -p com11 configure-memory 0x9 0x20020000”,运行成功显示如下图:
图片14.png
第五步:将目标二进制文件下烧写到FlexSPI NOR flash中
(一)注意事项
如果工程中没有配置FCB,执行方法1,如果配置了FCB,执行方法2.
(二)具体方法
方法1:
把生成的.bin文件通过blhost“write-memory”进行写入。
在Blhost命令行输入
“blhost -p com11 write-memory 0x80001000 MCXN947_Project.bin”命令成功显示如下图:
图片15.png
方法2:
在blhost命令行输入“blhost -p com11 -- flash-image frdmmcxn947_hello_world_qspi_xip.s19”,成功显示如下图:
图片16.png
第六步:完成下载后,重新启动。
按下RESET,重新启动开发板,烧写到外部flash中的程序就启动运行。

第二种方法: MCUXpresso IDE一键下载
注意事项:此种方法只用于工程中配置了FCB的情况。
本节我们以官方demo“frdmmcxn947_hello_world_qspi_xip工程为例”,
从该工程中我们可以看到在“source”文件夹中的“mcxn_flexspi_nor_config.c”文件,里面对FCB进行了详细的配置,包含了对QSPI以及LUT的配置,如下图:
图片17.png
第一步:配置下载算法
FCB是放在flash偏移地址0X08000400开始用于FlexSPI NOR boot的头代码,在 “MCU settings”我们可以看到QSPI_FLASH以及QSPI_FCB的起始地址及其大小,如下图:
图片18.png
上图中“Driver”->“MCXN9xx_SFDP_FlexSPI.cfx”是MCXN9xx系列芯片的外部flash下载算法文件,通过该下载算法IDE可以直接将程序下载到外部flash。对于不同的芯片在MCUXpresso IDE中,我们可以点击“MCXN9xx_SFDP_FlexSPI.cfx”出现“…”按钮,打开就可以看到不同芯片的下载算法文件了,如下图:
图片19.png 图片20.png
MCUXpresso IDE默认自带了非常多的flash下载算法,文件后缀名是.cfx。即使是同一颗芯,可以看到其有多个.cfx可选,这分别对应了不同的flash种类以及与主芯片连接端口。
第二步:下载程序
点击编译那妞,编译成功后,点击“GUI FlashTool”烧写,如下图:
图片21.png
成功烧写后,如图:
图片22.png

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

flexspi_boot_enabler.zip (1.57 KB, 下载次数: 1)
回复

使用道具 举报

  • TA的每日心情
    开心
    2022-1-4 14:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    172

    帖子

    0

    高级会员

    Rank: 4

    积分
    571
    最后登录
    2024-4-26
    发表于 2024-3-25 16:24:53 | 显示全部楼层
    学习了
    每天登陆学习一下
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-27 19:11 , Processed in 0.127669 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表