|
Глюк у флешки? |
|
|
|
May 30 2007, 10:36
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

|
Или глюк у меня? Контроллер SAM7X256 Flash AT45DB321C встала такая проблема: пишем несколько страниц друг за другом, когда считываем данные, то видим что записана всего лишь первая страница. Запись ведется по следующему алгоритму: по прерыванию PIT заходим в обработчик, проверяем свободно ли SPI, если свободно, то запрашиваем регистр статуса флэшки, и если 7 бит (старший) не нулевой (то есть флэшка готова записывать в основную память, то затем создаем массив данных размером в 528 байт и указываем флэешке (через DMA все работаем) данные для записи командой "запись данных через первый буфер с автостиранием страницы". Затем счетчик страниц увеличиваем на единицу и выходим из прерывания таймера. В результате когда прерывание срабатывает, у нас уже счетчик указывает на следующую страницу, мы снова собираем следующие данные в отправной буфер и так далее. Прерывание таймера - каждые 500 мкс. Считывание данных производим командой чтения массива (E8h). Поэтому читаем сразу несколько страниц, просто в DMA указав число байт. Потом смотрим что мы имеем: первая страница прочитана, а дальше идут одни FF. Такое ощущение, что страница либо изначально не записывалась, либо она стирается и не записывается. Попробывали менять номера начальных страниц. Если берем допустим начальную страницу 100, то все 4 страницы записываются нормально, взяли начальную страницу 1600 - результат описанный выше. Попробывали на разных флэш - у каждой свой результат с одними и теми же страницами. Что это значит? Смотрели регистр программной защиты - он возвращает одни нули (запрос командой 32h 00h 00h 00h), получается защита от записи всех секторов отключена. Где искать причину такой записи?
|
|
|
|
|
 |
Ответов
|
May 31 2007, 04:49
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

|
Цитата(KAlex @ May 30 2007, 18:02)  Чипселект после заполнения буфера поднимается? Да, поднимается. В даташите написано, что стирание и запись из буфера тактируется внутренним автоматом. И на это время выставляется в регистре статуса (в 7-ом бите) ноль, то есть флэшка занята. И перед следующей записью страницы, я проверяю сначала этот бит.Да и если бы изза чипселекта это было, то почему если я выбираю допустим начальную страницу с номером 100, то все записывает нормально, все 4 страницы, если в другом секторе, то уже пишет только первую?
|
|
|
|
|
May 31 2007, 07:48
|

Местный
  
Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719

|
Цитата(Timofey @ May 31 2007, 08:49)  Да и если бы изза чипселекта это было, то почему если я выбираю допустим начальную страницу с номером 100, то все записывает нормально, все 4 страницы, если в другом секторе, то уже пишет только первую? Чудес не бывает, ищи ошибку в программе. Скорее всего неправильная адресация. И еще посоветую использовать ногу Ready/Busy, а не читать статус. Помнится у меня тоже были с этим проблемы. К стати, от АТ45 флешек я давно отказался, сейчас все делаю на самсунгах серии К9 либо Xd-card. И объем, и скорость на порядок.
|
|
|
|
|
Jun 1 2007, 09:56
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

|
Цитата(KAlex @ May 31 2007, 13:48)  И еще посоветую использовать ногу Ready/Busy, а не читать статус. Помнится у меня тоже были с этим проблемы. Помогло. Действительно, когда повесил эту ногу на вход контроллера - стало писать во все сектора нормально. Самое интересное, что на отладочной плате эта флэшка идет с корпусом CASON и у ней вобще нету такой ножки "готовности". А на самом устройстве, что спроектировали, поставили с корпусом TSOP, где эта нога была ....  Вобщем повезло
Сообщение отредактировал Timofey - Jun 1 2007, 09:57
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|