标题: STC15F2K60S2的EEPROM使用心得 [打印本页]

作者: Yuhun_Shen    时间: 2021-3-16 14:52
标题: STC15F2K60S2的EEPROM使用心得
本帖最后由 Yuhun_Shen 于 2021-3-16 15:59 编辑

       最近用到了STC15F2K60S2的EEPROM,用来存储一些需要掉电保存的数据。看了一下官方的手册和例程,例程提供了写1个字节函数void IapProgramByte(WORD addr, BYTE dat),读1个字节函数BYTE IapReadByte(WORD addr),擦除扇区函数void IapEraseSector(WORD addr),例程中是按扇区来操作的,1个扇区=256个字节,EEPROM的存储空间只有1K,若按扇区操作只能存储2个数据,所以我采用按地址操作。读完例程发现只需要用到两个函数:写一个字节函数和读一个字节函数,然后我就开始写函数测试了。然后......发现读取的值和写入的值不一样,经过多次测试发现每个地址第一次写入额值能成功读取出来,之后写入的值就不行了。继续翻手册读例程,发现在每次写入数据之前需要先擦除数据,那就先擦除再写入。然后新的问题又来了,我是按地址操作的,官方提供的擦除函数是按扇区操作的,一擦256个字节数据全没了.......
      对此我想了三个方法:
      1.在电路板上增加掉电检测电路,电源关闭时进行数据保存。但我的电路板已经做好了没法改了;
      2.实时存储数据,这个方法消耗单片机性能,而且EEPROM擦写次数是有限的,不建议用;
      3.数据有变化进行存储,不变化不存储。
综合来看方法3是最合适的,于是乎我又改了一下程序,单片机上电后读出EEPROM里的所有数据,当有数据变化后就把所有数据写入EEPROM。经过测试这个方法非常好




00.png (412.49 KB, 下载次数: 122)

00.png

作者: 人人学会单片机    时间: 2021-3-16 16:38
EEPROM  先读出来N字节   缓存 ,然后擦除整个扇区512字节    然后再重新写进去N字节
作者: wulin    时间: 2021-3-16 17:26
一个扇区512个字节不是256个字节。按地址修改某一个数据前要先把这个扇区的有效数据读出另存,改好另存的数据再删除整个扇区,把另存的数据存回去。
作者: Yuhun_Shen    时间: 2021-3-17 11:33
wulin 发表于 2021-3-16 17:26
一个扇区512个字节不是256个字节。按地址修改某一个数据前要先把这个扇区的有效数据读出另存,改好另存的数 ...

失误,写成256了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1