LoginSignup
102
43

More than 3 years have passed since last update.

EEPROM/FLASHROM の書き込み回数が保証回数を超えた場合の挙動

Last updated at Posted at 2019-08-18

目的

EEPROM/FLASHROM を制御するマイコン側のエラー処理設計を行うため
書き込み保証回数を超えた書き込みを行った場合、どのようなエラーが発生するか検証した。

検証したEEPROM/FlashROM一覧

メーカ Type Size IF Manual
1 ROHM BR93L46 EEPROM 1Kbit(128byte) SPI *1 Link
2 Microchip 25LC010A EEPROM 1Kbit(128byte) SPI *2 Link
3 Atmel AT93C46D EEPROM 1Kbit(128byte) SPI *1 Link
4 FremontMicroDevices FT25C08A EEPROM 8Kbit(1KB) SPI *2 Link
5 ON Semiconductor‎ CAT25160VI EEPROM 16Kbit(2KB) SPI *2 Link
6 STMicroelectronics M93C56 EEPROM 2Kbit(256byte) SPI *1 Link
7 AVR (Arduino) ATmega328P EEPROM 8Kbit(1KB) Internal Link
8 Microchip SST25VF512A FlashROM 512Kbit(64KB) SPI *2 Link
9 winbond W25X20CLSNIG FlashROM 2Mbit(256Kbyte) SPI *2 Link
10 Cypress S25FL116K FlashROM 16Mbit(2MB) SPI *2 Link
11 Macronix MX25L512EMI FlashROM 512Kbit(64KB) SPI *2 Link
12 Renesas RL78/G13 FlashROM 32Kbit(4KB) Internal Link

*1 Intel ? / *2 JESD251

検証手順

  • RL78, Arduino 以外は全て mbed LPC1768 で制御した。
  • 一定の領域に同じ値を書き込んだ後に読みだして値が一致することを確認した。
  • 書き込む値は一致の確認後に1加算していき、一致しなかった時点で計測終了としている。
  • 不一致になった後100回読み出しを行った。
  • 処理時間の変化を調べるため消去・書き込み時間の最小・平均・最大時間も計測した。

結果:書き込み回数

仕様
保証年数
仕様
保証回数
計測結果
書き込めた回数
計測結果
現象
1 BR93L46 40 Years 1,000,000 9,559,002 データ不一致
2 25LC010A 200 Years 1,000,000 7,922,668 データ不一致
3 AT93C46D 100 Years 1,000,000 2,107,287 データ不一致
4 FT25C08A 100 Years 1,000,000 2,388,904 データ不一致
5 CAT25160VI 100 Years 1,000,000 6,521,290 データ不一致
6 M93C56 200 Years 25℃: 4,000,000
85℃: 1,200,000
18,529,259 データ不一致
7 ATmega328P 100 Years 100,000 8,158,577 データ不一致
8 SST25VF512A 100 Years Typ: 100,000
Min: 10,000
369,833 データ不一致
9 W25X20CLSNIG 20 Years 100,000 1,034,877 データ不一致
10 S25FL116K 2 Years
20 Years
100,000
10,000
690,000
800,314
消去未完了 *1
データ不一致
11 MX25L512EMI 20 Years 100,000 1,537,320 データ不一致
12 RL78(DataFlash) 1 Years
5 Years
20 Years
TYP: 1,000,000
100,000
10,000
19,474,131 データ不一致

*1 690,000前後の時点で消去がいつまでも完了しない現象が発生した。

結果:書き込み時間

最小、平均、最大時間に差があるものは分けて時間を記載している。

仕様 計測結果
回数=初期
計測結果
回数=破損時
書き込みサイズ
1 BR93L46 Max: 5.0ms 3.579ms 3.579ms 128byte
2 25LC010A Max: 5.0ms 3.176ms 3.189ms 16byte (1page)
3 AT93C46D Min: 0.1ms
Typ: 3.0ms
Max: 5.0ms
2.506ms 2.524ms 128byte
4 FT25C08A Max: 5.0ms 1.159ms 1.160ms 32byte
5 CAT25160VI Max: 5.0ms 1.373ms 1.374ms 32byte
6 M93C56 Max: 5.0ms 2.844ms 2.862ms 512byte(16bit x 256)
7 ATmega328P 3.6ms(1byte) 3.312ms(1byte)
106ms(32byte)
3.312ms(1byte)
106ms(32byte)
32byte
8 SST25VF512A 20us(1byte)
5.120ms(256byte)
5.414ms 5.415ms 256byte
9 W25X20CLSNIG Typ: 0.4ms
Max: 0.8ms
Min: 0.146ms
Avg: 0.296ms
Max: 0.304ms
Min: 0.165ms
Avg: 0.316ms
Max: 0.587ms
256byte (1page)
10 S25FL116K Typ: 0.7ms
Max: 3.0ms
0.579ms 0.585ms 256byte (1page)
11 MX25L512EMI Typ: 0.6ms
Max 3.0ms
Min: 0.172ms
Avg: 0.540ms
Max: 0.544ms
Min: 0.172ms
Avg: 0.540ms
Max: 0.544ms
256byte(1Page)
12 RL78(DataFlash) Typ: 11.750ms
Max: 115.824ms
11.124ms 11.124ms 256byte

