|
NANDFlash + микроконтроллер - как бороться с битыми секторами? |
|
|
|
May 17 2016, 12:02
|
Местный
  
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041

|
Доброго времени суток! Пишу драйвер для вот этой NAND и озадачился вопросом о битых секторах. В даташите написано, что на каждой флешке уже с завода может быть определенное количество битых секторов, и прежде чем ей пользоваться нужно при первом включении пробежаться алгоритмом, который указан все в том же даташите и запомнить адреса битых секторов. Я правильно понимаю, что мне нужна другая энергонезависимая память (например флеш на процессоре), чтобы хранить таблицу битых адресов? И нет других способов борьбы с ними?
|
|
|
|
|
 |
Ответов
|
May 18 2016, 06:51
|
Местный
  
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041

|
Резюмируя вышесказанное XVR, dm.pogrebnoy , jcxz:
- Хранить таблицу битых блоков можно в самой флешке. Способ 1, который предложит jcxz мне понравился. Второй способ не подойдет, насколько я понял в битых блоках может быть, всё что угодно; - Для выявления новых битых блоков и исправления ошибок, использовать алгоритм Хемминга, с занесением в таблицу битых блоков новые испорченные блоки;
Вопрос вероятно глупый, но если поднять файловую систему, она не будет делать все это за меня?
|
|
|
|
|
May 18 2016, 08:28
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(yanvasiij @ May 18 2016, 12:51)  Второй способ не подойдет, насколько я понял в битых блоках может быть, всё что угодно; Вы не поняли. Скажем для флага выбрали 0-й байт блока. Если в 0-м байте изначально не 0xFF - блок сбойный, даже не надо ничего делать. Если там не 0xFF - проверяем блок, если в любом байте !=0xFF, пишем в 0-й байт любое значение !=0xFF (не стирая страницы!). Я не знаю как в данной флешке, но те SPI-FLASH с которыми я работал - всё позволяли модифицировать 1 байт внутри страницы не меняя остальные. Если здесь не так и есть какой-то встроенный контроль блочными кодами исправления ошибок, то очевидно такой способ не подходит. Цитата(novikovfb @ May 18 2016, 13:29)  битый блок содержит одну или более сбойную ячейку, т.е. может искажать информацию. Эти блоки могут беспроблемно стираться, но при последующей записи возможны ошибки, причем за счет кода с исправлением ошибок (Хэмминга и т.п.) возможно исправление этой единичной ошибки. Вы уверены что этот чип это умеет? Те SPI-FLASH с которыми мне довелось работать, не имели никакого контроля кодами исправления ошибок и позволяли дописывать нулевые биты без стирания страницы. Цитата(esaulenka @ May 18 2016, 13:40)  Идея поднять файловую систему правильная. Вопрос только в том, что компактных ФС для "голого" NAND'а в открытом доступе особо и не видно... А что мешает использовать FatFS? LowLevel-IO там свой можно написать.
|
|
|
|
|
May 18 2016, 08:59
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Цитата(jcxz @ May 18 2016, 11:28)  Вы уверены что этот чип это умеет? Те SPI-FLASH с которыми мне довелось работать, не имели никакого контроля кодами исправления ошибок и позволяли дописывать нулевые биты без стирания страницы. Я уверен, что разговор не о том. Во-первых, слова 'SPI' в теме не было. Зато была ссылка на даташит и слово 'NAND'. А во-вторых, там была мысль о том, что битый блок можно стереть (и он, возможно, сотрётся). Потом можно записать туда информацию, и она, возможно, корректно считается обратно. Или некорректно. Как повезёт. Цитата(jcxz @ May 18 2016, 11:28)  А что мешает использовать FatFS? LowLevel-IO там свой можно написать. Мешает отсутствие готового нижнего уровня. Этот нижний уровень, собственно, и должен решать вопросы: - не каждый блок можно использовать (битые блоки) - минимальный размер стирания - блок (16 килобайт в данной конкретной микросхеме) - полезная штука - wear leveling, чтоб не "протереть дырку" в каком-то часто используемом месте. А вот поверх этого всего можно и "обычную" ФС надстраивать...
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
May 18 2016, 18:26
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(esaulenka @ May 18 2016, 14:59)  Во-первых, слова 'SPI' в теме не было. Зато была ссылка на даташит и слово 'NAND'. А во-вторых, там была мысль о том, что битый блок можно стереть (и он, возможно, сотрётся). Потом можно записать туда информацию, и она, возможно, корректно считается обратно. Или некорректно. Как повезёт. Если встроенных блочных кодов с исправлением ошибок в чипе нет, то тогда ничего не мешает использовать предложенный мной алгоритм маркирования сбойных блоков - дозаписью одного флагового байта (логическое AND с существующим содержимым байта). И стирать их не надо, я и не предлагал этого. Про SPI-FLASH упомянул так как только с ними я практически имел дело. Но вроде на уровне базовых операций между этими разными чипами не должно быть разницы... по идее. Цитата(esaulenka @ May 18 2016, 14:59)  Мешает отсутствие готового нижнего уровня. Этот нижний уровень, собственно, и должен решать вопросы: - не каждый блок можно использовать (битые блоки) Это решается самой ФС. Цитата(esaulenka @ May 18 2016, 14:59)  - минимальный размер стирания - блок (16 килобайт в данной конкретной микросхеме) В обычных SD размер стирания тоже как правило гораздо больше размера блока записи. И ничего - работает FatFS. Хотя не разбирался как там это реализовано. Цитата(esaulenka @ May 18 2016, 14:59)  - полезная штука - wear leveling, чтоб не "протереть дырку" в каком-то часто используемом месте. Несложно реализовать самостоятельно. Недавно я как раз реализовывал что-то подобное для SPI-FLASH-ки. Тут будет конечно немного сложнее, так как в одном блоке стирания может быть несколько кластеров, но возможно. Цитата(novikovfb @ May 18 2016, 18:13)  IMHO, использовать NAND Flash без программной (ручками в процессоре, сам чип памяти это не умеет) коррекции ошибок - неоправданный оптимизм, они даже в офисных условиях умудряются терять отдельные биты. Что-то странное Вы говорите.... Я конечно на практике с параллельными FLASH не работал, но с SPI-FLASH (разными) у меня куча проектов. И готовых давно работающих, и в процессе разработки несколько. И работают эти девайсы в далеко не тепличных условиях - на почти неотапливаемых подстанциях в тайге в мороз и жару. И куча важной информации там хранится на этой флешь - и конфигурация и журналы событий и срезы мощности, а сейчас и осциллографирование туда осуществляется. И пишутся непрерывно и контроль непрерывно идёт. И почему-то нет сбоев как ни странно. Неужто такое именно с параллельными FLASH происходит???
|
|
|
|
|
May 23 2016, 09:22
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(jcxz @ May 18 2016, 22:26)  В обычных SD размер стирания тоже как правило гораздо больше размера блока записи. И ничего - работает FatFS. Хотя не разбирался как там это реализовано. Правильно, потому что стиранием, бэдами и wear-leveling в SD карте занимается встроенный контроллер. А FatFS делает только Read() и Write(). Цитата(jcxz @ May 18 2016, 22:26)  Неужто такое именно с параллельными FLASH происходит??? А в SPI Flash разве вообще бэды бывают? Имхо - nand flash и spi flash это разные вещи...
|
|
|
|
Сообщений в этой теме
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 yanvasiij Цитата(aaarrr @ May 17 2016, 17:10) 1. Би... May 17 2016, 12:26 dm.pogrebnoy Цитата(yanvasiij @ May 17 2016, 15:26) Сл... May 17 2016, 13:25  jcxz способ 1:
Хранить таблицу битых блоков в первом ис... May 18 2016, 04:42   novikovfb Цитата(jcxz @ May 18 2016, 07:42) Что зна... May 18 2016, 07:29 XVR ЦитатаНо как только я начал писать во флешку это п... May 17 2016, 13:07    aaarrr Цитата(jcxz @ May 18 2016, 21:26) Неужто ... May 18 2016, 20:30     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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|