查看: 173|回复: 0

[分享] MCXN947使用外部的QSPI FLASH

[复制链接]
  • TA的每日心情

    3 天前
  • 签到天数: 73 天

    连续签到: 2 天

    [LV.6]常住居民II

    5

    主题

    102

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    439
    最后登录
    2025-8-22
    发表于 7 天前 | 显示全部楼层 |阅读模式

    MCXN947板卡使用外部的QSPI FLASH

    原理概述


    FRDM-MCXN947有内部RAM512KB2M的内部FLASH,板载容量大小为8MBQSPI FLASH,但FRDM-MCXN947出厂默认使用内部的FALSH,在一些代码容量较大的工程里面内部的FLASH容量会不够,因此需要将代码放在外部的QSPI FASLH里面原地执行。



    QSPI Flash 的通信基于命令 - 地址 - 数据的交互流程,由控制器(如 MCUCPU)通过 QSPI 接口发送指令,实现对 Flash 的读写、擦除、状态查询等操作,具体步骤如下:
    l 片选激活:控制器拉低 CS(片选)信号,选中目标QSPI Flash 设备。
    l 命令传输:控制器通过 DQ0 线发送 8 位命令(如读命令0x03、页写命令0x02),Flash 解析命令类型。
    l 地址传输:根据命令需求,控制器通过数据线(DQ0-DQ3)发送存储单元的地址(通常为 24 位或 32 位,取决于 Flash 容量)。
    l 数据传输:
    l 读操作:Flash 通过 DQ0-DQ3 将指定地址的数据传输给控制器。
    l 写操作:控制器通过 DQ0-DQ3 将数据写入 Flash 的指定地址(需先擦除对应区块)。
    l 片选释放:操作完成后,控制器拉高 CS 信号,结束本次通信。

    因此本文基于FRDM-MCXN947平台,实现分散加载功能,并将程序运行到外部的QSPI  FLASH中。

    开发环境
    适配开始之前,请确保已经准备好如下的环境:
    l Keil MDK5;
    l FRDM-MCXN947 SDK;
    l BLHost 2.6.7及以上版本。
    技术实现
    将下载的SDK进行解压缩操作,然后打开SDK里面的demo_app/hello_world_qspi_xip/cm33_core0,在这目录可以看到有两个boot引导的镜像,这两个镜像决定了FRDM-MCXN947使用的是内部的FLASH或者是使用外挂的QSPI FLASHNXP出厂默认使用的是内部的FLASH)。
    下载好BLHOST工具,打开命令提示符并导航到BLHost可执行文件文件夹(<BLHostroot>\bin\<OS environment>)。使用blhost配置CMPA@0x01004000中的BOOT_SRC。进入ISP模式,使blhost可以对CMPA进行编程。按住SW3ISP键)=>按住SW1 N9 RST键)=>释放SW3另一种进入ISP模式的方式。Nxpdebugmbox.exe-i pyocd ispmode -m 0

    使用Blhost -p COMxx write-memory 0x01004000<SDK_root>\boards\<EVK name>\demo_apps\hello_world_qspi_xip\cm33_core0\bootfromflexspi.bin

    注意:上述命令中的“xx”应替换为EVK的COM端口号。
    回到MDK对工程进行编译然后使用板载的MCU-LINK将代码下载到板子当中,观察实验,选择hello_world_qspi_xip工程在MDK编译,编译成功之后点击下载开发板当中。
    keil.png

    通过调试工具观察到,系统上电复位后,程序经复位向量表指引位(读取复位向量)并完成启动初始化流程后,最终跳转至main函数的地址经确认处于0x80003348 地址空间范围内。查阅该芯片数据手册的存储器映射章节,明确此地址范围(0x80000000 起始)为外部 QSPI Flash 的映射地址空间。
    debug.png
    退出debug模式,将代码下载到FRDM-MCXN947板卡当中,观察实验现象,现象是否和程序预期效果一致。
    xcom.png

    官方的Demo只提供了HelloWorld_XIP的工程,如果想要将XIP迁移到其它工程则需要将配置Flash的源程序copy到相应的工程里面,本文基于SDK历程中的led blink历程迁移XIP,将程序改为在外部的Flash中。
    打开led_blinky历程在目录下新建XIP文件夹,将Hello_World_XIP历程里面关于初始化的nor_flex_spid的文件和镜像引导的bootfromflash.binbootformflexspi.bin文件同步复制到copyXIP文件夹下
    打开MDK,将mcx_flexspi_nor_config.c和mcx_flexspi_nor_config.h添加到工程当中,也同时点击魔术棒在c/c++中将mcx_flexspi_nor_config.h添加到头文件目录当中。
    在keil的linker阶段中添加预处理的指令--predefine="-D__qspi_xip__=1",这个指令是将keil分散加载的时候将程序挂在在外部的qspi flash里面,在FRDM-MCXN947的分散加载文件中可以看到。
    分散加载文件.png

    misc controls添加预处理的文件之后就可以进行编译下载,观察实验的现象了。
    预处理.png
    通过调试工具观察到,系统上电复位后,程序经复位向量表指引位(读取复位向量)并完成启动初始化流程后,最终跳转至main函数的地址经确认处于0x80003348 地址空间范围内。查阅该芯片数据手册的存储器映射章节,明确此地址范围(0x80000000 起始)为外部 QSPI Flash 的映射地址空间。
    led_binky.png
    将程序下载到FRDM-MCXN947板卡,下载成功之后将程序进行复位操作,观察板卡上的LED灯是否和一致,1s闪烁一次。到此板卡完成了XIP的程序迁移。
    n.png


    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-25 05:07 , Processed in 0.080378 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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