找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1498|回复: 15
收起左侧

关于EEPROM扇区擦除的问题

[复制链接]
ID:95375 发表于 2022-8-9 19:54 | 显示全部楼层 |阅读模式

如果是擦除1个扇区,那么是直接擦除就可以了,但是要擦除多个扇区呢,好像用重复的方法不好用,


                                                                        IapEraseSector(IAP_ADDRESS);        //清除内存
                                                                        IapEraseSector(IAP_ADDRESS2);        //清除内存
                                                                        IapEraseSector(IAP_ADDRESS3);        //清除内存
在擦每个扇区间加个延时也不行



                                                                        IapEraseSector(IAP_ADDRESS);        //清除内存
                                                                        delay1ms(20);//延时1ms
                                                                        IapEraseSector(IAP_ADDRESS2);        //清除内存
                                                                        delay1ms(20);//延时1ms
                                                                        IapEraseSector(IAP_ADDRESS3);        //清除内存
                                                                        delay1ms(20);//延时1ms



请教各位大神都是如何擦除EEPROM多个扇区的呢?


使用的芯片是:STC15F2k08S2、STC15F2k32S2
回复

使用道具 举报

ID:213173 发表于 2022-8-9 21:14 | 显示全部楼层
        for(i=0;i<10;i++)//连续擦除10个扇区
        {
                IapEraseSector(i*0x0200);
        }
回复

使用道具 举报

ID:161164 发表于 2022-8-9 21:19 | 显示全部楼层
  1. for(i=0;i<3;i++)
  2. {
  3.         IapEraseSector(IAP_ADDRESS+i*512);
  4. }
复制代码
回复

使用道具 举报

ID:624769 发表于 2022-8-9 21:22 | 显示全部楼层
IAP_CONTR | = 0x80;
IAP_CMD = 0x03;
IAP_ADDRH = ????;   //Epprom高位地址
IAP_TRIG = 0x5A;
IAP_TRIG = 0xA5;

一共就 5 句话,连续 删除多个扇区的话,只要不断重复后面三句就够了。 你整那么花俏,最终关键代码又不发出来,有啥用?
回复

使用道具 举报

ID:57657 发表于 2022-8-9 21:33 | 显示全部楼层
IAP_ADDRESS、IAP_ADDRESS2、IAP_ADDRESS3 是常量还是 变量? 具体请将程序贴完成。
回复

使用道具 举报

ID:965189 发表于 2022-8-9 21:46 | 显示全部楼层
STC15F2k08S2的EEPROM扇区地址是:0000h,到D3FFh.擦除要对应地址。
回复

使用道具 举报

ID:382454 发表于 2022-8-10 11:10 | 显示全部楼层
官方有例程。用一个循环。
回复

使用道具 举报

ID:1034262 发表于 2022-8-10 11:31 | 显示全部楼层
正如“沙发”发的,一个for循环的事,一条调用语句即可。
回复

使用道具 举报

ID:95375 发表于 2022-8-10 12:05 | 显示全部楼层

谢谢,这样简单方便,通杀了
回复

使用道具 举报

ID:95375 发表于 2022-8-10 12:09 | 显示全部楼层

我原来想用0x0400开始后面的3个扇区,用了以下for循环
#define IAP_ADDRESS 0x0400
        for(i=0;i<3;i++)
        {
                IapEraseSector(IAP_ADDRESS);
                IAP_ADDRESS=IAP_ADDRESS+0x0200;
        }

但存不住信息,断电就没了
对比你的代码,受教了,谢谢,我这代码应也没什么问题吧?
回复

使用道具 举报

ID:95375 发表于 2022-8-10 12:11 | 显示全部楼层
188610329 发表于 2022-8-9 21:22
IAP_CONTR | = 0x80;
IAP_CMD = 0x03;
IAP_ADDRH = ????;   //Epprom高位地址

你这直接在擦除函数里修改,不好维护和移植啊
回复

使用道具 举报

ID:95375 发表于 2022-8-10 12:14 | 显示全部楼层
coody_sz 发表于 2022-8-10 11:31
正如“沙发”发的,一个for循环的事,一条调用语句即可。

用过for的,发现不成功,以为是我的擦除方式错了,想请教一下连续擦除多个扇区,擦每个扇区后要休息一下的吗?还有如何检验EEPROM有些扇区是不良的呢?
回复

使用道具 举报

ID:161164 发表于 2022-8-10 15:15 | 显示全部楼层
liyago 发表于 2022-8-10 12:09
我原来想用0x0400开始后面的3个扇区,用了以下for循环
#define IAP_ADDRESS 0x0400
        for(i=0;i

你这IAP_ADDRESS是宏定义的
你写的代码是 IAP_ADDRESS=IAP_ADDRESS+0x0200;
但编译器看到的是0x0400=0x0400+0x0400;
当然存不住信息
回复

使用道具 举报

ID:123289 发表于 2022-8-10 16:59 | 显示全部楼层
注意:擦除是需要时间的。
时间不足时,访问它,你就会发现未擦干净。等时间足够了,再访问就OK了。
回复

使用道具 举报

ID:95375 发表于 2022-8-10 18:38 | 显示全部楼层
lkc8210 发表于 2022-8-10 15:15
你这IAP_ADDRESS是宏定义的
你写的代码是 IAP_ADDRESS=IAP_ADDRESS+0x0200;
但编译器看到的是0x0400=0x ...

明白了,又一个低级错误,怎么会把这看成了变量,多谢了!
回复

使用道具 举报

ID:57657 发表于 2022-8-10 20:44 | 显示全部楼层
yzwzfyz 发表于 2022-8-10 16:59
注意:擦除是需要时间的。
时间不足时,访问它,你就会发现未擦干净。等时间足够了,再访问就OK了。

是否擦干净用 do while 进行判断,没有字节擦除,只有扇区擦除,一次擦 512字节。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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