Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Запись и чтение flash-памяти через SPI
Мы используем для AT45DB раздельный режим записи и чтения, когда сначала данные пишутся в SRAM-буфер, а затем он целиком переносится в страницу основной памяти (в принципе возможен и объединенный режим, когда запись и чтение производится прямо в основной памяти "сквозным" методом, но он более громоздкий). Напомним, что в принципе flash-память перед записью требуется стирать отдельной операцией, но в серии AT45DB, как и в большинстве других разновидностей, эти операции могут быть объединены, причем суммарного времени на объединенную операцию уходит даже меньше.
Сама по себе 45DB011B допускает тактовые частоты обмена до 20 МГц (a 45DB011D, кстати, даже до 66 МГц), но мы, конечно, себе такое позволить не можем, и скромно обойдемся величиной 1 МГц— максимально допустимой для аппаратного SPI в обычном режиме (без удвоения частоты) при частоте тактового генератора 4 МГц. Отметим, что после включения питания сразу начинать операции с микросхемой 45DB011B нельзя: необходимо выждать не менее 20 мс (в программе далее это не отражено, т. к. запуск процедур будет осуществляться вручную).
Конкретная микросхема выбирается аппаратно через контакт "выбор кристалла" /CS (напомним, что активный уровень на этом выводе— низкий, потому обычно он обозначается с инверсией).

Программа обмена с памятью 45DB011В по SPI
Полностью текст программы обмена с памятью 45DB01 IB по SPI приведен в приложении 3. Программа написана на основе примера (модифицированного и с исправленными неточностями), описанного в [12].

По прерыванию от кнопки Кн1 мы запускаем TimerO, который будет служить средством антидребезга: прерывания от кнопки будут сразу запрещаться, а в прерывании таймера по истечении времени в 1 с разрешаться опять (для отсчета одной секунды мы заведем счетчик переполнений, который при тактовой частоте 4 МГц и коэффициенте 1/256 должен считать до 61). В этом же прерывании будем запускать процедуры записи (write) и чтения (read) с последующей выдачей результата "наружу" через UART (операция outcom, см. главу 13).

Процедуры эти здесь в значительной степени демонстрационные: мы будем заполнять 256 байтов в буфере, начиная с нулевого адреса, значением счетчика (count) этих же байтов, т. е. последовательными возрастающими значениями, начиная с нуля.
После операции записи в буфер всех 256 байтов следует операция переноса буфера в страницу памяти (для примера произвольно выберем страницу с адресом 100). Для проверки бита 7 (RDY/BUSY) в регистре статуса микросхемы 45DB011В мы организуем замкнутый цикл чтения этого регистра до момента установки этого бита в единичное состояние.

Заметки на полях
Это довольно опасный момент — если связь с памятью прервется, то программа "повиснет", — но^как мы говорили ранее, такое часто встречается в практике программирования МК, ведь если память окажется с дефектом, то, скорее всего, и все устройство можно считать неисправным, так что дальнейшая работа программы уже не понадобится. В критичных случаях в цикл ожидания ответа от памяти можно, например, "вклинить" то же самое прерывание таймера, которое в случае неудачи по истечении некоторого времени прервет цикл ожидания и отправит через UART условный код, сигнализирующий о неисправности памяти. Другой более распространенный прием — запуск сторожевого таймера, который попросту перезапустит контроллер при "зависании" (см. главу 14).

Записанные значения мы будем читать (процедура read): сначала следует перенос страницы в буфер, затем ожидание окончания операции, как и в случае записи, затем последовательное побайтное чтение из буфера с последующей посылкой через UART на внешний компьютер, чтобы убедиться в правильности чтения/записи наглядно.

Запись и чтение flash-карт
Существует множество разновидностей карт на основе flash-памяти: только основных семейств около полудюжины — сейчас в ходу Compact Flash, Secure Digital, Multi Media Card, Memory Stick, xD-picture, все еще можно встретить устройства, поддерживающие полузабытые Smart Media и практически совсем забытые PC Card. В рамках каждого из семейств имеется значительное число модификаций, иногда несовместимых между собой. Сами семейства различаются в первую очередь интерфейсом доступа — так, Compact Flash (как и совместимые с ними PC Card) и Smart Media имеют параллельный интерфейс, в случае Compact Flash совместимый с шиной для подключения жестких дисков IDE/ATA, остальные обладают различными последовательными интерфейсами.



     
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru