|
Параллельная флешь. Программирование и polling., Atmel AT49BV162AT. |
|
|
|
Apr 25 2006, 06:32
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Может не в тот форум попал, но более подходящего не нашел, т.ч. не обессудьте.  Вопрос следующий: вот есть параллельная флешка AT49BV162AT от Atmel, микросхема хорошая, всем требованиям удовлетворяет, кроме одного нефатального, но досадного момента. Программирование флеши (как и стирание и другие режимы) реализуется путем подачи специальной цепочки адресов/данных (адрес 0х555, данные 0хаа, адрес 0хааа, данные 0х55 и т.д.) - это обычное дело для таких дивайсов. Время программирования ячейки (16-бит слова) типовое - 12 мкс, максимальное 200 мкс. Т.е. для гарантированной зашивки, если по времени, то надо ждать эти самые 200 мкс. Для оптимизации этого момента микросхема имеет режим поллинга, т.е. можно после посылки данных на программирование делать чтение и по определенным битам результата чтения определять, запрограммировалось ли слово или нет. И вот тут то и затаилась засада: выяснилось, что несмотря на поллинг некоторые данные пишутся с ошибками. Причем получается как бы порциями - блок из нескольких подряд данных пишется нормально, затем блок выпадает, затем опять нормально. Если сделать выход из режима программирования не по результату поллинга, а по времени, то все пишется, как часы, т.е. флешь сама нормальная. В случае стирания, например, сектора, окончание процесса стирания (там время заметное - порядка 0.3 секунд) определяется также с помощью аналогичного поллинга и тут вопросов нет, все замечательно работает. Если кто сталкивался с подобным и победил (или не победил  ), поделитесь опытом?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
 |
Ответов
|
Apr 25 2006, 09:23
|
Участник

Группа: Свой
Сообщений: 22
Регистрация: 9-12-04
Пользователь №: 1 425

|
А после записи, перед началом поллинга ждете некоторое время (те самые 12 мкс)? Возможно, что внутренняя логика микросхемы не успевает сработать, и в первом же цикле программа вылетает из ожидания.
|
|
|
|
|
Apr 25 2006, 09:56
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(appsoft @ Apr 25 2006, 16:23)  А после записи, перед началом поллинга ждете некоторое время (те самые 12 мкс)? Возможно, что внутренняя логика микросхемы не успевает сработать, и в первом же цикле программа вылетает из ожидания. Да нет, это явно лишнее. В доке непосредственно сказано: Data Polling may begin at any time during the program cycle. Т.е. начал цикл программирования и тут же можно начинать поллить. А 12 мкс - это типовое время программирования ячейки. По идее, если бы поллинг работал, то на программирование уходило бы это время. А так для гарантии надо использовать максимальное. Можно, конечно, использовать трюки - типа, запрограммировал ячейку, подождал 12 мкс, вышел из режима, проверил тут же. Если не запрограммировалось, то повторить процесс. Но это, имхо, изврат. Документированные возможности должны работать.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Apr 26 2006, 08:42
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(DS_ @ Apr 25 2006, 19:18)  Ну значит либо ошибка в доке, либо в алгоритме поллинга - он кстати готовность не сразу ли показывает ? Или все-таки какое - то время от команды записи проходит ? Если последнее, значит режим поллинга, скорее всего не работает именно в мсх. Провел эксперименты. Время программирования, если все нормально, действительно составляет порядка 12 мкс. Делал так: после посылки программирующей последовательности устанавливаю два внешних выводы в 1, после успешного поллинга один сбрасываю, после неуспешного (там есть спец условия) - другой. Обнаружил, что иногда первый вывод устанавливается и через короткое время (несколько сот наносекунд) сбрасывается. Т.е. как будто получает подтверждение от поллинга, что он успешншо завершен. Ессно, это неправильно. Поставил задержку между посылкой программирующей последовательности и началом поллинга и все стало работать правильно. Величину задержки сначала поставил порядка 1 мкс. Поэкспериментировал, выяснил, что при 60 нс задежки еще уверенно не работает, а уже при 100 нс уверенно работает. Так что похоже, что Вы были правы насчет ошибок в алгоритме поллинга - он (егонный автомат) не успевает иногда, видимо, прийти в рабочее состояние после начала процесса программирования (хотя в доке явно сказано, что в любой момент можно начинать поллить) и гонит лажу. Не всегда, изредка, но это уже не суть важно. Поискал еррату, не нашел.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Сообщений в этой теме
dxp Параллельная флешь. Программирование и polling. Apr 25 2006, 06:32 Evgeny_CD Т.е. получается, что процедура поллинга "снос... Apr 25 2006, 06:43 dxp Цитата(Evgeny_CD @ Apr 25 2006, 13:43) Т.... Apr 25 2006, 08:49 DS_ А что про поллинг в datasheet написано? Он ведь м... Apr 25 2006, 07:54 dxp Цитата(DS_ @ Apr 25 2006, 14:54) А что пр... Apr 25 2006, 08:59  DS_ Ну да, трактовка однозначная. А если пользоваться ... Apr 25 2006, 09:09   dxp Цитата(DS_ @ Apr 25 2006, 16:09) Ну да, т... Apr 25 2006, 09:40
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|