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

Raspberry Pi Pico如何从配置文件读取持久化参数?

Raspberry Pi Pico 配置文件读写解决方案(无额外硬件)

核心问题

Pico默认的U盘模式(BOOTSEL)是bootloader专属功能,烧录UF2重启后会退出U盘模式运行用户程序,此时U盘内的文件无法被用户程序读取——这两种模式互斥,不能同时运行。

最简可行方案:用户程序内实现USB MSC + 内部Flash文件系统

直接利用Pico自带的2MB内部Flash,在用户程序中同时实现USB虚拟U盘功能和FAT文件系统,用户可通过USB修改配置文件,程序能直接读取Flash内的配置,断电数据持久保存,无需额外硬件。

步骤(新手友好)

  1. 基于SDK示例改造:打开Pico SDK中的usb_msc示例(路径pico-sdk/examples/device/usb_msc),该示例已实现用户程序内的USB虚拟U盘功能。
  2. 划分Flash区域:从2MB Flash末尾预留一块区域(比如512KB)作为配置存储区,避免覆盖程序代码。示例:#define FS_START_ADDR (PICO_FLASH_SIZE_BYTES - 512*1024)
  3. 集成FATFS文件系统:用SDK自带的FATFS库把预留Flash区域格式化为FAT分区,既可以通过USB MSC让用户修改config.txt,程序也能通过标准C文件API(fopen/fread)读取配置。
  4. 双功能并行:USB连接时Pico被识别为U盘,用户可修改配置;断开USB或程序运行时,正常读取配置参数。

关键代码片段

文件系统初始化与配置读取

#include "ff.h"
#include "pico/flash.h"

// 预留Flash末尾512KB作为配置存储区
#define FS_START_ADDR (PICO_FLASH_SIZE_BYTES - 512*1024)
#define FS_SIZE_BYTES (512*1024)

FATFS fs;

void init_fs() {
    // 挂载文件系统
    if (f_mount(&fs, "", 1) != FR_OK) {
        // 挂载失败,尝试格式化
        f_mkfs("", FM_FAT, 0, NULL, 0);
        f_mount(&fs, "", 1);
    }
}

void load_config() {
    FIL config_file;
    if (f_open(&config_file, "config.txt", FA_READ) == FR_OK) {
        char config_buf[256];
        UINT read_bytes;
        f_read(&config_file, config_buf, sizeof(config_buf)-1, &read_bytes);
        config_buf[read_bytes] = '\0';
        // 在这里解析配置参数(比如按行分割、键值对解析)
        f_close(&config_file);
    }
}

CMake依赖配置

在CMakeLists.txt中添加必要的库依赖:

target_link_libraries(your_project_name 
    pico_stdlib 
    tinyusb_device 
    fatfs
)

替代方案(适合无需频繁修改配置的场景)

如果不需要随时通过USB修改配置,可将配置文件与程序固件合并为一个UF2:

  • 用SDK的pico2uf2工具,把config.txt打包进Flash预留区域,用户烧录一次即可完成程序和配置的写入。修改配置时重新生成带新配置的UF2再烧录即可,实现简单但灵活性稍差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:01:19