Ник:
Пароль:

Контакты

Cтатус Skype: starterkit.ru
тел.: (+7 3412) 478-448
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
E-mail: info@starterkit.ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » FAQ
Bad block
Pavel Ivanchenko
Добавлено 08.04.2010 14:40 Редактировалось 08.04.2010 14:40
0
Сообщение: 1
Pavel Ivanchenko
Admin
4.45

Пункты: 83618
Регистрация: 24.03.2009
Пол: Мужчина
Не редко задают вопрос: "почему при загрузке Linux проскакивает сообщение о Bad bock".
Это относится к природе NAND flash, которая разбита на блоки, а блоки на страницы, чтение-запись осуществляется страницами, а стирается блоками (отвлекся).
Bad block, это блок, который в результате очистки выдал ошибку и был помечен (в запасной области) как не пригодный для использования.
Сам производитель гарантирует лишь максимальное количество плохих блоков на новом чипе (по моему 1%, зависит от флешки) и количество которых будет потихоньку увеличиваться, ничего страшного в этом нет, следит за этим драйвер.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 08.04.2010 14:56 Сообщение: 2
sasamy
4.85

Пункты: 57092
Регистрация: 14.08.2009
Есть один момент - по какой-то причине ядро может посчитать хороший блок плохим и его штатными средствами уже не очистить после этого, только после правки драйвера и утилит mtd.
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 20.04.2010 15:11 Редактировалось 20.04.2010 15:13 Сообщение: 3
Pavel Ivanchenko
Admin
4.45

Пункты: 83618
Регистрация: 24.03.2009
Пол: Мужчина
Досадно, пришла новая партия NAND чипов, бедов в которых явно больше чем в предыдущих партиях, хотя, количество бедов в пределах нормы, но теперь они не редко попадают в первую сотню блоков от чего система уже не грузится , монтажница уже "посинела" на каждой плате по два раза чип NAND менять (а я с ужасом наблюдаю кучку NAND чипов, что делать с которыми пока не знаю) ...
Причем SAM-BA правильно детектирует при записи и говорит, чтопропускает блок, а вот u-boot уже видимо маркировку блоков игнорирует, надо на 1.3.4 испытать.
Спуститься к концу Подняться к началу
Персональная информация
rw9uao
Добавлено 20.04.2010 16:31 Сообщение: 4
rw9uao
Ранг
5

Группа: Клиенты
Пункты: 6946
Регистрация: 26.03.2009
поставщик что говорит? я однажды ругался с самунгом. оказалось чипы - фэйк. т.е подделка. закончилось обменом партии. брал в москве, контору не помню.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 20.04.2010 16:36 Сообщение: 5
sasamy
4.85

Пункты: 57092
Регистрация: 14.08.2009
Цитата
монтажница уже "посинела" на каждой плате по два раза чип NAND менять (а я с ужасом наблюдаю кучку NAND чипов, что делать с которыми пока не знаю) ...


Как вариант - ядро можно и в конец nand записать, если это возможно.
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 20.04.2010 16:38 Сообщение: 6
Pavel Ivanchenko
Admin
4.45

Пункты: 83618
Регистрация: 24.03.2009
Пол: Мужчина
Поставщик здесь не виноват, в принципе и производитель тоже, в доке оговаривается максимальное количество бедов на новых чипах - 40 штук, текущие количества на моих чипах явно в норме ...
Попробовал с u-boot 1.3.4, та же ерунда, при стирании говорит что обнаружил бед блок, при записи молчит, на чтении получается ошибка ...
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 20.04.2010 16:53 Редактировалось 20.04.2010 16:56 Сообщение: 7
sasamy
4.85

Пункты: 57092
Регистрация: 14.08.2009
Чета не совсем понятно, в документации говорится:
Цитата

nand write addr ofs|partition size
Write `size' bytes from `addr' to `ofs' in NAND flash. Blocks that
are marked bad are skipped.
If a page cannot be read because an
uncorrectable data error is found, the command stops with an error.


К тому же есть такая команда

Цитата

implement "nand erase clean" and old "nand erase"
using both the new code which is able to skip bad blocks
"nand erase clean" additionally writes JFFS2-cleanmarkers in the oob.
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 20.04.2010 16:59 Сообщение: 8
Pavel Ivanchenko
Admin
4.45

Пункты: 83618
Регистрация: 24.03.2009
Пол: Мужчина
И тем не менее:
Код
U-Boot> nand erase 60000 7a0000
NAND erase: device 0 offset 0x60000, size 0x7a0000
Skipping bad block at 0x00200000
Erasing at 0x7e0000 -- 100% complete.
OK
U-Boot> nand write 20400000 60000 7a0000
NAND write: device 0 offset 0x60000, size 0x7a0000
7995392 bytes written: OK
U-Boot> nand read 20400000 60000 7a0000
NAND read: device 0 offset 0x60000, size 0x7a0000
7995392 bytes read: ERROR
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 20.04.2010 17:02 Редактировалось 20.04.2010 17:33 Сообщение: 9
sasamy
4.85

Пункты: 57092
Регистрация: 14.08.2009
Я тем неменее настаиваю испробовать nand erase clean :)

Что еще подозрительно - ничего не выводит про ошибки чтения - если он пытается прочитать испорченый непомеченый блок - судя по исходникам полюбому должен вывести ошибку - наталкивает на мысль что ошибка не связана с бэдами.
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 20.04.2010 17:35 Редактировалось 20.04.2010 17:36 Сообщение: 10
Pavel Ivanchenko
Admin
4.45

Пункты: 83618
Регистрация: 24.03.2009
Пол: Мужчина
Безрезультатно :(
Код
U-Boot> tftpboot 20400000 zlinux
TFTP from server 192.168.0.2; our IP address is 192.168.0.136
Filename 'zlinux'.
Load address: 0x20400000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
######################
done
Bytes transferred = 4438238 (43b8de hex)
U-Boot> nand erase clean 60000 7a0000

NAND erase: device 0 offset 0x60000, size 0x7a0000
Skipping bad block at 0x00200000
Erasing at 0x7e0000 -- 100% complete. Cleanmarker written at 0x7e0000.
OK
U-Boot> nand write 20400000 60000 7a0000

NAND write: device 0 offset 393216, size 7995392 ... 7995392 bytes written: OK
U-Boot> nand read 20400000 60000 7a0000

NAND read: device 0 offset 393216, size 7995392 ... 7995392 bytes read: ERROR
U-Boot> bootm 20400000
## Booting image at 20400000 ...
Image Name: Linux Kernel Image
Image Type: ARM Linux Kernel Image (gzip compressed)
Data Size: 4438174 Bytes = 4.2 MB
Load Address: 20008000
Entry Point: 20008000
Verifying Checksum ... Bad Data CRC
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » FAQ