也不算 把 0 写成 1, 感觉就是 里面电荷乱了,
试验的最初目的,是事先在Eeprom 里面存入 512个 值,用掉一个 清掉一个。
本来是认为,只要 我写0x00, 不管原来什么数据,都能清掉吧? 后来发现,永远清不完,才专门写了测试程序去做这样一个试验。然后发现,只要 非0xff的地方, 写入 0x00 90%以上都不会变 0x00 也不会保留原值,而是变成一个随机值, 有的地方1会变 0 有的地方会 0变1, 而一旦出现这种状况的 地址,在重新擦除之前,不管你怎么改写,都无法变成 0x00 或者 0xff, 基本上,尝试多次写入 任意值 之后, 用二进制来看, 会稳定的在类似: 01000000 和 00010010 这样的值之间变化。就是 大部分是0 有1~2个会是1,位置还会游走。
具体原因不清楚。也许是 Flash 的正常特性,也许是 STC 的 IAP 的漏洞缺陷? 总之, 差不多测试了 百来片(80片以上绝对有)的STC单片机,几乎覆盖STC全系列( 除了 STC16, STC32 没有测试过,) 这个问题一直存在。 关于手册上的, 只能把 1 写成 0,这个说法,和事实严重不符的问题,也反映过,总被他们按照“写入前必须擦除扇区” 来敷衍,从不给正面回答。
正好12#提到这个想法,我就顺便说一下亲身经历,避免有人和我一样中招。 |