一, 问题描述
今天遇到一个客户,问了这个问题,所以在此和大家分享下。
关于kinetis K系列的eeprom,大家都知道,是使用flexRAM以及flexNVM分区组合模拟而成,但是在flexNVM中到底分配多少空间给eeprom作为备份区呢?当然,分配的越大对于擦写寿命越有好处。而最小又能分配多少呢?
从我们的reference manual中flash memory章节,看到这句话:
[size=0.83em]1.jpg (75.62 KB, 下载次数: 0)
下载附件
[color=rgb(153, 153, 153) !important]2014-5-20 17:05 上传
0
|
|
|
|
意思就是,eeprom的备份区至少为flexRAM中eeprom大小的16倍,有些客户就想,如果使用的产品的flexNVM是32K, flexRAM是2K,然后配置EEPROM的大小为2K,那么16倍的eeprom的备份区就得要32K,则整个的flexNVM就都作为了备份区,这样就没有data flash区了。能否配置小点的eeprom备份区,从而留出部分的dataflash呢?
二, 问题解答
其实,通过测试,也不一定要配置备份区为16倍的eeprom,当然,不能将备份区配置为0,这样eeprom就无法工作了。但是,如果备份区大小小于16倍的eeprom,那么相关eeprom的数据就不能直接参考datasheet了,datasheet的数据是备份区在16倍eeprom以上的。而且,擦写寿命肯定会缩短,具体缩短为多少,就没有定量了。所以,如果需要保证擦写寿命的话,建议大家还是使用16倍以上的备份区。
另外,由于模拟eeprom的技术,其实是需要每个字节至少16个字节的备份区,如果少于的话,在实际长期使用中,可能会出现写方面的问题,所以如果大家考虑到稳定性,最好还是备份16倍以上,如果读写次数不高的话,可以直接使用flash的方式读写,这样就会减低因为备份区的问题带来的风险。
|
|
|
|
|
三, 测试结果
本文以TWR-K20D70M开发板为测试平台,芯片为MK20DX256VLL7,测试是否可以使用小于16倍备份区的eeprom。该芯片的flexNVM为32KB, 地址为0x1000_0000 –0x1000_7FFF,flexRAM的大小为2KB,地址范围为:0x1400_0000 –0x1400_07FF。
配置eeprom大小(flexRAM)为2KB,配置flexNVM中的eeprom的备份区为16KB, dataflash也为16KB.
则,就需要配置FCC0B4=0x33, FCCOB5=0X02
代码功能是,在如下地址:
#define LONGWORD_COUNTER_ADDR 0x14000040
#define WORD_COUNTER_ADDR 0x14000044
#define BYTE_COUNTER_ADDR 0x14000046
#define BYTE_LAST_ADDR 0x14000700
读写数据,断电后看是否还在。
结果显示,首次分区:
|
|
|
|
|
重新上电:
|
|
|
|
|
四, 附件分享
附件给出了测试代码,以及文档,并且加上一个eeprom的应用笔记,需要的网友可以拿去。 |
|
|
|
|
|