Есть девайс с IMX6UL с NAND flash.
На разных платах одного и того же самого устройства возникают по одним и тем же адресам что в u-boot что в linux bad blocks
В загрузчике nand erase и nand scrub не помогают
[quote]NAND erase: device 0 offset 0x0, size 0x7000000
Skipping bad block at 0x06000000
Erasing at 0x6fe0000 -- 100% complete.
OK
Причина очевидна - ваш софт много пишет в один и тот же блок, от чего он и "заканчивается".
Для этого (чтобы запись происходила всегда в разные блоки) и используют JFFS2, UBIFS ...
/* DMA stuff, needed for GPMI/MXS NAND support */
#define CONFIG_APBH_DMA
#define CONFIG_APBH_DMA_BURST
#define CONFIG_APBH_DMA_BURST8
#endif
Есть еще маленький вопрос - есть какая нибудь условная "формула" по которой можно примерно прикинуть количество бед блоков с которым справится файловая система ? Например - у нас есть nand размером 128 мегабайт, большую часть времени она заполнена примерно на половину. Размер блока 128кбайта. Таким образом у нас на всю флешку 1024 блока. И при заполнении флешки на 50 % можно с увереностью сказать что если 30 % от всего объема будут bad blocks то файловая система с успехом "разрулит" данную ситуацию :) Такие рассуждения корректные ?
Спасибо!
Я таких формул не знаю (погуглите, может и найдете).
Думаю, гораздо надежней будет перейти на UBIFS, у нас на всех изделиях с NAND она устанавливается, подобных обращений нет.
никакие настройки убута тут не помогут - часть нанды где записаны статические данные не участвует в выравнивании износа, поэтому износ неравномерный и быстрый там где перезаписываемые данные