ESP IoT Solution 存储媒介完全指南:SPI Flash、SD 卡、eMMC、USB 闪存盘与 EEPROM 选型与实战 📅 发布时间:2026/9/19 16:45:07 👁 浏览次数: ESP IoT Solution 存储媒介完全指南SPI Flash、SD 卡、eMMC、USB 闪存盘与 EEPROM 选型与实战【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址: https://gitcode.com/GitHub_Trending/es/esp-iot-solutionESP 系列芯片的存储方案选择直接决定产品的成本、容量与集成度。本文以 esp-iot-solution 存储方案文档 中「存储媒介」一节为核心骨架系统梳理 ESP 平台已支持的五大存储媒介SPI Flash、SD 卡、eMMC、USB 闪存盘、EEPROM的特性、传输模式、适用场景与芯片约束并结合仓库内的 AT24C02 驱动源码与测试用例深入讲解 EEPROM 从 I2C 总线初始化到字节/页读写的完整实现链路帮助你为参数存储、音视频文件存储等不同需求做出正确的选型决策并快速落地。存储媒介总览esp-iot-solution 文档将 ESP 平台已支持的存储媒介整理为下表。表格中「容量」「传输模式」「速度」三列给出了每种媒介的量级特征可直接作为选型的第一参考依据。名称关键特性应用场景容量传输模式速度驱动备注SPI Flash可与代码共用无附加成本参数存储、文本、图像存储MBSPI40/80 MHz 4 线SPI Flash Driver—SD 卡大容量、可插拔声音、视频文件存储GBSDIO/SPI20/40 MHz 1 线/4 线SD/SDIO/MMC Driver for SD*1eMMC大容量、高速读写声音、视频文件存储GBSDIO20/40 MHz 1 线/4 线/8 线SD/SDIO/MMC Driver for eMMC*2USB 闪存盘大容量、可插拔声音、视频文件存储GBUSB12 Mbps/480 MbpsUSB Host Driver*3EEPROM可按字节寻址低成本参数存储MBI2C100 ~ 400 kHzeeprom driver—使用上表时请注意以下芯片级约束对应表中的备注 *1、*2、*3*1SD 卡的 SDIO 模式仅在支持 SDIO 主机外设的 ESP 芯片如 ESP32、ESP32-S3上可用*2eMMC 的 SDIO 模式仅在支持 SDIO 主机外设的 ESP 芯片如 ESP32、ESP32-S3上可用*3USB 闪存盘仅在支持 USB-OTG 外设的 ESP 芯片如 ESP32-S2、ESP32-S3上可用。SPI Flash与代码共存的低成本存储ESP 系列芯片默认使用 NOR Flash 存取用户代码和数据Flash 可集成在模组或芯片中容量一般为 4 MB、8 MB 或 16 MB。由于可以直接使用主 Flash 芯片进行数据存储、无需额外添加存储芯片因此特别适合容量需求较小MB 级、集成度要求高、成本敏感的应用场景。用户可以通过分区表对 Flash 进行分区根据分区表的功能划分主 Flash 的指定空间可以作为非易失性存储NVS空间存放应用程序参数挂载到文件系统FatFS 等存放文本、图像等文件。Flash 芯片支持双线DOUT/DIO和四线QOUT/QIO等操作模式可通过配置工作在 40 MHz 或 80 MHz 模式。此外对于 ESP-IDF v4.0 以上版本SPI Flash 组件不仅支持使用主 Flash 进行用户数据存储同时可支持外接第二块 Flash 芯片进行数据存储。参考文档ESP-IDF 官方 APISPI Flash API、NVS Flash API、FatFS API。示例程序storage/nvs使用 NVS 进行参数存储storage/fatfs使用 FatFS 进行文件存储。与文件系统配合使用时NVS、FAT、SPIFFS、LittleFS 在容量限制、掉电保护、磨损均衡等方面的取舍可进一步参考仓库的文件系统指南。SD 卡可插拔的大容量方案ESP 系列芯片支持使用SDIO 接口或SPI 接口访问 SD 卡两者在速率与灵活性上各有取舍SDIO 接口支持 1 线、4 线或 8 线模式支持默认速率 20 MHz 或高速 40 MHz 等速率模式。需要注意的是SDIO 接口一般只能使用固定的引脚SPI 接口支持通过 GPIO matrix 为 SD 卡指定任意的 IO通过 CS 引脚可以支持对多个 SD 卡的访问。SPI 接口硬件设计上更加灵活但相比 SDIO 接口访问速率较低。ESP-IDF 中的SD/SDIO/MMC Driver基于 SD 卡的两种访问模式进行了协议层封装提供了 SD 卡的初始化接口和协议层 API。SD 卡具有大容量、可插拔的特点广泛适用于智能音响、电子相册等具有大容量存储需求的应用场景。参考文档ESP-IDF 官方 APISD/SDIO/MMC 驱动提供 SD 卡的初始化接口和协议层 APISDMMC 主机驱动提供 SDIO 模式的接口实现SD SPI 主机驱动提供 SPI 模式的接口实现使用 SPI 或 1-bit 模式时请注意引脚上拉需求SD 卡的引脚上拉要求。示例程序storage/sd_card——访问使用 FAT 文件系统的 SD 卡。eMMC高集成度的大容量存储eMMCembedded MMC内存芯片与 SD 卡具有相似的协议可以使用与 SD 卡相同的SD/SDIO/MMC 驱动。但有一个关键区别需要特别注意eMMC 芯片仅能使用 SDIO 模式不支持 SPI 模式。eMMC 一般以芯片的形式焊接到主板上相比 SD 卡集成度更高适用于可穿戴设备等具有大容量存储需求、同时对系统集成度有一定要求的场景。参考文档ESP-IDF 官方 APISD/SDIO/MMC 驱动已支持的 eMMC 速度模式。示例程序storage/emmc——访问使用 FAT 文件系统的 eMMC 存储。USB 闪存盘即插即用的大容量存储USB 闪存盘通过 USB 主机Host接口访问传输速率为 12 MbpsUSB Full Speed/ 480 MbpsUSB High Speed容量可达 GB 级主要用于声音、视频文件存储。其「大容量、可插拔」的特性与 SD 卡类似但受制于芯片外设能力仅可在支持 USB-OTG 外设的 ESP 芯片如 ESP32-S2、ESP32-S3上使用见总览表备注 *3。在仓库中USB 相关组件位于 components/usb 目录下如 iot_usbh 等 USB Host 组件对应的示例程序位于 examples/usb/host可结合 FAT 文件系统FatFS 与 VFS 配合实现对 USB 闪存盘上文件的读写。EEPROM按字节寻址的参数存储方案EEPROM如 AT24C0X 系列是 1024~16384 位的串行电可擦写存储器通过控制引脚电平也可运行在只读模式。其存储空间一般按照word进行分布每个word包含8-bit空间。EEPROM可按字节寻址读写操作简单特别适合保存配置参数等小数据经过优化也可应用于对功耗和可靠性有一定要求的工业和商业场景。已适配的 EEPROM 芯片名称功能总线供应商驱动AT24C01/021024/2048 bits EEPROMI2CAtmelAT24C02 driver仓库内已适配的驱动为 at24c02下文以该驱动为例展开源码级剖析。AT24C02 驱动接口与底层实现AT24C02 驱动构建在仓库的 i2c_bus 组件 之上头文件直接#include i2c_bus.h核心接口定义在 at24c02.h实现位于 at24c02.c。设备默认 I2C 地址定义在头文件中#define AT24C02_I2C_ADDRESS_DEFAULT (0x50) //1 0 1 0 A2 A1 A0 R/W0x50 对应地址位A2 A1 A0全为 0 的情况。AT24C01A/AT24C02 的 A2、A1、A0 引脚为硬件接线地址输入一条 I2C 总线上最多可寻址 8 个 1K/2K 器件见 AT24C02 README。驱动提供的 API 按功能分为三组全部封装自 i2c_bus 的底层接口1. 生命周期管理at24c02_handle_t at24c02_create(i2c_bus_handle_t bus, uint8_t dev_addr); esp_err_t at24c02_delete(at24c02_handle_t *device);at24c02_create()at24c02.c内部调用i2c_bus_device_create()在指定 I2C 总线上创建设备句柄并保存设备地址传入的bus为i2c_bus_create()的返回值。2. 字节读写按字节寻址esp_err_t at24c02_write_byte(at24c02_handle_t device, uint8_t addr, uint8_t data); esp_err_t at24c02_read_byte(at24c02_handle_t device, uint8_t addr, uint8_t *data);3. 连续多字节读写页读写esp_err_t at24c02_write(at24c02_handle_t device, uint8_t start_addr, uint8_t write_num, uint8_t *data_buf); esp_err_t at24c02_read(at24c02_handle_t device, uint8_t start_addr, uint8_t read_num, uint8_t *data_buf);多字节写实现中有一个必须注意的硬件限制at24c02.cif (write_num 8) { ESP_LOGW(TAG, must write_num 8, extra bytes will overwrite from byte 0 in this 8B page); }这是因为 AT24C01A/02 的 EEPROM 内部以8 字节页组织2K 器件内部由 32 页 × 8 字节构成采用 8 位数据字地址一次页写最多可传输 8 个数据字若超过 8 个4K/8K/16K 器件为 16 个数据字地址会「回卷」roll over之前写入的数据将被覆盖详见 AT24C02 README 的 Write Operations 一节。4. 位级读写可选esp_err_t at24c02_write_bit(at24c02_handle_t device, uint8_t addr, uint8_t bit_num, uint8_t data); esp_err_t at24c02_write_bits(at24c02_handle_t device, uint8_t addr, uint8_t bit_start, uint8_t length, uint8_t data); esp_err_t at24c02_read_bit(at24c02_handle_t device, uint8_t addr, uint8_t bit_num, uint8_t *data); esp_err_t at24c02_read_bits(at24c02_handle_t device, uint8_t addr, uint8_t bit_start, uint8_t length, uint8_t *data);bit_start取 0~70 为 MSBlength取 1~8便于在单个配置字节中操作标志位。初始化与读写实战基于测试用例仓库的测试用例给出了完整的初始化流程可直接作为业务代码模板i2c_config_t conf { .mode I2C_MODE_MASTER, .sda_io_num I2C_MASTER_SDA_IO, // 例GPIO1 .sda_pullup_en GPIO_PULLUP_ENABLE, .scl_io_num I2C_MASTER_SCL_IO, // 例GPIO2 .scl_pullup_en GPIO_PULLUP_ENABLE, .master.clk_speed I2C_MASTER_FREQ_HZ, // 例100000 (100 kHz) }; i2c_bus i2c_bus_create(I2C_MASTER_NUM, conf); at24c02 at24c02_create(i2c_bus, AT24C02_I2C_ADDRESS_DEFAULT);字节写读的往返验证at24c02_test.c展示了两个关键实践点写入后需要延时每次at24c02_write_byte()之后调用vTaskDelay(50 / portTICK_RATE_MS)以等待 EEPROM 内部写周期write cycle完成。AT24C02 数据手册给出的写周期典型值在几毫秒量级测试中留出 50 ms 余量写读回环校验写入数据后立即读回并用断言比对可快速验证器件与总线状态。硬件与电气特性要点根据 AT24C02 README 汇总的芯片关键特性电压等级支持 2.7VVCC 2.7V ~ 5.5V与 1.8VVCC 1.8V ~ 5.5V两档工作电压I2C 速率1.8V 下兼容 100 kHz2.7V/5V 下兼容 400 kHz对应总览表中 100 ~ 400 kHz 的速度范围页写模式1K/2K 为 8 字节页4K/8K/16K 为 16 字节页支持部分页写高可靠性擦写寿命 100 万次Endurance: 1 Million Write Cycles数据保持 100 年Data Retention: 100 Years写保护WPWP 引脚接地GND时允许正常读写WP 接 VCC 时启用硬件写保护。选型建议与常见问题如何选择存储媒介可按下述思路快速决策小容量参数存储KB 级首选 NVSSPI Flash 内部分区或 EEPROMAT24C02。需要按字节寻址、器件可独立更换或对功耗可靠性有要求时选 EEPROM希望零附加成本、直接利用主 Flash 时选 NVS文本/图像/中等容量文件存储MB 级使用主 Flash 或外接第二块 Flash配合 FAT/SPIFFS/LittleFS 文件系统音视频大容量存储GB 级在 SD 卡、eMMC、USB 闪存盘之间选择——需要可插拔选 SD 卡或 USB 闪存盘注意 USB 仅限支持 USB-OTG 的芯片需要高集成度、可焊接选 eMMCSD 卡的 SDIO 高速模式与 eMMC 均要求芯片具备 SDIO 主机外设如 ESP32、ESP32-S3。常见问题FAQ关于存储方案的更多问答请参考 ESP-FAQ 存储部分文件系统层NVS、FAT、SPIFFS、LittleFS的详细比较与设计建议见仓库的文件系统指南。【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址: https://gitcode.com/GitHub_Trending/es/esp-iot-solution创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考