找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1980|回復(fù): 15
收起左側(cè)

關(guān)于EEPROM扇區(qū)擦除的問題

[復(fù)制鏈接]
ID:95375 發(fā)表于 2022-8-9 19:54 | 顯示全部樓層 |閱讀模式

如果是擦除1個(gè)扇區(qū),那么是直接擦除就可以了,但是要擦除多個(gè)扇區(qū)呢,好像用重復(fù)的方法不好用,


                                                                        IapEraseSector(IAP_ADDRESS);        //清除內(nèi)存
                                                                        IapEraseSector(IAP_ADDRESS2);        //清除內(nèi)存
                                                                        IapEraseSector(IAP_ADDRESS3);        //清除內(nèi)存
在擦每個(gè)扇區(qū)間加個(gè)延時(shí)也不行



                                                                        IapEraseSector(IAP_ADDRESS);        //清除內(nèi)存
                                                                        delay1ms(20);//延時(shí)1ms
                                                                        IapEraseSector(IAP_ADDRESS2);        //清除內(nèi)存
                                                                        delay1ms(20);//延時(shí)1ms
                                                                        IapEraseSector(IAP_ADDRESS3);        //清除內(nèi)存
                                                                        delay1ms(20);//延時(shí)1ms



請教各位大神都是如何擦除EEPROM多個(gè)扇區(qū)的呢?


使用的芯片是:STC15F2k08S2、STC15F2k32S2
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2022-8-9 21:14 | 顯示全部樓層
        for(i=0;i<10;i++)//連續(xù)擦除10個(gè)扇區(qū)
        {
                IapEraseSector(i*0x0200);
        }
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2022-8-9 21:19 | 顯示全部樓層
  1. for(i=0;i<3;i++)
  2. {
  3.         IapEraseSector(IAP_ADDRESS+i*512);
  4. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-8-9 21:22 | 顯示全部樓層
IAP_CONTR | = 0x80;
IAP_CMD = 0x03;
IAP_ADDRH = ????;   //Epprom高位地址
IAP_TRIG = 0x5A;
IAP_TRIG = 0xA5;

一共就 5 句話,連續(xù) 刪除多個(gè)扇區(qū)的話,只要不斷重復(fù)后面三句就夠了。 你整那么花俏,最終關(guān)鍵代碼又不發(fā)出來,有啥用?
回復(fù)

使用道具 舉報(bào)

ID:57657 發(fā)表于 2022-8-9 21:33 | 顯示全部樓層
IAP_ADDRESS、IAP_ADDRESS2、IAP_ADDRESS3 是常量還是 變量? 具體請將程序貼完成。
回復(fù)

使用道具 舉報(bào)

ID:965189 發(fā)表于 2022-8-9 21:46 | 顯示全部樓層
STC15F2k08S2的EEPROM扇區(qū)地址是:0000h,到D3FFh.擦除要對應(yīng)地址。
回復(fù)

使用道具 舉報(bào)

ID:382454 發(fā)表于 2022-8-10 11:10 | 顯示全部樓層
官方有例程。用一個(gè)循環(huán)。
回復(fù)

使用道具 舉報(bào)

ID:1034262 發(fā)表于 2022-8-10 11:31 | 顯示全部樓層
正如“沙發(fā)”發(fā)的,一個(gè)for循環(huán)的事,一條調(diào)用語句即可。
回復(fù)

使用道具 舉報(bào)

ID:95375 發(fā)表于 2022-8-10 12:05 | 顯示全部樓層

謝謝,這樣簡單方便,通殺了
回復(fù)

使用道具 舉報(bào)

ID:95375 發(fā)表于 2022-8-10 12:09 | 顯示全部樓層

我原來想用0x0400開始后面的3個(gè)扇區(qū),用了以下for循環(huán)
#define IAP_ADDRESS 0x0400
        for(i=0;i<3;i++)
        {
                IapEraseSector(IAP_ADDRESS);
                IAP_ADDRESS=IAP_ADDRESS+0x0200;
        }

但存不住信息,斷電就沒了
對比你的代碼,受教了,謝謝,我這代碼應(yīng)也沒什么問題吧?
回復(fù)

使用道具 舉報(bào)

ID:95375 發(fā)表于 2022-8-10 12:11 | 顯示全部樓層
188610329 發(fā)表于 2022-8-9 21:22
IAP_CONTR | = 0x80;
IAP_CMD = 0x03;
IAP_ADDRH = ????;   //Epprom高位地址

你這直接在擦除函數(shù)里修改,不好維護(hù)和移植啊
回復(fù)

使用道具 舉報(bào)

ID:95375 發(fā)表于 2022-8-10 12:14 | 顯示全部樓層
coody_sz 發(fā)表于 2022-8-10 11:31
正如“沙發(fā)”發(fā)的,一個(gè)for循環(huán)的事,一條調(diào)用語句即可。

用過for的,發(fā)現(xiàn)不成功,以為是我的擦除方式錯(cuò)了,想請教一下連續(xù)擦除多個(gè)扇區(qū),擦每個(gè)扇區(qū)后要休息一下的嗎?還有如何檢驗(yàn)EEPROM有些扇區(qū)是不良的呢?
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2022-8-10 15:15 | 顯示全部樓層
liyago 發(fā)表于 2022-8-10 12:09
我原來想用0x0400開始后面的3個(gè)扇區(qū),用了以下for循環(huán)
#define IAP_ADDRESS 0x0400
        for(i=0;i

你這IAP_ADDRESS是宏定義的
你寫的代碼是 IAP_ADDRESS=IAP_ADDRESS+0x0200;
但編譯器看到的是0x0400=0x0400+0x0400;
當(dāng)然存不住信息
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2022-8-10 16:59 | 顯示全部樓層
注意:擦除是需要時(shí)間的。
時(shí)間不足時(shí),訪問它,你就會(huì)發(fā)現(xiàn)未擦干凈。等時(shí)間足夠了,再訪問就OK了。
回復(fù)

使用道具 舉報(bào)

ID:95375 發(fā)表于 2022-8-10 18:38 | 顯示全部樓層
lkc8210 發(fā)表于 2022-8-10 15:15
你這IAP_ADDRESS是宏定義的
你寫的代碼是 IAP_ADDRESS=IAP_ADDRESS+0x0200;
但編譯器看到的是0x0400=0x ...

明白了,又一個(gè)低級(jí)錯(cuò)誤,怎么會(huì)把這看成了變量,多謝了!
回復(fù)

使用道具 舉報(bào)

ID:57657 發(fā)表于 2022-8-10 20:44 | 顯示全部樓層
yzwzfyz 發(fā)表于 2022-8-10 16:59
注意:擦除是需要時(shí)間的。
時(shí)間不足時(shí),訪問它,你就會(huì)發(fā)現(xiàn)未擦干凈。等時(shí)間足夠了,再訪問就OK了。

是否擦干凈用 do while 進(jìn)行判斷,沒有字節(jié)擦除,只有扇區(qū)擦除,一次擦 512字節(jié)。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表