реклама на сайте
подробности

 
 
> NANDFlash + микроконтроллер - как бороться с битыми секторами?
yanvasiij
сообщение May 17 2016, 12:02
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Доброго времени суток!

Пишу драйвер для вот этой NAND и озадачился вопросом о битых секторах. В даташите написано, что на каждой флешке уже с завода может быть определенное количество битых секторов, и прежде чем ей пользоваться нужно при первом включении пробежаться алгоритмом, который указан все в том же даташите и запомнить адреса битых секторов. Я правильно понимаю, что мне нужна другая энергонезависимая память (например флеш на процессоре), чтобы хранить таблицу битых адресов? И нет других способов борьбы с ними?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
yanvasiij
сообщение May 17 2016, 12:26
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Цитата(aaarrr @ May 17 2016, 17:10) *
1. Битыми считаются блоки, а не сектора. Разница существенная.
2. Таблицу можно хранить в той же памяти в двух экземплярах.


Да, верно блоки.

Цитата(XVR @ May 17 2016, 17:10) *
Зачем их запоминать? Они никуда не денуться, так что можно просто их не использовать при записи информации.
Неправильно понимаете. Нужен такой алгоритм работы с FLASH, что бы он мог не использовать (как то обходить) сектора, которые являются битыми (более того, новые битые сектора могут появиться и в процессе работы)


А по какому признаку отличать битый блок от небитого? В даташите ясно сказано, что при первом запуске все небитые блоки во отлчии от битых равны 0xFF, и показано, как отличить битый блок от небитого. Но как только я начал писать во флешку это признак теряется. Следовательно таблицу битых блоков можно хранить в самой же флешке, но по какому адресу ее разместить, ведь от флешки к флешке один и тот же адрес может оказаться битым.

А по поводу алгоритма неиспользования битых секторов можно по-подробнее - этот как?
Go to the top of the page
 
+Quote Post
dm.pogrebnoy
сообщение May 17 2016, 13:25
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933



Цитата(yanvasiij @ May 17 2016, 15:26) *
Следовательно таблицу битых блоков можно хранить в самой же флешке, но по какому адресу ее разместить, ведь от флешки к флешке один и тот же адрес может оказаться битым.


Нулевой блок гарантированно не битый. Я бы хранил таблицу битых блоков в нескольких фиксированных местах. Вероятность того, что они все одновременно будут/станут битыми очень мала.
Для исправления и детектирования ошибок используют код Хэмминга. Загуглите для начала tn2908_NAND_hamming_ECC_code.pdf При превышении определенного количества ошибок в блоке, нужно помечать блок как битый и обходить его при работе с флешкой.


--------------------
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 18 2016, 04:42
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



способ 1:
Хранить таблицу битых блоков в первом исправном блоке. Таблица содержит CRC. Если CRC неверная - значит таблицы в этом блоке нет (вероятно блок битый), значит таблица в след. блоке.
И так далее, даже если с начала флешки цепочка битых блоков, всё равно таблица найдётся в первом исправном.
способ 2:
Что значит битые блоки? Блоки которые нельзя стереть (перевести в сост. "все FF")? А дописать в них можно?
Если да - алгоритм простой: резервируем в каждом блоке 1 байт для маркера блока. Если маркер==0xFF - блок исправный, иначе - неисправный. При первом старте на заводе все битые блоки метим, записывая в маркер !=0xFF (ну или там уже !=0xFF). При старте ПО в ОЗУ создаём таблицу битых блоков по маркерам.
Go to the top of the page
 
+Quote Post
novikovfb
сообщение May 18 2016, 07:29
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 518
Регистрация: 29-09-11
Пользователь №: 67 450



Цитата(jcxz @ May 18 2016, 07:42) *
Что значит битые блоки? Блоки которые нельзя стереть (перевести в сост. "все FF")? А дописать в них можно?

