本帖最后由 FSL_TICS_A 于 2014-10-21 15:29 编辑
[经验分享]K系列的EEPROM备份区是否可以小于16倍的EEPROM 一, 问题描述 今天遇到一个客户,问了这个问题,所以在此和大家分享下。 关于kinetis K系列的eeprom,大家都知道,是使用flexRAM以及flexNVM分区组合模拟而成,但是在flexNVM中到底分配多少空间给eeprom作为备份区呢?当然,分配的越大对于擦写寿命越有好处。 而最小又能分配多少呢? 从我们的reference manual中flash memory章节,看到这句话:
图1 意思就是,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 读写数据,断电后看是否还在。 结果显示,首次分区:
图 2 重新上电:
图3 四, 附件分享 |