1. EEPROM基础认知:什么是EEPROM、EEPROM与Flash的区别、按摩仪为何选择EEPROM

1.1 什么是EEPROM?

EEPROM,全称是Electrically Erasable Programmable Read-Only Memory。中文叫“电可擦除可编程只读存储器”。名字挺长,但说白了,就是一种掉电不丢数据的存储芯片。

我刚开始接触嵌入式时,总觉得这名字绕口。后来做项目多了,就记住了它的几个关键特点:

  • 按字节读写:你可以单独修改某一个字节,不用动其他数据。这在参数存储中非常灵活。
  • 掉电保持:数据写进去,断电十年八年还在。按摩仪的用户设置不会因为关机就丢失。
  • 擦写次数有限:通常10万次到100万次。嗯,这里要注意,别在循环里疯狂写,会磨坏的。

我在项目中遇到过一位同事,把EEPROM当RAM用,每秒写一次参数。结果产品用了三个月,参数就全乱了。后来查出来是EEPROM寿命到了。所以,EEPROM适合存“偶尔改一次”的数据,比如用户设定的按摩模式、力度等级。

核心理解:EEPROM就是一块“掉电不丢、能按字节改”的小容量存储。适合存配置参数、校准值、用户偏好。

1.2 EEPROM与Flash的区别

很多新手会问:EEPROM和Flash不都是掉电不丢吗?有什么区别?

我当年也困惑过。后来做了一次Bootloader升级,才彻底搞明白。直接看对比表:

对比项 EEPROM Flash
最小擦写单位 字节 扇区(通常512字节~4KB)
写入方式 直接改写 先擦除整个扇区,再写入
擦写寿命 10万~100万次 1万~10万次
读取速度 较慢(微秒级) 较快(纳秒级)
写入速度 较慢(毫秒级) 较快(微秒级)
典型容量 几KB~几百KB 几MB~几GB
成本 较高(每字节) 较低(每字节)

你想想看,Flash要改一个字节,得先把整个扇区读到RAM里,擦掉扇区,再把修改后的数据写回去。这多麻烦!而EEPROM直接写那个字节就行。

我曾经在一个项目中,用Flash存用户参数。用户改了一个力度值,结果整个扇区被重写,其他参数也跟着遭殃。后来换成EEPROM,问题就解决了。

个人经验:如果数据量小(< 512字节)、需要频繁改单个参数,选EEPROM。如果数据量大、需要快速读取,选Flash。

1.3 按摩仪为何选择EEPROM?

好,回到我们的按摩仪项目。为什么选EEPROM,而不是Flash或者SD卡?

原因其实很直接:

  1. 参数数据量小:按摩仪需要存什么?无非是:
    - 当前按摩模式(1字节)
    - 力度等级(1字节)
    - 定时时长(1字节)
    - 加热开关状态(1字节)
    - 用户自定义模式(几十字节)
    总共也就几十到几百字节。用EEPROM绰绰有余。
  2. 需要按字节修改:用户可能只改一个力度,其他不变。EEPROM直接写那个地址就行,不用动别的。
  3. 成本敏感:按摩仪是消费电子产品,成本控制很严。EEPROM芯片便宜,几毛钱到一两块钱就能搞定。
  4. 电路简单:EEPROM通常用I2C或SPI接口,两根线或四根线就能通信。PCB布线简单,不占空间。

我记得有一次做一款便携按摩仪,主控芯片内部自带了小容量EEPROM。连外部芯片都省了,直接在主控里划一块区域存参数。成本降到了最低。

避坑指南:我曾经遇到过一款按摩仪,用户频繁切换模式,导致EEPROM写入次数很快耗尽。后来我加了一个“写入限频”策略:只有参数变化超过一定阈值,或者关机前才写入。寿命直接翻了10倍。

所以,总结一下:按摩仪选EEPROM,是因为它“小、灵活、便宜、够用”。你想想看,用Flash存那几十字节的参数,就像用卡车运一箱牛奶,大材小用。而EEPROM就是那辆小三轮,刚刚好。

本章要点:

  • EEPROM按字节读写,掉电不丢数据
  • EEPROM适合小容量、频繁改单个参数
  • Flash适合大容量、批量读写
  • 按摩仪参数少、成本敏感,EEPROM是最优解

下一章,我们会深入EEPROM的硬件接口,看看I2C和SPI怎么选,以及实际电路怎么设计。到时候我会分享一个我踩过的坑——I2C上拉电阻选错了,导致通信不稳定。嗯,到时候细说。