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

描述

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 com11 write-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 com11 configure-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-image frdmmcxn947_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      

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

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分