激流 发表于 2024-3-6 19:39:09

代码

激流 发表于 2024-3-6 19:39:57

                        { //IAP擦除/烧写标记字节
                                EA = 0; // !!!!!!!!!!关闭总中断
                                IapRead(512,Iap512Rd1,XRam512); //IAP读:512字节长度,EEPROM字节首地址,XRAM字节首地址
                                u16Acc = 0; //循环发送计数
                                u8Temp = 0; //正确擦除计数
L_WrFlage:
                                u16Acc++;
                                u16Temp = IcFlg - Iap512Rd0; //折算在1K EEPROM中的地址0000~0400
                                XRam512 = 0x00; IapWrite(1,u16Temp,XRam512); //IAP写0x00
                                if(u16Acc == 100){ RomIndex = IcFlg; SBUF = *RomIndex; TI = 0; while(TI == 0){;} TI = 0; } //清除已发送标志
                                XRam512 = 0xFF; IapWrite(1,u16Temp,XRam512); //IAP写0xFF
                                if(u16Acc == 200){ u16Acc = 0; RomIndex = IcFlg; SBUF = *RomIndex; TI = 0; while(TI == 0){;} TI = 0; } //清除已发送标志
                                if(RI){ RI = 0; goto L_RegAck; } //有接收退出标记,转注册数据应答
                                RomIndex = IcFlg;
                                if(0xFF == *RomIndex){ u8Temp = 0; goto L_WrFlage; } //继续烧写擦除循环
                                //if(0x00 != *IcFlg){ u8Temp = 0; goto L_WrFlage; } //复位计数,继续烧写擦除循环
                                u8Temp++;
                                if(u8Temp < 500){ goto L_WrFlage; } //擦除不成功计数500次
                                // ***** 标记结束 *****

WHX 发表于 2024-3-6 19:42:15

激流 发表于 2024-3-6 19:33
在STC8G1K17上做过类似测试(主频24MHz,读写周期约1mS),同一地址擦除后读出判断为0Xff否,写入0x00后读 ...

约8小时能擦写坏部分位?你这8小时约擦写的次数是多少?很感兴趣,想问一下!!{:4_250:}

激流 发表于 2024-3-6 19:47:08

每秒1000次*60秒*60分钟*8小时=28800000次

21cnsound 发表于 2024-3-6 21:13:14

激流 发表于 2024-3-6 19:47
每秒1000次*60秒*60分钟*8小时=28800000次

读写速度都是us级,但擦除一个扇区约5ms,每秒大概能擦除、写、读200次左右。
一小时200*60*60=72万次

21cnsound 发表于 2024-3-6 21:30:49

另外,因为是FLASH模拟的EEPROM,写操作只能将1改写为0,而擦除是将0或1“改写”为1。所以极限测试就是循环:
1、擦除一个扇区;2、该扇区512字节全部写入0;3、读该扇区判断每个字节是否都为0。
擦除一个扇区5ms左右,一个扇区512字节写入也需要大概5ms左右,读取一个扇区512字节并判断是否为0.xms。综合下来一个循环10ms左右,每秒100次,每小时36万次。

这个测试方案大家觉得是不是更合理?

feiyu 发表于 2024-3-6 21:51:32

21cnsound 发表于 2024-3-6 21:30
另外,因为是FLASH模拟的EEPROM,写操作只能将1改写为0,而擦除是将0或1“改写”为1。所以极限测试就是循环 ...

今天写了个测试的就是整个扇区512字节写入,我代码挂帖子上了

21cnsound 发表于 2024-3-6 21:52:55

feiyu 发表于 2024-3-6 21:51
今天写了个测试的就是整个扇区512字节写入,我代码挂帖子上了

严格测试要全写入0,再读出来判断是否为0

飞捷 发表于 2024-3-6 23:47:47

激流 发表于 2024-3-6 19:47
每秒1000次*60秒*60分钟*8小时=28800000次

擦除一个扇区需要几毫秒

飞捷 发表于 2024-3-6 23:50:45

21cnsound 发表于 2024-3-6 21:30
另外,因为是FLASH模拟的EEPROM,写操作只能将1改写为0,而擦除是将0或1“改写”为1。所以极限测试就是循环 ...

读一个字节是20US,所以读512个是20MS
页: 1 2 3 4 [5] 6 7 8 9 10 11
查看完整版本: 32G系列的DataFlash/EEPROM连续写入900W次了怎么还没挂,太辛苦了