基于Pico-SDK,如何通过Raspberry Pi Pico W的BOOTSEL模式读写配置文件?
Raspberry Pi Pico W 通用UF2+外置配置方案解决思路
BOOTSEL模式文件消失的核心原因
BOOTSEL模式下电脑挂载的是Pico出厂的临时引导分区,这个分区是Flash中专门用于UF2固件烧录的区域,重启后会被固件运行环境覆盖,所以复制的配置文件无法持久化保存。
可行解决方案
1. 用Pico-SDK创建专属持久化FAT分区(推荐)
完全可以实现1MB左右的专用FAT分区,步骤如下:
- 调整Flash分区布局:在项目的
CMakeLists.txt中,通过PICO_FLASH_SIZE_BYTES定义总Flash大小,同时预留出独立的配置分区(比如把最后1MB划出来)。例如,默认2MB Flash的话,可将前1MB用于固件和OTA,后1MB作为配置分区。 - 挂载分区并读写配置:使用Pico-SDK集成的
FATFS或littlefs文件系统库,在固件启动时挂载这个配置分区,读取其中的JSON配置文件。 - 实现自定义USB MSC模式:自己开发USB Mass Storage功能,当设备触发特定模式(比如按住GPIO引脚对应的按键开机)时,将配置分区暴露给电脑,此时就能像U盘一样复制配置文件进去,重启后固件直接读取该分区的文件。
- 注意:BOOTSEL模式是硬件级的出厂引导模式,无法修改它的挂载逻辑,所以必须通过自定义USB模式来实现配置文件的持久化传输。
2. 外接SPI SD卡读取配置
这是最直接的替代方案:
- 利用Pico W的SPI引脚外接SD卡模块,通过Pico-SDK的
FATFS库读取SD卡根目录下的JSON配置文件。 - 优势:配置文件容量无限制,更换、修改配置无需操作设备固件;劣势:需要额外硬件,增加单设备成本和部署复杂度。
3. USB串口传递配置
- 固件启动后,若检测到无有效配置,自动进入串口配置模式。通过PC端工具(比如Python脚本)向设备发送JSON配置,固件接收后将配置写入Flash的非引导分区持久化。
- 适合多设备批量部署,无需额外硬件,仅需串口工具即可完成配置。
4. 配网+OTA配置推送
- 刷入通用UF2固件后,设备若未检测到配置,自动进入WiFi配网模式(比如通过手机APP配网),连接到指定网络后,通过MQTT或HTTP从服务器拉取对应设备的唯一标识和WiFi配置,写入Flash保存。
- 后续OTA升级时,可同步推送配置更新,适合大规模设备的远程管理。
关键开发注意事项
- 所有配置文件必须写入Flash的非BOOTSEL分区,避免被固件烧录或BOOTSEL模式覆盖。
- 使用Pico-SDK的
flash.hAPI操作Flash时,需遵循Flash的擦除块大小(Pico Flash为4KB擦除块),确保数据写入安全。 - 自定义USB MSC模式时,要设置明确的触发条件(比如按键组合),避免和BOOTSEL模式冲突。
内容的提问来源于stack exchange,提问作者Lasse Michael Mølgaard
相关产品推荐
相关产品推荐