битый блок содержит одну или более сбойную ячейку, т.е. может искажать информацию. Эти блоки могут беспроблемно стираться, но при последующей записи возможны ошибки, причем за счет кода с исправлением ошибок (Хэмминга и т.п.) возможно исправление этой единичной ошибки.
Лучше в помеченные сбойными блоки ничего не записывать, а при штатной записи оставлять байт с признаком небитого блока равным FF.
По поводу того, где хранить таблицу битых блоков - я делал считывание заголовков всех блоков при включении питания и хранение таблицы в ОЗУ.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- yanvasiij   NANDFlash + микроконтроллер - как бороться с битыми секторами?   May 17 2016, 12:02
- - aaarrr   1. Битыми считаются блоки, а не сектора. Разница с...   May 17 2016, 12:10
- - XVR   Цитата(yanvasiij @ May 17 2016, 15:02) В ...   May 17 2016, 12:10
- - XVR   ЦитатаНо как только я начал писать во флешку это п...   May 17 2016, 13:07
- - yanvasiij   Резюмируя вышесказанное XVR, dm.pogrebnoy , jcxz: ...   May 18 2016, 06:51
|- - jcxz   Цитата(yanvasiij @ May 18 2016, 12:51) Вт...   May 18 2016, 08:28
|- - esaulenka   Цитата(jcxz @ May 18 2016, 11:28) Вы увер...   May 18 2016, 08:59
||- - jcxz   Цитата(esaulenka @ May 18 2016, 14:59) Во...   May 18 2016, 18:26
||- - aaarrr   Цитата(jcxz @ May 18 2016, 21:26) Неужто ...   May 18 2016, 20:30
||- - sonycman   Цитата(jcxz @ May 18 2016, 22:26) В обычн...   May 23 2016, 09:22
||- - jcxz   Цитата(sonycman @ May 23 2016, 15:22) А в...   May 23 2016, 09:35
||- - sonycman   Цитата(jcxz @ May 23 2016, 13:35) А в чём...   May 23 2016, 09:44
|- - novikovfb   Цитата(jcxz @ May 18 2016, 11:28) Вы увер...   May 18 2016, 12:13
- - esaulenka   Второй способ более правильный. Табличка битых бло...   May 18 2016, 07:40
- - yanvasiij   Что-то посидел, подумал, порисовал алгоритмы всего...   May 18 2016, 11:39
- - yanvasiij   Цитата(jcxz @ May 18 2016, 23:26) ... Это...   May 19 2016, 04:02
- - _Ivan_33   У меня похожая задача, только нужно реализовать на...   May 23 2016, 17:10
|- - _3m   Цитата(_Ivan_33 @ May 23 2016, 20:10) Воп...   May 23 2016, 18:05
- - sonycman   А вот по поводу ECC (Error Correction Code). Как п...   May 24 2016, 03:26
- - yanvasiij   Удалось мне поднять yaffs на моем STM32F429. Единс...   Jun 27 2016, 04:00
- - sonycman   А как решили хранить таблицу бэдов? Какой использу...   Jun 27 2016, 19:26
- - yanvasiij   Цитата(sonycman @ Jun 28 2016, 00:26) А к...   Jun 28 2016, 04:33
|- - jcxz   Цитата(yanvasiij @ Jun 28 2016, 10:33) Ко...   Jun 28 2016, 05:00
||- - esaulenka   Цитата(jcxz @ Jun 28 2016, 08:00) Хм.. А ...   Jun 28 2016, 06:51
|- - sonycman   Цитата(yanvasiij @ Jun 28 2016, 08:33) Ес...   Jun 28 2016, 07:45
|- - esaulenka   Цитата(sonycman @ Jun 28 2016, 10:45) А е...   Jun 28 2016, 15:03
|- - sonycman   Цитата(esaulenka @ Jun 28 2016, 19:03) Да...   Jun 28 2016, 16:29
- - yanvasiij   Сектор 16 kB без учета spare. Я хотел сказать ра...   Jun 28 2016, 05:15
|- - jcxz   Цитата(yanvasiij @ Jun 28 2016, 11:15) Се...   Jun 28 2016, 06:04
- - yanvasiij   ЦитатаА если на нанд есть бэды до разворачивания ф...   Jun 29 2016, 06:52
|- - sonycman   Цитата(yanvasiij @ Jun 29 2016, 10:52) На...   Jun 29 2016, 07:32
- - yanvasiij   ЦитатаМаркер битого блока находится не в первых дв...   Jun 29 2016, 09:15
|- - sonycman   Цитата(yanvasiij @ Jun 29 2016, 13:15) Ту...   Jun 29 2016, 09:51
- - yanvasiij   Я решил описать процесс портирования yaffs, если к...   Aug 31 2017, 07:08


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 8th August 2025 - 02:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01422 секунд с 7
ELECTRONIX ©2004-2016