EEPROM(Electrically-Erasable Programmable Read-Only Memory)是一种非易失存储器,断电后数据不丢失。它可以在系统上电状态下通过电信号完成擦除和改写,支持字节级擦写,无需整片或整块擦除。按应用形态分为两类:外挂串行EEPROM(通过I2C、SPI或Microwire接口通信)和MCU片内集成的EEPROM。
底层工作原理
EEPROM的存储单元采用浮栅晶体管结构。浮栅被二氧化硅绝缘层包裹,电子可通过隧穿效应进入浮栅并被隔离保存,从而代表不同的比特状态。
编程(写入)时,片内电荷泵生成高压,利用Fowler-Nordheim(F-N)隧穿效应将电子注入浮栅,对应逻辑0。擦除时,施加反向高压将电子从浮栅抽出,恢复为逻辑1。读取操作则在普通低压下进行,通过检测晶体管的阈值电压来判断所存储的比特值。由于氧化层在反复隧穿过程中会逐渐老化,因此EEPROM存在擦写寿命上限。与老式EPROM相比,EEPROM完全通过电信号擦写,可在线改写,无需取下芯片用紫外线照射。
关键电气特性
EEPROM的擦写粒度为字节(Byte)级,部分型号支持页写,这是其核心优势——修改单个字节时不必擦除整片。擦写寿命通常在10万至100万次,工业级产品可达400万次。数据保存时间常温下不低于10至200年。工作电压范围一般为1.7V至5.5V,低电压版本可支持1.8V系统。写入操作需要几毫秒(ms级)时间,内部电荷泵工作时写电流偏大,但读电流很小,待机电流为微安(μA)级,适合电池供电设备。容量范围多在Kbit至4Mbit之间,普遍偏小,极少达到MB级别。
主流通信接口
I2C接口仅需SDA和SCL两根线,占用引脚最少,速率支持100k/400k/1MHz,通过A0-A2地址引脚可在同一总线上挂载最多8片器件,典型型号如AT24Cxx、M24Cxx,成本低廉。SPI接口使用SCLK、SI、SO和CS四根线,时钟最高可达20MHz,速度更快,部分型号带有硬件写保护WP引脚,适合需要较高吞吐量的场景,典型型号有AT25xx、M25xx。Microwire为三线接口(CLK、DI、DO、CS),属于较老式串行总线,目前使用较少。常见封装包括SOT-23-5、SOIC-8、TSSOP-8、DFN-8和WLCSP裸片,汽车级型号支持-40℃至+125℃宽温工作。
EEPROM与NOR Flash对比
EEPROM和NOR Flash同为非易失存储器,但差异明显。擦除最小单位上,EEPROM支持字节级擦除,而NOR Flash必须以扇区(通常4KB/8KB)为单位整块擦除后才能改写。擦写寿命方面EEPROM更高,可达10万至百万次,NOR Flash一般为10万次。容量上EEPROM较小,多为Kbit至Mbit级,NOR Flash容量大,可达MB级,适合存储固件代码。改写零星数据时,EEPROM可直接修改单个字节,无需擦除整块,而NOR Flash即使只改1字节也要先擦除整个扇区,软件开销大。单位bit成本EEPROM更高,NOR Flash密度高、成本更低。因此EEPROM典型用途为存储参数、校准值、配置信息和序列号,NOR Flash则用于存储固件程序和大段配置数据。
工程实践中,很多MCU内部没有硬件EEPROM,会用Flash模拟EEPROM(Flash-Emulated EEPROM),通过软件实现字节模拟,此时需特别注意寿命管理和磨损均衡算法。
典型应用场景
在嵌入式设备中,EEPROM用于存储设备序列号、校准参数、用户配置和阈值参数。汽车电子中用于传感器标定、故障码和ID信息存储。电池管理系统(如TI的BQ系列电量计)内部集成EEPROM保存电池参数。工控仪表用它掉电保存报警阈值和PID参数。此外,DIMM内存模组、硬件ID和加密小密钥存储也常用EEPROM实现。
硬件设计要点
使用I2C接口时,SDA和SCL必须外接上拉电阻;WP写保护引脚拉高后将禁止写入操作。写操作期间需要等待TWR(几毫秒),写完不能立刻发起下一次读写,否则写入会失败。电源引脚应就近放置0.1μF去耦电容,电源波动可能导致写入损坏。工业或汽车应用场景建议增加ESD防护。软件设计上不要频繁循环写同一个地址,以免快速耗尽擦写寿命;重要数据建议采用双备份机制。
优缺点总结
EEPROM的优点包括:非易失性,断电数据不丢失;字节级随机改写,修改少量数据非常灵活,无需擦除大片区域;擦写寿命高;接口简单,I2C占用引脚极少;宽电压供电,待机功耗低。
缺点包括:存储容量小,单位bit成本高于Flash;写操作需毫秒级,速度慢,读快写慢;存在擦写寿命上限,不能无限循环写入;不适合大容量存储场景,此类需求应改用Flash。
常见坑
开发人员常犯的错误包括:写完数据后未等待TWR写完成时间就立刻读取,导致读出旧数据;将Flash当作EEPROM直接使用,试图改写单个字节而不做扇区擦除,造成数据错乱;以及在程序中高频循环写同一个地址,快速耗尽器件寿命。
注:以上信息综合自网络及公开资料,仅供学习参考。