結果:消去時間

今回の検証対象のうち消去が必要なのはFlashROMのみ。

仕様 計測結果
回数=初期
計測結果
回数=保証回数
計測結果
回数=破損時
消去
サイズ
8 SST25VF512A Max: 25ms Min: 16.48ms
Avg: 16.62ms
Max: 16.67ms
Min: 16.72ms
Avg: 16.72ms
Max: 16.74ms
Min: 16.69ms
Avg: 16.70ms
Max: 16.70ms
4KB
(Sector)
9 W25X20CLSNIG Typ: 30ms
Max: 300ms
Min: 40.75ms
Avg: 43.54ms
Max: 47.64ms
Min: 84.44ms
Avg: 94.84ms
Max: 110.89ms
Min: 541.24ms
Avg: 608.34ms
Max: 611.71ms
4KB
(Sector)
10 S25FL116K Typ: 50ms
Max: 450ms
Min: 43.04ms
Avg: 47.81ms
Max: 51.72ms
Min: 70.15ms
Avg: 77.55ms
Max: 86.78ms
Min: 235.81ms
Avg: 266.95ms
Max: 341.91ms
4KB
(Sector)
11 MX25L512EMI Typ: 40ms
Max: 200ms
Min: 27.81ms
Avg: 31.21ms
Max: 33.70ms
Min: 53.36ms
Avg: 57.96ms
Max: 63.98ms
Min: 827.19ms
Avg: 949.35ms
Max: 1,090.39ms
4KB
(Sector)
12 RL78(DataFlash) Typ: 6.15ms
Max: 273.59ms
Min: 5.75ms
Avg: 5.75ms
Max: 5.75ms
Min: 5.75ms
Avg: 5.82ms
Max: 11.10ms
Min: 209.72ms
Avg: 209.72ms
Max: 209.72ms
1KB
(Block)

結果:詳細

  • 保証回数の2~19倍書き込むことができ、保証回数を下回るものは無かった。
  • 消去・書き込み時間も保証回数内であれば仕様の最大時間を超えるものは無かった。
    ただし、保証回数を超えた場合、一部の FlashROM の消去時間が仕様を大幅に超えた。
    例:W25X20CLSNIG : 仕様Max 300ms、計測結果 611ms
  • 仕様の範囲内であっても FlashROM の消去時間は消去回数に比例して長くなる。
    下記は W25X20CLSNIG の消去回数と消去時間で、緑の縦線が最小保証回数である。
    8d05af2bfebbbe3eb86e5e4df69c1958.png
  • どの EEPROM/FLASHROM もbit単位で破損した。また破損するbit位置はチップごとに異なる。
  • AT93C46D や M93C56 は複数アドレスのbitが一度に破損した。
  • 破損時 AT93C46D, 25LC010A-IP などは0を書き込んだbitが1と読み出せた。
    MX25L512EMI, SST25VF512A などは1を書き込んだbitが0と読み出せた。
  • S25FL116K は消去も書き込みも完了せず、完了を待たずに読みだしたところ
    0x39を書いた全領域から0x00が読み出せた。
  • 破損後に消去/書き込みをリトライすると正常に消去/書き込みができたが、
    次の破損までの回数はチップごとに異なる。
    • EEPROM : M93C56 : 3回
    • EEPROM : AT93C46D : 44回
    • EEPROM : BR93L46 : 5,002回
    • FlashROM : MX25L512EMI : 369,439回
    • FlashROM : W25X20CLSNIG : 2回
  • 一度破損したbitはリトライ後でも最初にデータが破損した。
  • 破損後に複数回読み出すと正常な値の場合と、破損した値の場合があった。
    下記は W25X20CLSNIG が破損時に読み出しだけを繰り返したログで、
    1,2,3,9回目のみ期待値02が03に化けている。
    bff419f747328fe224eb11b28a984b86.png
    下記は AT93C46D が破損時に読み出しだけを繰り返したログで、期待値011Eが211Eに化けている。
    1be5e7e3111bc85cb2e8e75824dd381c.png

考察

EEPROM/FLASHROM のエラー処理設計を行うための考察。

  • 保証回数を超えると読み出すたびに正常値・異常値が変わるチップがあるため、
    保証回数を超える書き込みを行う設計は避けるべき。
    例えば「書き込み直後にベリファイして正常な間は書き込み続ける」ような設計にした場合
    ベリファイ時点では正常でも、次の読み出し結果が正常である保証はない。
  • 保証回数を超えた場合だが、消去/書き込みが完了しないチップがあったため、
    完了をポーリングする場合はタイムアウトを設けたほうがいいかもしれない。
  • 保証回数内であってもFlashROMの消去時間は消去/書き込み回数に比例して長くなるため、
    それを考慮して設計を行う必要がある。

補足

  • RL78の内蔵データフラッシュのように、消去・書き込み回数が増えると
    保持できる年数が減ると思われるが検証できていない。
  • 各種1つずつしか検証していないため個体差は検証できていない。
  • 当検証は保証回数内であればベリファイが不要であることを示す検証ではない。
    例えば、保証回数内であってもノイズで信号線のH/Lが変わり読み書きするデータが化ける可能性はある。

参考URL

102
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
102
43