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