单片机里明明有FLASH,为啥还要再塞个EEPROM?不少刚接触嵌入式的小伙伴估计都有过这样的疑惑:FLASH能存程序,容量大,读取又快,干嘛还要加个读写慢、容量小的EEPROM?这不是多此一举嘛。其实,这俩兄弟各有所长,分工明确,就像你电脑里的固态硬盘和内存条,谁也替不了谁。
咱们先从最常用的场景说起。单片机里的FLASH,主要职责是“藏经阁”——存放程序代码。你想啊,你给单片机下载的程序,正常情况下是不是一辈子都不会变?上电就跑,跑完就停,下次上电还是那段代码。FLASH读起来确实快,但写入就费劲了,得按块擦除,一擦就是一整片,还不能单独改某个字节。这就好比你要改书里的一个字,得把整页撕掉重写,多麻烦。所以程序放FLASH里最合适,稳定、读取快,还不用老改动。
可程序跑起来总得记点啥吧?比如你玩游戏打到哪一关了、设置的温度阈值是多少、设备的序列号是啥——这些数据得在掉电后还能记住,而且经常要改。这时候EEPROM就闪亮登场了。它最大的优点就是能按字节读写,想改哪个字节就改哪个,不用动邻居。虽然读写速度慢点,但存个档、改个配置,谁在乎那几微秒呢?就像你玩游戏,读存档的时候等一小会儿无所谓,但要是游戏本身运行卡顿,那就没法玩了。所以EEPROM天生就是干这种“经常改、量不大”的活儿的。
还有个细节容易忽略:可靠性。EEPROM虽然是独立的区块,但硬件这东西,谁也不敢保证它永远不坏。万一哪天EEPROM全盘损坏了,你的设备难道就直接罢工了吗?好的程序设计会考虑到这一点:即使EEPROM废了,程序照样能跑,只是没法存档而已——顶多每次开机都是初始状态,总比变砖强。FLASH存着核心程序,一般不会轻易动它,所以可靠性更高。
当然,技术总是在进步的。现在有些单片机性能比较强悍,比如GD32的一些型号,它的FLASH支持在线擦写,而且擦写次数也提升了,甚至可以把一部分FLASH空间模拟成EEPROM用,这样就能省掉外挂的EEPROM芯片,降低成本。但即便这样,很多场合还是得老老实实加独立的EEPROM,因为FLASH的擦写寿命通常比EEPROM短(EEPROM可达百万次,FLASH一般万次左右),而且万一模拟过程中断电,数据可能就丢了。
所以说,FLASH和EEPROM在单片机里是各司其职的好搭档。一个负责“读书”,一个负责“记笔记”。除非哪天FLASH的性能强到能完美兼顾两者,不然它们还得继续搭伙过日子。
