|
|
  |
NAND flash initial invalid block(s), Как с ними борятся?? |
|
|
|
Jan 23 2007, 09:59
|
Местный
  
Группа: Свой
Сообщений: 213
Регистрация: 6-12-04
Из: г. Таганрог
Пользователь №: 1 346

|
Цитата №1 из datasheet на NAND flash K9WAG08U1A: Цитата An initial invalid block(s) does not affect the performance of valid block(s) because it is isolated from the bit line and the common source line by a select transistor. Из чего я делаю вывод: в структуре NAND при производстве могут возникать некоторые глюки, которые отлавливаются на этапе заводского тестирования и после их нахождения блок, который их содержит отключается от шины IO. Обращение к этим блокам должно возвращать какое-то значение (скорее всего 0х00). При стирании этих блоков возвращаемое значение меняться не должно: они ж отключены (..is isolated from the bit line and the common source line by a select transistor)!! Цитата №2 из datasheet на NAND flash K9WAG08U1A: Цитата The initial invalid block(s) status is defined by the 1st byte in the spare area. Samsung makes sure that either the 1st or 2nd page of every initial invalid block has non-FFh data at the column address of 2048. Since the initial invalid block information is also erasable in most cases, it is impossible to recover the information once it has been erased. Therefore, the system must be able to recognize the initial invalid block(s) based on the original initial invalid block information and create the initial invalid block table[..]. Any intentional erasure of the original initial invalid block information is prohibited. Тут уже неувязочка получается... Как же они отключены, если информацию о них можно стереть? И какие же они invalid block, если они стираемые? Переходя от теории к практике... Есть платка - на ней одна flash на гиг, ПЛИС, которую научили писать, читать, стирать эту flash. Самопальное тестирование этой flash производится следующим образом: а. Стираем всю flash. б. Пишем в нее (в каждую ячейку) 0хАА. в. Читаем и стравниваем. Если считанное значение не совпало - пишем в лог адрес ячейки в котором есть несовпадение. г. Стираем всю flash. д. Пишем в нее (в каждую ячейку) 0х55. е. Читаем и стравниваем. Если считанное значение не совпало - пишем в лог адрес ячейки в котором есть несовпадение. ж. Стираем всю flash. Результат - все пространство flash чувствует себя прекрасно за исключением четырех блоков. Именно блоков - проверяли адресацию. Так вот - значение КАЖДОЙ ячейки в этих блоках - 0х00! И оно не стирается! Вот, подобрался к вопросам:  1. Если кто работал с flash - расскажите пожалуйста, всегда ли bad block возвращает значения 0х00 для каждой ячейки блока? 2. Эти самые initial invalid block'и - они если не работают - они всегда не работают? Или все дело в том, что через раз? (то есть один раз считывает правильно, но после стирания и записи может прочесться что-то не то, а потом опять нормально?) Пока вроде все... Заранее спасибо за ответы.
|
|
|
|
|
Jan 23 2007, 11:14
|

embarrassed systems engineer
    
Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038

|
Цитата(Гяук @ Jan 23 2007, 08:59)  Цитата №1 из datasheet на NAND flash K9WAG08U1A: Цитата An initial invalid block(s) does not affect the performance of valid block(s) because it is isolated from the bit line and the common source line by a select transistor. Из чего я делаю вывод: в структуре NAND при производстве могут возникать некоторые глюки, которые отлавливаются на этапе заводского тестирования и после их нахождения блок, который их содержит отключается от шины IO. ИМХО, здесь немного неверное прочтение - не отключается при"на заводе", а блокирован в процессе работы закрытым транзистором - это что-то вроде сигнала Chip Select. То есть, при обращении к рабочему блоку, активируется "select transistor" для этого блока, для всех остальных блоков (включая дефектные) - "select transistor" закрыты и блоки никак не влияют на обращение к активному блоку. Цитата(Гяук @ Jan 23 2007, 08:59)  Переходя от теории к практике... Есть платка - на ней одна flash на гиг, ПЛИС, которую научили писать, читать, стирать эту flash. Самопальное тестирование этой flash производится следующим образом: а. Стираем всю flash. А вот выполнять операции с дефектными блоками Самсунг не рекомендует. В каком-то из даташитов я читал, что заводское тестирование массива намного более полное чем возможно выполнить на упакованном чипе через интерфейс, и не факт что дефект удастся обнаружить простой записью моделей и последующим сравнением. Например - утечка заряда в блоке. Записали-прочитали - все OK. Через полчаса - половина битов в блоке принимает левые значения. И никакой Хэмминг тут не поможет. Так что самый ценный ресурс чипа NAND - это его карта битых блоков  Цитата(Гяук @ Jan 23 2007, 08:59)  1. Если кто работал с flash - расскажите пожалуйста, всегда ли bad block возвращает значения 0х00 для каждой ячейки блока? 2. Эти самые initial invalid block'и - они если не работают - они всегда не работают? Или все дело в том, что через раз? (то есть один раз считывает правильно, но после стирания и записи может прочесться что-то не то, а потом опять нормально?) Не знаю, может быть как-то поменялась технология. При разработке у меня были случаи затирания информации о битых блоках от производителя - для 128Mbit и 1Gbit чипов, но потом часть маркированных битыми блоков работала нормально. Корректирующий софт был правда мощный - Хэмминг, верификация, резервирование и ремаппинг. Но сплошных нулей в битых блоках вроде не было.
|
|
|
|
|
Jan 23 2007, 16:20
|
Местный
  
