很多的MCU控制器不带有片上EEPROM,但是我们有时候鉴于成本的考虑又不想外扩EEPROM,所以经常用Flash来模拟EEPROM存储,但是Flash都是块擦除,所以需要考虑频繁擦除的影响,需要借鉴软件算法来综合考虑,最近经常在使用NXP的KE系片子,KE系列除过KE02带有256字节的片上EEPROM外,KE04和KE06都不带片上EEPROM,所以我们采用Flash来模拟。
还好官方提供了很好的一篇参考笔记AN4903,可字节编程或字编程且可擦除的电可擦可编程只读存储器(EEPROM) 在汽车电子控制单元 (ECU) 中经常使用。编程和擦除操作的灵活性使得它适合用于断电时必须保留的以及在运行时需要单独更新的应用变量的数据存储。对于不带 EEPROM 存储器的设备,可以通过 EEPROM 仿真软件,使用页面可擦除的 Flash 存储器来仿真 EEPROM,一个可擦除 Flash 单元相当于一个扇区。由于 Flash 编程只能在已擦除的地址中进行,因此,在编程之前必须擦除 Flash 存储器。不使用软件算法直接在 Flash 中编程数据会导致频繁擦除 Flash,频繁的擦除会缩短 Flash 的寿命,增加数据写入的时间。在该笔记中提到的软件设计图(本图片来源于原应用笔记,版权归原作者所有)
此笔记描写很清楚,而且提供样例代码可以分方便的修改和移植到你自己的工程,
但是这个例程和驱动不是基于SDK的flash驱动,如果想使用SDK的flash驱动,需要修改一些接口参数和函数,这个难度不大,我们将他移植到KE06的SDK中测试下,
可以看到移植的工程可以正常工作,且使用Flash来模拟EEPROM也可以正常工作,完成移植的目的,运用于正式的工程和项目,还要做一些修改,根据实际定好起始地址,并且做些容错处理。所年前总结的三字经,再次送给大家。写的不好,勿喷。