标题: 关于stc15w单片机eeprom读取2个地址时错乱 [打印本页]

作者: 3花木城    时间: 2022-3-1 10:34
标题: 关于stc15w单片机eeprom读取2个地址时错乱
读写一个地址时,正常使用。读取2个地址时,会错乱,不知道原因,猜测是不是因为写之前要擦除一下,把另一个的也擦了?
举例:上电a=0x0400,b=0x0401,按键让a++,擦掉0x0400,写入数据a。这时b的数据就乱了
是地址不对?
还是擦的时候没有精准到单个地址?
作者: wulin    时间: 2022-3-1 12:08
按扇区操作(512字节),a,b....同时读出,修改a后再全部写回去。
作者: 天ノ忆    时间: 2022-3-1 13:10
我也遇到过这种问题,跟你现在状况很像,不过是用flash模拟eeprom,当时的是按半字写的,把一个变量x的值写到flash里,写完之后发现下一个地址的值也出问题了,而且导致程序中的某一个变量y也跟着出问题,最后解决办法是打开.map文件找到出错变量y的地址,发现上一个地址的内存存放的是变量x的值,x的大小是一个字节,由于是半字操作,也改变了下一块内存中y的值,所以导致y变化,
索这么多,我觉得可能是写的方式不对
作者: 3花木城    时间: 2022-3-1 13:11
wulin 发表于 2022-3-1 12:08
按扇区操作(512字节),a,b....同时读出,修改a后再全部写回去。

我现在是两个都擦,然后两个都写,再读回,就错了。
有规律的,都是少56,比如这次改好是456,,断电再上电,读就是400。我再百度找找原因
作者: 3花木城    时间: 2022-3-1 13:17
天ノ忆 发表于 2022-3-1 13:10
我也遇到过这种问题,跟你现在状况很像,不过是用flash模拟eeprom,当时的是按半字写的,把一个变量x的值写 ...

你的这个,如果只使用一个地址,能正常吗?我这个是STC芯片自带的EEPROM,用一个地址OK,一个以上就有问题,没找到原因
作者: 天ノ忆    时间: 2022-3-1 13:45
3花木城 发表于 2022-3-1 13:17
你的这个,如果只使用一个地址,能正常吗?我这个是STC芯片自带的EEPROM,用一个地址OK,一个以上就有问题 ...

我那是半字读写,肯定不正常的,
你可以打开keil的调试,单步运行,看看内存是怎么变化的
作者: 天ノ忆    时间: 2022-3-1 13:48
3花木城 发表于 2022-3-1 13:17
你的这个,如果只使用一个地址,能正常吗?我这个是STC芯片自带的EEPROM,用一个地址OK,一个以上就有问题 ...

不对,看错了, 因为是半字读写,所以地址不能是奇数,除此之外就没什么bug了
作者: wr520    时间: 2022-3-1 14:39
要看你的擦除模式是块擦除还是页面擦除,要注意看数据手册
作者: 3花木城    时间: 2022-3-1 16:36
解决了,根据2楼的建议,现在的方案是:
数据a,数据b,  a=读地址1, b=读地址2
如果:a++,擦地址1,a写入1,b写入2
如果:b++,擦地址2,a写入1,b写入2

就是擦地址后,所有的数据都写一下。
作者: npn    时间: 2022-3-1 17:25
单片机内置的EEPROM,不是真正的EEPROM,而是Flash闪存,只有字节读、字节写、没有字节擦除,只有扇区擦除,一次擦1扇区(512字节),二进制1写0不可逆,只有擦除才可以全部恢复为1,一次擦一扇区(512字节),被擦除的地址必须是512的倍数(可以为0),此问题新手高发,错误理解扇区结构导致异常。
作者: 3花木城    时间: 2022-3-1 17:49
npn 发表于 2022-3-1 17:25
单片机内置的EEPROM,不是真正的EEPROM,而是Flash闪存,只有字节读、字节写、没有字节擦除,只有扇区擦除 ...

嗯嗯,学习了,




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1