Группа: Свой
Сообщений: 213
Регистрация: 6-12-04
Из: г. Таганрог
Пользователь №: 1 346

|
VslavX: Спасибо! Но ответы, порождают новые вопросы  Цитата Например - утечка заряда в блоке. Утечка заряда - это здорово, но если микросхема не запитана - я так понимаю никакой утечки быть не может - то есть она проявляется только при запитанной микросхеме, причем когда выбран соответствующий bad block? Или пример про утечку был приведен чисто абстрактно? (это я не в обиду - это я просто хочу разобраться )
|
|
|
|
|
Jan 23 2007, 17:45
|

Местный
  
Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894

|
Это для кого написано???? Цитата Identifying Initial Invalid Block(s)
All device locations are erased(FFh) except locations where the initial invalid block(s) information is written prior to shipping. The initial invalid block(s) status is defined by the 1st byte in the spare area. Samsung makes sure that either the 1st or 2nd page of every initial invalid block has non-FFh data at the column address of 2048. Since the initial invalid block information is also erasable in most cases, it is impossible to recover the information once it has been erased. Therefore, the system must be able to recognize the initial invalid block(s) based on the original initial invalid block information and create the initial invalid block table via the following suggested flow chart(Figure 3). Any intentional erasure of the original initial invalid block information is prohibited. Из отсюда вывод - не пытайтесь стирать битые блоки, Вы только усугубите этим ситуацию....
|
|
|
|
|
Jan 24 2007, 09:41
|
Местный
  
Группа: Свой
Сообщений: 213
Регистрация: 6-12-04
Из: г. Таганрог
Пользователь №: 1 346

|
Цитата(-Al- @ Jan 23 2007, 17:45)  Это для кого написано???? Для меня? Ай, спасибо, не заметил Цитата(-Al- @ Jan 23 2007, 17:45)  Из отсюда вывод - не пытайтесь стирать битые блоки, Вы только усугубите этим ситуацию.... Там написано, что я потеряю информацию о изначально заложенных в массив bad block'ах. Но тут как говорится "поздно пить боржоми" ибо её я уже потерял  Правда пока только в макетке... Вот теперь-то я и пытаюсь понять - произошло ли что-то страшное или не произошло? Как я уже писал в первом посте мои "кратковременные" тесты flash проходит на 5+, а те bad block'и которые остались в микросхеме даже после стирания возвращают 0х00 из каждой ячейки. Теперь пытаюсь провернуть более "долговременные тесты", т.е. пишу во flash данные, даю ей постоять при включенном питании, потом выключаю питание, читаю содержимое, опять даю постоять - опять выключаю, читаю... О результатах непременно отпишусь  А вообще конечно попытаюсь так больше не делать, а использовать изначальную информацию о битых блоках... В следующих устройствах... Вот только макетку замучаю и попытаюсь так больше не делать...
|
|
|
|
|
Jan 24 2007, 10:26
|

Местный
  
Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894

