找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3535|回复: 3
收起左侧

STC15F2K60S2的EEPROM使用心得

[复制链接]
ID:886887 发表于 2021-3-16 14:52 | 显示全部楼层 |阅读模式
本帖最后由 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
回复

使用道具 举报

ID:390416 发表于 2021-3-16 16:38 | 显示全部楼层
EEPROM  先读出来N字节   缓存 ,然后擦除整个扇区512字节    然后再重新写进去N字节
回复

使用道具 举报

ID:213173 发表于 2021-3-16 17:26 | 显示全部楼层
一个扇区512个字节不是256个字节。按地址修改某一个数据前要先把这个扇区的有效数据读出另存,改好另存的数据再删除整个扇区,把另存的数据存回去。
回复

使用道具 举报

ID:886887 发表于 2021-3-17 11:33 | 显示全部楼层
wulin 发表于 2021-3-16 17:26
一个扇区512个字节不是256个字节。按地址修改某一个数据前要先把这个扇区的有效数据读出另存,改好另存的数 ...

失误,写成256了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表