1. ESP32内部存储基础:Flash与EEPROM的关系
第一次接触ESP32的开发者可能会疑惑:为什么官方文档里说ESP32没有真正的EEPROM,但代码里却有个EEPROM库?这里其实涉及到嵌入式系统的一个经典设计模式——用Flash模拟EEPROM。我当年从STM32转到ESP32开发时,也被这个"假EEPROM"搞糊涂过,直到有一次产品突然断电导致参数丢失,才真正理解这种设计的精妙之处。
ESP32内部采用的是Flash存储介质,和我们手机里用的闪存芯片属于同一大类。与真正的EEPROM相比,Flash有两大特点:一是必须按扇区擦除(通常4KB为单位),二是每个存储单元的擦写寿命约1万次。而Arduino开发者熟悉的EEPROM,其典型擦写寿命是10万次以上,且支持单字节修改。为了解决这个矛盾,乐鑫的工程师在ESP-IDF中实现了Flash模拟EEPROM的方案,也就是我们使用的EEPROM库。
实际测试中我发现,这个模拟方案在地址0-4095范围内表现得就像真正的EEPROM一样。比如当你执行EEPROM.write(20, num)时,数据并不会立即写入Flash,而是先缓存在RAM中,只有调用EEPROM.commit()时才会统一写入。这种设计既避免了频繁擦写影响Flash寿命,又保持了EEPROM的易用性。不过要注意的是,每次commit都会实际擦写整个扇区,所以我的经验是:不要单独频繁保存小数据,应该批量修改后一次性提交。
2. 四步上手基础存储功能
2.1 环境准备与空间申请
先分享一个我踩过的坑:曾经因为没初始化EEPROM导致设备随机重启后数据错乱。正确的做法是在setup()中第一时间初始化存储空间。ESP32的EEPROM库使用非常简单,只需要两行关键代码:
#include <EEPROM.h>
void setup() {
EEPROM.begin(4096); // 申请4KB空间
}
这里的4096是个魔


338

被折叠的 条评论
为什么被折叠?



