激流
发表于 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