也不算 把 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#提到這個想法,我就順便說一下親身經歷,避免有人和我一樣中招。 |