標(biāo)題: 關(guān)于EEPROM扇區(qū)擦除的問題 [打印本頁]

作者: liyago    時(shí)間: 2022-8-9 19:54
標(biāo)題: 關(guān)于EEPROM扇區(qū)擦除的問題

如果是擦除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



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


使用的芯片是:STC15F2k08S2、STC15F2k32S2

作者: wulin    時(shí)間: 2022-8-9 21:14
        for(i=0;i<10;i++)//連續(xù)擦除10個(gè)扇區(qū)
        {
                IapEraseSector(i*0x0200);
        }
作者: lkc8210    時(shí)間: 2022-8-9 21:19
  1. for(i=0;i<3;i++)
  2. {
  3.         IapEraseSector(IAP_ADDRESS+i*512);
  4. }
復(fù)制代碼

作者: 188610329    時(shí)間: 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ā)出來,有啥用?
作者: npn    時(shí)間: 2022-8-9 21:33
IAP_ADDRESS、IAP_ADDRESS2、IAP_ADDRESS3 是常量還是 變量? 具體請(qǐng)將程序貼完成。
作者: 君工創(chuàng)    時(shí)間: 2022-8-9 21:46
STC15F2k08S2的EEPROM扇區(qū)地址是:0000h,到D3FFh.擦除要對(duì)應(yīng)地址。
作者: univers    時(shí)間: 2022-8-10 11:10
官方有例程。用一個(gè)循環(huán)。
作者: coody_sz    時(shí)間: 2022-8-10 11:31
正如“沙發(fā)”發(fā)的,一個(gè)for循環(huán)的事,一條調(diào)用語句即可。
作者: liyago    時(shí)間: 2022-8-10 12:05
wulin 發(fā)表于 2022-8-9 21:14
for(i=0;i

謝謝,這樣簡(jiǎn)單方便,通殺了
作者: liyago    時(shí)間: 2022-8-10 12:09
lkc8210 發(fā)表于 2022-8-9 21:19

我原來想用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;
        }

但存不住信息,斷電就沒了
對(duì)比你的代碼,受教了,謝謝,我這代碼應(yīng)也沒什么問題吧?
作者: liyago    時(shí)間: 2022-8-10 12:11
188610329 發(fā)表于 2022-8-9 21:22
IAP_CONTR | = 0x80;
IAP_CMD = 0x03;
IAP_ADDRH = ????;   //Epprom高位地址

你這直接在擦除函數(shù)里修改,不好維護(hù)和移植啊
作者: liyago    時(shí)間: 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ò)了,想請(qǐng)教一下連續(xù)擦除多個(gè)扇區(qū),擦每個(gè)扇區(qū)后要休息一下的嗎?還有如何檢驗(yàn)EEPROM有些扇區(qū)是不良的呢?
作者: lkc8210    時(shí)間: 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)然存不住信息
作者: yzwzfyz    時(shí)間: 2022-8-10 16:59
注意:擦除是需要時(shí)間的。
時(shí)間不足時(shí),訪問它,你就會(huì)發(fā)現(xiàn)未擦干凈。等時(shí)間足夠了,再訪問就OK了。
作者: liyago    時(shí)間: 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ì)把這看成了變量,多謝了!
作者: npn    時(shí)間: 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é)。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1