Estoy desarrollando una puerta de enlace IoT basada en Linux. Utiliza el SPI-NOR XM25QH64A de Wuhan Xinxin Semiconductor Manufacturing Corp. (XMC) para el código y el entorno de U-Boot.
Intenté validar los 100,000 ciclos de borrado prometidos utilizando mtd_torturetest y el chip pasó, sin fallos después de los 100,000 borrados. Sin embargo, noté una gran desaceleración que se correlaciona con la edad / desgaste del chip.
Configuración:
- Pruebas en / dev / mtd4, que cubre los últimos 7 MB del chip de 8 MB y no es utilizado por el sistema
- comando de prueba:
modprobe mtd_torturetest dev=4 check=1
Salida:
[ 166.161126] =================================================
[ 166.161131] mtd_torturetest: Warning: this program is trying to wear out your flash, stop it if this is not wanted.
[ 166.161136] mtd_torturetest: MTD device: 4
[ 166.161146] mtd_torturetest: torture 32 eraseblocks (8-39) of mtd4
[ 166.161151] mtd_torturetest: write verify enabled
[ 166.161158] mtd_torturetest: not NAND flash, assume page size is 512 bytes.
[ 243.427246] mtd_torturetest: 00000050 erase cycles done, took 36050 milliseconds (36 seconds)
[ 280.315548] mtd_torturetest: 00000075 erase cycles done, took 36887 milliseconds (36 seconds)
...
[ 3742.105674] mtd_torturetest: 00002025 erase cycles done, took 49126 milliseconds (49 seconds)
...
[ 4691.458422] mtd_torturetest: 00002500 erase cycles done, took 51195 milliseconds (51 seconds)
...
[ 5463.849844] mtd_torturetest: 00002875 erase cycles done, took 51972 milliseconds (51 seconds)
...
[ 6718.711300] mtd_torturetest: 00003475 erase cycles done, took 53001 milliseconds (53 seconds)
...
[18178.338494] mtd_torturetest: 00008400 erase cycles done, took 62389 milliseconds (62 seconds)
...
[46128.911187] mtd_torturetest: 00018825 erase cycles done, took 71677 milliseconds (71 seconds)
Claramente, los ciclos de escritura toman más y más tiempo. Reinicié la puerta de enlace (y el procedimiento de prueba) para asegurarme de que no es un problema de software, pero la desaceleración persistió:
[ 304.845210] =================================================
[ 304.845216] mtd_torturetest: Warning: this program is trying to wear out your flash, stop it if this is not wanted.
[ 304.845222] mtd_torturetest: MTD device: 4
[ 304.845231] mtd_torturetest: torture 32 eraseblocks (8-39) of mtd4
[ 304.845235] mtd_torturetest: write verify enabled
[ 304.845243] mtd_torturetest: not NAND flash, assume page size is 512 bytes.
[ 376.246452] mtd_torturetest: 00000025 erase cycles done, took 71401 milliseconds (71 seconds)
...
[ 5663.115161] mtd_torturetest: 00001875 erase cycles done, took 71690 milliseconds (71 seconds)
... otro reinicio ...
[ 205.716263] =================================================
[ 205.716269] mtd_torturetest: Warning: this program is trying to wear out your flash, stop it if this is not wanted.
[ 205.716276] mtd_torturetest: MTD device: 4
[ 205.716283] mtd_torturetest: torture 32 eraseblocks (8-39) of mtd4
[ 205.716288] mtd_torturetest: write verify enabled
[ 205.716295] mtd_torturetest: not NAND flash, assume page size is 512 bytes.
[ 278.842049] mtd_torturetest: 00000025 erase cycles done, took 73124 milliseconds (73 seconds)
...
[83301.659780] mtd_torturetest: 00026050 erase cycles done, took 86188 milliseconds (86 seconds)
...
[108703.597314] mtd_torturetest: 00033250 erase cycles done, took 88897 milliseconds (88 seconds)
...
[110774.620888] mtd_torturetest: 00033825 erase cycles done, took 90337 milliseconds (90 seconds)
... otro reinicio ...
[ 928.809841] =================================================
[ 928.809846] mtd_torturetest: Warning: this program is trying to wear out your flash, stop it if this is not wanted.
[ 928.809853] mtd_torturetest: MTD device: 4
[ 928.809862] mtd_torturetest: torture 32 eraseblocks (8-39) of mtd4
[ 928.809866] mtd_torturetest: write verify enabled
[ 928.809874] mtd_torturetest: not NAND flash, assume page size is 512 bytes.
[ 1013.146420] mtd_torturetest: 00000025 erase cycles done, took 84336 milliseconds (84 seconds)
...
[16206.641935] mtd_torturetest: 00004025 erase cycles done, took 82979 milliseconds (82 seconds)
...
[26346.249059] mtd_torturetest: 00007050 erase cycles done, took 84719 milliseconds (84 seconds)
...
[63100.715963] mtd_torturetest: 00017625 erase cycles done, took 89182 milliseconds (89 seconds)
...
[91562.460719] mtd_torturetest: 00025525 erase cycles done, took 91651 milliseconds (91 seconds)
...
[158534.327566] mtd_torturetest: 00043200 erase cycles done, took 96795 milliseconds (96 seconds)
...
[165384.770426] mtd_torturetest: 00044950 erase cycles done, took 97316 milliseconds (97 seconds)
[165482.043904] mtd_torturetest: 00044975 erase cycles done, took 97273 milliseconds (97 seconds)
[165579.432831] mtd_torturetest: 00045000 erase cycles done, took 97388 milliseconds (97 seconds)
[165579.432845] mtd_torturetest: finished after 45000 erase cycles
[165579.432857] =================================================
Mi pregunta es: ¿es normal que el flash NOR se haga más lento (de 1.44 a 3.88 por ciclo de borrado) con el tiempo?