|
Цитата(Гяук @ Jan 24 2007, 09:41)  Цитата(-Al- @ Jan 23 2007, 17:45)  Это для кого написано???? Для меня? Ай, спасибо, не заметил Цитата(-Al- @ Jan 23 2007, 17:45)  Из отсюда вывод - не пытайтесь стирать битые блоки, Вы только усугубите этим ситуацию.... Там написано, что я потеряю информацию о изначально заложенных в массив bad block'ах. Но тут как говорится "поздно пить боржоми" ибо её я уже потерял  Правда пока только в макетке... Вот теперь-то я и пытаюсь понять - произошло ли что-то страшное или не произошло? Как я уже писал в первом посте мои "кратковременные" тесты flash проходит на 5+, а те bad block'и которые остались в микросхеме даже после стирания возвращают 0х00 из каждой ячейки. Теперь пытаюсь провернуть более "долговременные тесты", т.е. пишу во flash данные, даю ей постоять при включенном питании, потом выключаю питание, читаю содержимое, опять даю постоять - опять выключаю, читаю... О результатах непременно отпишусь  А вообще конечно попытаюсь так больше не делать, а использовать изначальную информацию о битых блоках... В следующих устройствах... Вот только макетку замучаю и попытаюсь так больше не делать...  Я вот теперь совсем не понимаю в чем проблема, в испорченных блоках данные = 0x00, а в нормальных = 0xFF после стирания, и Вы их различить не можете???
|
|
|
|
|
Jan 24 2007, 14:54
|
Местный
  
Группа: Свой
Сообщений: 213
Регистрация: 6-12-04
Из: г. Таганрог
Пользователь №: 1 346

|
2 -Al-Ну, проблему я изложил еще в первом посте: Цитата 1. Если кто работал с flash - расскажите пожалуйста, всегда ли bad block возвращает значения 0х00 для каждой ячейки блока? 2. Эти самые initial invalid block'и - они если не работают - они всегда не работают? Или все дело в том, что через раз? (то есть один раз считывает правильно, но после стирания и записи может прочесться что-то не то, а потом опять нормально?) Возможно мне просто попалась слишком хорошая микросхема flash... Возможно если я возьму другую такую же - все будет не так хорошо как сейчас... А пока: Вчера вечером заполнил всю микросхему значением 0xAA. Продержал во включенном состоянии полчаса - пошел домой. Сегодня с утра все считалось (За исключением нулей в bad block'ах). Сегодня после трех циклов час вкл. - час выкл. тоже все ОК  Завтра помучаю эту заразу теми же циклами со значением 0х55... Может правда сильно приличная микруха попалась....
|
|
|
|
|
Jan 24 2007, 19:14
|
Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 18-06-05
Пользователь №: 6 117

|
Цитата(Гяук @ Jan 24 2007, 13:54)  2 -Al-Ну, проблему я изложил еще в первом посте: Цитата 1. Если кто работал с flash - расскажите пожалуйста, всегда ли bad block возвращает значения 0х00 для каждой ячейки блока? 2. Эти самые initial invalid block'и - они если не работают - они всегда не работают? Или все дело в том, что через раз? (то есть один раз считывает правильно, но после стирания и записи может прочесться что-то не то, а потом опять нормально?) 1. Нет. 2. В зависимости от механизма отказ может быть в 1 случае из N. N от 1 до 10...0 Повторить заводскую проверку Вам не удастся. Устройство уже нельзя считать надежным Держать микруху во включенном состоянии мало - надо все время вычитывать и проверять вычитанные данные, желательно при повышенной температуре (макс. рабочая температура из дата шита) - температурно ускоренный тест. Но это слишком трудоемкое занятие да еще и для одного устройства - проще чип заменить. Если очень жалко менять чип стоит привинтить что-то вроде ECC коррекции или периодичски считать контрольную сумму.
|
|
|
|
|
Jan 25 2007, 11:46
|
Местный
  
Группа: Свой
Сообщений: 213
Регистрация: 6-12-04
Из: г. Таганрог
Пользователь №: 1 346

|
2 Runner, Спасибо! Прекращаю свои бесплодные попытки добиться от микрухи глюков  А насчет "жалко менять чип" - не, не жалко - смысла пока не вижу - платка у меня пока макет. В релизе учту все советы... 2 HarbourНемножко не понял... max flash writes - это программное ограничение количества записей? bitmap валидных секторов - это вообще что за зверь? любая флешовая файловая система - а можно ссылочку?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|