Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с последовательным чтением
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Serg_el
Судя по даташиту данная память имеет режим Sequential Row Read, т.е. последовательного чтения внутри блока с автоматическим инкрементом адреса страницы. После считывания первой страницы вместе с резервной областью (512+16 байт) выставляется Busy, ожидаю Ready, затем считываю следующую страницу, а в ответ 0xFF, т.е. доступа к памяти нет. Если же после появления Ready повторить команду на Чтение + Адрес следующей страницы, то все прекрасно работает. Кто-нибудь сталкивался с подобным поведением памяти?
Dron_Gus
CE случайно не снимаете?
Serg_el
Цитата(Dron_Gus @ Sep 28 2010, 10:51) *
CE случайно не снимаете?


Точно не снимаю.
Serg_el
Совсем запутался. Постранично читает нормально. Записываю Самбой файл, вычитываю все как надо. Но при этом, во-первых не вижу в 517 байте маркер битого блока (который на самом деле битый и обнаружен Самбой), во-вторых, при 4х байтной адресации (1ый байт - номер байта в странице, 3 остальных - номер блока) 2ой по счету байт не задействован. Т.е. номер 1го блока должен задаваться как 0x00 0x01 0x00 0x00, а реально первую страницу 1го блока определяет адрес 0x00 0x00 0x01 0x00. Такое ощущение, что работа идет не с 8ми, а 16ю разрядами. Взгляд на программу уже замылен, может кто внесет свежий поток мыслей?
Dron_Gus
Код покаывайте. На вскидку: для чтения разных областей одной страницы используются три команды (0x00, 0x01, 0x50). Вы их правильно используете?
Serg_el
Цитата(Dron_Gus @ Oct 5 2010, 21:51) *
Код покаывайте. На вскидку: для чтения разных областей одной страницы используются три команды (0x00, 0x01, 0x50). Вы их правильно используете?


Да код, собственно, это переработанный атмеловский пример, выкинул лишнее, добавил DMA с переносом из NAND в SDRAM.
Последовательность такая команда 0x0, затем адрес 0x0 0x0 0x0 0x0 (читаем страница 0, блока 0), затем жду busy, потом читаю 528 байт, появляется снова busy. Если пытаться читать далее, то имеем 528 0xFF, затем опять появляется busy. Если же после окончания чтения страницы опять команда-адрес, то читается опять нормально, но только снова одна страница. Могу завтра этот кусок кода выложить.
Что сильно смущает - в даташите указано, что гарантированно минимум - 4026 рабочих блоков, а Самба до первого Erase all выдает 0 bad blocks, а после уже 256!!!

По настройкам EBI - питание 3.3 и подтяжка линий (включенная по-умолчанию)

SMC - тайминги, управление по RD и WE, 8 -bit data bus.
Serg_el
Выяснил сегодня, что атмеловский пример обнаруживает bad страницы в моей NAND следующим образом:

Команда 0x0, адрес 0x0 0x2 0x0 0x0 - блок 0, страница 0
Команда 0x0, адрес 0x0 0x2 0x1 0x0 - блок 0, страница 1

Команда 0x0, адрес 0x0 0x2 0x20 0x0 - блок 1, страница 0
Команда 0x0, адрес 0x0 0x2 0x21 0x0 - блок 1, страница 1

Dron_Gus
А вы работали именно с этой микросхемой?
Dron_Gus
Это вполне логично. маркер может быть или на первой или на второй странице блока. Только вот команда не та.

Нет, с конкретно этой не работал. Работал с 2 К блоками.
Serg_el
Цитата(Dron_Gus @ Oct 6 2010, 12:29) *
Это вполне логично. маркер может быть или на первой или на второй странице блока. Только вот команда не та.

Нет, с конкретно этой не работал. Работал с 2 К блоками.


Не совсем логично именно для этой микросхемы, т.к. по даташиту номер байта в странице задается первыми 8 битами. Остальные 3 байта адреса это номер страницы и блока. Вот и с командой я не понимаю ситуацию, если давать команду 0x50 (чтение spare области), то не нахожу маркера битого блока. Такое ощущение, что работаю с другой микросхемой.
Serg_el
Вот и разобрался я с этой проблемой. Возможно кому-то поможет.
Все читалось на самом деле нормально (в том числе последовательно), проблема оказалась в записи. Samba версии 2.9 работала с апплетом для микросхемы NAND с другой адресацией, т.е. получалось, что страницы записывались во флеш не последовательно. Соответственно только Самба могла их правильно и вычитать из памяти. В этом была и причина некорректного определения битых блоков. Скачал версию 2.10, она скорее всего более универсальная и умеет определять по ID тип микросхемы и правильно с ней работать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.