ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
7 июля
195016
Ale3000 (23.05.2010 10:37, просмотров: 1588) MBedder
Samsung NAND flash K9F4G08U0M Copy Back Routine. Где должно лежать ECC ? Я использую Samsung NAND flash K9F4G08U0M (512MB=4096 Blocks x 64 Pages x (2048+64) байт) для хранения данных. Реализую сейчас на ней Bad Block Management. Для этого хотелось бы использовать команды 00h-35h-85h-10h (Copy Back Program) для того чтобы не использовать ОЗУ при замене блока, и потом 7Bh (Read EDC Status). Насколько я понял из описания при выполнении команд 00h-35h (Read for Copy Back) флешка автоматически обнаруживает ошибки, и если испорчен только 1 бит из 528 байт, автоматически исправляет эту ошибку. Но в даташите не написано, где именно в Spare Area должно лежать ECC, и как оно должно вычисляться. На сайте Samsunga я нашел NAND Flash Spare Area Assignment Standard (http://www.samsung …ssignment_standard.pdf) и ECC Sample Source Code for 512 Byte (http://www.samsung …or_512byte_256word.txt). Проверил, что использование этих самунговских процедур, действительно позволяет исправлять одиночные ошибки. Но эти процедуры не говорят, где должно лежать ECC. Я расположил 4 ECC по адресам 8,24,40,56 в Spare Area, как и указано в NAND Flash Spare Area Assignment Standard. Всю остальную часть Spare забиваю FFh. Но при этом команда Copy Back не исправляет одиночную ошибку. В команде Read EDC status бит 2 всегда равен 0. Т.е. Validity of EDC status Invalid. Что я делаю не так? Может быть ECC надо не там располагать? Или ее надо по другому считать? Или может быть остальную часть Spare Area надо не FFh забивать, а располагать там LSN (логические номера секторов - я их не использую) и для них свое ECC ? Файловые системы типа UFFS не предлагать, так как они кушают много ОЗУ, а у меня всего 8КБ. У меня ATXmega128A1. Ранее я уже реализовывал подобную систему на ATmega128 с 4КБ ОЗУ и K9F1208U0M (64MB=4096 Blocks x 32 Pages x (512+16) байт), но эта флешка не поддерживала Copy Back, поэтому таких вопросов не возникало.