Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Глюк у флешки?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Timofey
Или глюк у меня?
Контроллер SAM7X256
Flash AT45DB321C
встала такая проблема: пишем несколько страниц друг за другом, когда считываем данные, то видим что записана всего лишь первая страница.
Запись ведется по следующему алгоритму:
по прерыванию PIT заходим в обработчик, проверяем свободно ли SPI, если свободно, то запрашиваем регистр статуса флэшки, и если 7 бит (старший) не нулевой (то есть флэшка готова записывать в основную память, то затем создаем массив данных размером в 528 байт и указываем флэешке (через DMA все работаем) данные для записи командой "запись данных через первый буфер с автостиранием страницы". Затем счетчик страниц увеличиваем на единицу и выходим из прерывания таймера. В результате когда прерывание срабатывает, у нас уже счетчик указывает на следующую страницу, мы снова собираем следующие данные в отправной буфер и так далее. Прерывание таймера - каждые 500 мкс.
Считывание данных производим командой чтения массива (E8h). Поэтому читаем сразу несколько страниц, просто в DMA указав число байт. Потом смотрим что мы имеем: первая страница прочитана, а дальше идут одни FF. Такое ощущение, что страница либо изначально не записывалась, либо она стирается и не записывается.
Попробывали менять номера начальных страниц. Если берем допустим начальную страницу 100, то все 4 страницы записываются нормально, взяли начальную страницу 1600 - результат описанный выше. Попробывали на разных флэш - у каждой свой результат с одними и теми же страницами. Что это значит?
Смотрели регистр программной защиты - он возвращает одни нули (запрос командой 32h 00h 00h 00h), получается защита от записи всех секторов отключена. Где искать причину такой записи?
KAlex
Чипселект после заполнения буфера поднимается?
Timofey
Цитата(KAlex @ May 30 2007, 18:02) *
Чипселект после заполнения буфера поднимается?
Да, поднимается. В даташите написано, что стирание и запись из буфера тактируется внутренним автоматом. И на это время выставляется в регистре статуса (в 7-ом бите) ноль, то есть флэшка занята. И перед следующей записью страницы, я проверяю сначала этот бит.Да и если бы изза чипселекта это было, то почему если я выбираю допустим начальную страницу с номером 100, то все записывает нормально, все 4 страницы, если в другом секторе, то уже пишет только первую?
KAlex
Цитата(Timofey @ May 31 2007, 08:49) *
Да и если бы изза чипселекта это было, то почему если я выбираю допустим начальную страницу с номером 100, то все записывает нормально, все 4 страницы, если в другом секторе, то уже пишет только первую?

Чудес не бывает, ищи ошибку в программе. Скорее всего неправильная адресация.
И еще посоветую использовать ногу Ready/Busy, а не читать статус. Помнится у меня тоже были с этим проблемы.
К стати, от АТ45 флешек я давно отказался, сейчас все делаю на самсунгах серии К9 либо Xd-card.
И объем, и скорость на порядок.
Timofey
Цитата(KAlex @ May 31 2007, 13:48) *
И еще посоветую использовать ногу Ready/Busy, а не читать статус. Помнится у меня тоже были с этим проблемы.
Помогло. Действительно, когда повесил эту ногу на вход контроллера - стало писать во все сектора нормально. Самое интересное, что на отладочной плате эта флэшка идет с корпусом CASON и у ней вобще нету такой ножки "готовности". А на самом устройстве, что спроектировали, поставили с корпусом TSOP, где эта нога была .... smile.gif Вобщем повезло smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.