You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

nRF52840使用mcuboot与USB大容量存储时的编译错误问题

解决方案:QSPI闪存上MCUBOOT+USB大容量存储编译及功能冲突问题

1. 核心问题定位

你遇到的问题本质是MCUBOOT与FATFS闪存分区的资源冲突:未配置MCUBOOT时,flash-disk节点可以直接映射整个QSPI闪存;启用MCUBOOT后,QSPI闪存会被划分为boot分区、固件槽区和存储区,若flash-disk未指定正确的未占用分区,就会触发编译冲突;移除flash-disk节点则会导致FATFS无挂载载体,进而无法识别USB存储。

2. 分区配置修正(Overlay文件)

保留zephyr,flash-disk节点,但明确指定其映射到MCUBOOT未占用的QSPI存储分区,示例DTS配置如下:

&qspi {
    status = "okay";
    flash@0 {
        status = "okay";
        partitions {
            compatible = "fixed-partitions";
            #address-cells = <1>;
            #size-cells = <1>;

            // MCUBOOT引导分区
            boot_partition: partition@0 {
                label = "mcuboot";
                reg = <0x00000000 0x00010000>; // 64KB,按需调整
            };
            // 固件槽0(主固件区)
            slot0_partition: partition@10000 {
                label = "image-0";
                reg = <0x00010000 0x000E0000>; // 896KB,按需调整
            };
            // 固件槽1(升级备用区)
            slot1_partition: partition@f0000 {
                label = "image-1";
                reg = <0x000F0000 0x000E0000>; // 896KB,按需调整
            };
            // FATFS存储分区(必须避开以上所有区域)
            storage_partition: partition@1d0000 {
                label = "storage";
                reg = <0x001D0000 0x00E30000>; // 剩余全部空间,按需调整
            };
        };
    };
};

// 绑定flash-disk到存储分区
&flashdisk {
    compatible = "zephyr,flash-disk";
    flash = <&storage_partition>;
    status = "okay";
};

3. 编译冲突消除(prj.conf配置)

确保配置项无冲突,同时启用必要功能:

// 基础硬件配置
CONFIG_SPI=y
CONFIG_SPI_QSPI=y
CONFIG_FLASH=y
CONFIG_FLASH_QSPI_W25QXX=y // 替换为你的QSPI闪存型号驱动

// MCUBOOT配置
CONFIG_BOOTLOADER_MCUBOOT=y
CONFIG_MCUBOOT_DFU_BLE=y
CONFIG_MCUBOOT_DFU_USB=y
CONFIG_MCUBOOT_FLASH_DEV_NAME="flash@0" // 指定QSPI闪存作为MCUBOOT载体

// USB大容量存储+FATFS配置
CONFIG_USB=y
CONFIG_USB_DEVICE_STORAGE=y
CONFIG_FATFS=y
CONFIG_DISK_ACCESS=y
CONFIG_FLASH_DISK=y
CONFIG_FATFS_LFN=y // 可选,支持长文件名

4. 调试验证步骤

  • 清理构建缓存后重新编译:west build -t clean && west build
  • 烧录后查看串口日志,确认以下关键信息:
    • flashdisk初始化成功日志
    • FATFS挂载成功提示(如FATFS: mounted on disk)
    • USB大容量存储类枚举成功日志
  • 若仍无法识别USB存储,检查QSPI闪存的硬件连接及驱动初始化日志,排除硬件故障。

内容的提问来源于stack exchange,提问作者Swetha Macherla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:22:16