- •Перечень сокращений
- •Предисловие
- •Введение
- •Часть 1. Архитектура и аппаратные средства микроконтроллера LPC214x
- •1.1 Общие сведения о микроконтроллерах LPC214x
- •1.2 Программистская модель процессорного ядра ARM7TDMI
- •1.2.1 Режимы работы ядра ARM7
- •1.2.2 Система регистров
- •1.2.3 Слово состояния программы
- •1.2.4 Организация памяти
- •1.3 Система команд
- •1.3.1 Команды арифметической и логической обработки
- •1.3.2 Команды умножения
- •1.3.3 Команды регистровой пересылки
- •1.3.4 Команды загрузки и сохранения регистров
- •1.3.5 Команды пакетного обмена с памятью
- •1.3.6 Команды передачи управления
- •1.3.7 Команды обращения к слову состояния программы
- •1.4 Методы адресации
- •1.4.1 Непосредственная адресация
- •1.4.2 Регистровая адресация
- •1.4.3 Косвенная адресация
- •1.4.4 Индексная адресация
- •1.5 Процедура начальной загрузки и режимы отображения памяти
- •1.6 Обработка исключительных ситуаций
- •1.7 Система тактирования
- •1.7.1 Выбор тактовой частоты микроконтроллера
- •1.7.2 Настройка тактирования периферийных устройств
- •1.8 Модуль ускорения памяти
- •1.9 Внешние выводы микроконтроллера
- •1.9.1 Служебные контакты
- •1.9.2 Программно-управляемые линии ввода-вывода
- •1.9.3 Альтернативные функции линий ввода вывода
- •1.10 Цифровые порты ввода-вывода
- •1.10.1 Управление портом через низкоскоростную шину
- •1.10.2 Управление портом через высокоскоростную шину
- •1.11 Система прерываний
- •1.11.1 Назначение системы прерываний
- •1.11.2 Процесс обработки прерываний IRQ
- •1.11.3 Процесс обработки быстрых прерываний FIQ
- •1.11.4 Регистры управления системой прерываний
- •1.11.5 Порядок настройки прерывания IRQ
- •1.11.6 Порядок настройки быстрого прерывания FIQ
- •1.11.7 Процедура обработки прерывания
- •1.11.8 Задержка обработки прерывания
- •1.12 Внешние прерывания
- •1.12.1 Регистры управления блоком внешних прерываний
- •1.12.2 Порядок настройки блока внешних прерываний
- •1.13 Таймеры-счетчики
- •1.13.1 Режим таймера и схема совпадения
- •1.13.2 Режим счетчика
- •1.13.3 Схема захвата
- •1.13.4 Управляющие регистры
- •1.13.5 Формирование интервалов времени через систему прерываний
- •1.13.6 Измерение периода и длительности импульса с помощью устройства захвата
- •1.13.7 Подсчет числа импульсов в единицу времени
- •1.14 Широтно-импульсный модулятор
- •1.14.1 Основы функционирования
- •1.14.2 Дополнительные возможности
- •1.14.3 Регистры управления ШИМ
- •1.14.4 Порядок настройки ШИМ
- •1.15 Аналого-цифровые преобразователи
- •1.15.1 Краткие сведения о встроенных АЦП
- •1.15.2 Общие рекомендации по использованию АЦП
- •1.15.3 Управляющие регистры
- •1.15.4 Порядок настройки АЦП
- •1.15.5 Программный запуск аналого-цифрового преобразователя
- •1.15.6 Запуск аналого-цифрового преобразователя по таймеру
- •1.15.7 Программный опрос готовности АЦП
- •1.15.8 Опрос готовности АЦП по прерыванию
- •1.15.9 Считывание и масштабирование результата АЦП
- •1.16 Цифро-аналоговый преобразователь
- •1.16.1 Регистр управления ЦАП
- •1.16.2 Рекомендации по применению ЦАП
- •1.17 Последовательный синхронный приемо-передатчик SPI
- •1.17.1 Назначение и основы функционирования интерфейса SPI
- •1.17.2 Управляющие регистры
- •1.17.3 Передача и прием данных в режиме ведущего
- •1.17.4 Передача и прием данных в режиме ведомого
- •1.18 Последовательный синхронный приемо-передатчик I2С
- •1.18.1 Назначение и основы функционирования интерфейса I2С
- •1.18.2 Управляющие регистры
- •1.18.3 Настройка модуля I2C
- •1.18.4 Типовые циклы обмена данными по шине I2C
- •1.19 Последовательный асинхронный приемопередатчик UART
- •1.19.1 Назначение и основы функционирования порта UART
- •1.19.2 Управляющие регистры
- •1.19.3 Настройка порта UART
- •1.19.4 Прием байта с опросом флага
- •1.19.5 Передача байта с опросом флага
- •1.19.6 Прием и передача данных с использованием прерываний
- •1.19.7 Прием и передача пакетов данных
- •1.19.8 Диагностика ошибок
- •1.19.9 Автоматическая настройка скорости
- •1.20 Часы реального времени
- •1.20.1 Основные возможности часов реального времени
- •1.20.2 Управляющие регистры
- •1.20.3 Рекомендации по применению
- •1.21 Управление питанием и идентификация источников сброса
- •1.21.1 Краткие сведения о мониторе питания
- •1.21.2 Управляющие регистры
- •Часть 2. Разработка и отладка программ с помощью современных инструментальных средств
- •2.1 Форматы представления чисел
- •2.1.1 Основные коды представления целых чисел
- •2.1.2 Форматы представление целых чисел, приятные в языке Си
- •2.1.3 Форматы чисел c плавающей точкой стандарта IEEE754
- •2.2 Основы программирования на языке Си
- •2.2.1 Структура программы
- •2.2.2 Числовые константы
- •2.2.3 Переменные и именованные константы
- •2.2.4 Оператор присваивания, выражения и операции
- •2.2.5 Условный оператор
- •2.2.6 Приведение и преобразование типов
- •2.2.7 Массивы
- •2.2.8 Строки символов
- •2.2.9 Структуры
- •2.2.10 Объединения
- •2.2.11 Указатели
- •2.2.12 Ветвление
- •2.2.13 Множественное ветвление
- •2.2.14 Цикл со счетчиком
- •2.2.15 Циклы с предусловием и постусловием
- •2.2.16 Функции
- •2.2.17 Некоторые директивы компилятора
- •2.2.18 Библиотека математических функций MATH.h
- •2.2.19 Функция создания форматированных строк SNPRINTF
- •2.2.20 Ассемблер в Си-программах
- •2.3 Интегрированная среда разработки Keil µVision 4
- •2.3.1 Создание проекта
- •2.3.2 Создание файла программы
- •2.3.3 Настройка проекта
- •2.3.4 Набор текста программы
- •2.3.5 Компиляция программы
- •2.3.6 Отладка программы
- •2.3.7 Основные отладочные инструменты среды Keil µVision 4
- •2.3.8 Управление распределением памяти
- •2.4 Методика отладки программ
- •2.4.1 Быстрый поиск ошибок
- •2.4.2 Ввод и вывод дискретных сигналов
- •2.4.3 Таймер-счетчик. Формирование интервалов времени
- •2.4.4 Таймер-счетчик. Формирование внешних сигналов совпадения
- •2.4.5 Таймер-счетчик. Счетчик внешних событий
- •2.4.6 Таймер-счетчик. Устройство захвата
- •2.4.7 Широтно-импульсный модулятор
- •2.4.8 Аналого-цифровой преобразователь
- •2.4.9 Цифро-аналоговый преобразователь
- •2.4.10 Приемопередатчик SPI
- •2.4.11 Приемопередатчик I2C
- •2.4.12 Приемопередатчик UART
- •2.4.13 Часы реального времени
- •2.5 О программировании ARM7 на ассемблере
- •2.5.1 Основные правила записи программ на ассемблере
- •2.5.2 Псевдокоманды
- •2.5.3 Директивы ассемблера
- •2.5.4 Макросы
- •2.5.5 Пример простой программы
- •2.6 Распространенные средства разработки и отладки
- •2.6.1 Демонстрационные платы EA-EDU-001 и EA-EDU-011
- •2.6.2 Внутрисхемный отладчик J-Link
- •2.6.3 Утилиты программирования ПЗУ LPC Flash Utility и FlashMagic
- •2.6.4 Программа-терминал 232Analyzer
- •2.6.5 Низкоуровневый редактор диска DMDE
- •Часть 3. Решение типовых задач локального управления
- •3.1 Формирование временной задержки с помощью цикла
- •3.1.1 Задание
- •3.1.2 Общие рекомендации
- •3.1.3 Алгоритм программы
- •3.1.4 Отладка
- •3.1.5 Дополнительные сведения о формировании временной задержки
- •3.2 Формирование дискретного сигнала с помощью таймера
- •3.2.1 Задание
- •3.2.2 Общие рекомендации
- •3.2.3 Алгоритм программы
- •3.3 Опрос дискретного датчика или кнопки
- •3.3.1 Задание
- •3.3.2 Общие рекомендации
- •3.3.3 Алгоритм программы
- •3.3.4 Отладка
- •3.4 Опрос состояния механических контактов с подавлением дребезга
- •3.4.1 Задание
- •3.4.2 Общие рекомендации
- •3.4.3 Алгоритм программы
- •3.4.4 Отладка
- •3.5 Опрос клавиатуры с автоповтором
- •3.5.1 Задание
- •3.5.2 Общие рекомендации
- •3.5.3 Алгоритм программы
- •3.5.4 Отладка
- •3.6 Формирование импульсного управляющего сигнала с помощью модуля ШИМ
- •3.6.1 Задание
- •3.6.2 Общие сведения
- •3.6.3 Алгоритм программы
- •3.6.4 Отладка
- •3.6.5 Синхронизация внешним сигналом
- •3.7 Формирование сигналов специальной формы с помощью ЦАП
- •3.7.1 Задание
- •3.7.2 Основы
- •3.7.3 Алгоритм программы
- •3.7.4 Повышение точности генерирования частоты
- •3.7.5 Выбор числа дискрет
- •3.8 Управление двухфазным шаговым двигателем
- •3.8.1 Задание
- •3.8.2 Общие сведения
- •3.8.3 Алгоритм программы
- •3.9 Применение ШИМ для формирования низкочастотных аналоговых сигналов
- •3.9.1 Задание
- •3.9.2 Основные сведения
- •3.9.3 Алгоритм основной программы
- •3.9.4 Алгоритм процедуры обработки прерывания
- •3.10 Управление символьным жидкокристаллическим индикатором
- •3.10.1 Задание
- •3.10.2 Управление модулем жидкокристаллической индикации
- •3.10.3 Разработка функции управления ЖКИ с ожиданием готовности
- •3.10.4 Функция вывода строки символов
- •3.10.5 Разработка функции инициализации модуля ЖКИ
- •3.10.6 Разработка тестовой программы
- •3.10.7 Управление ЖКИ с опросом флага готовности
- •3.10.8 Программирование произвольных символов
- •3.11 Управление матричным светодиодным индикатором
- •3.11.1 Задание
- •3.11.2 Основные рекомендации
- •3.11.3 Алгоритм основной программы
- •3.11.4 Алгоритм процедуры обработки прерывания
- •3.11.5 Реализация движения строки
- •3.12 Управление матричным жидкокристаллическим дисплеем
- •3.12.1 Управление дисплеем на основе контроллера PCF8833
- •3.12.2 Построение простейших геометрических фигур
- •3.13 Измерение постоянного напряжения
- •3.13.1 Задание
- •3.13.2 Основные рекомендации
- •3.13.3 Алгоритм основной программы
- •3.13.4 Алгоритм процедуры обработки прерывания от АЦП
- •3.13.5 АЦП с циклическим опросом нескольких каналов
- •3.13.6 Автоматический выбор пределов измерения
- •3.14 Измерение параметров уровня переменного напряжения
- •3.14.1 Задание
- •3.14.2 Основные рекомендации
- •3.14.3 Алгоритм основной программы
- •3.14.4 Алгоритм процедуры обработки прерывания
- •3.15 Измерение ускорения с помощью трехосевого акселерометра
- •3.16 Измерение интервалов времени с помощью таймера
- •3.16.1 Задание
- •3.16.2 Общие рекомендации
- •3.16.3 Алгоритм основной программы
- •3.16.4 Алгоритм процедуры обработки прерывания
- •3.16.5 Повышение разрешающей способности путем усреднения
- •3.16.6 Введение поправок
- •3.17 Измерение частоты с помощью счетчика
- •3.17.1 Задание
- •3.17.2 Основные рекомендации
- •3.17.3 Алгоритм программы
- •3.17.4 Повышение точности измерений
- •3.18 Опрос цифрового датчика температуры. Интерфейс I2C
- •3.18.1 Задание
- •3.18.2 Общие рекомендации
- •3.18.3 Алгоритм программы
- •3.20 Обмен данными с электрически перепрограммируемым ПЗУ
- •3.20.1 Задание
- •3.20.2 Общие сведения о микросхемах EEPROM
- •3.20.3 Адресация в микросхемах EEPROM
- •3.20.4 Порядок чтения EEPROM
- •3.20.5 Порядок записи EEPROM
- •3.20.6 Разработка программы чтения EEPROM
- •3.20.7 Разработка функции записи блока данных в EEPROM
- •3.21 Интерфейс RS-232. Прием и передача простых команд
- •3.21.1 Задание
- •3.21.2 Алгоритм программы
- •3.21.3 Автоматическая настройка скорости
- •3.22.1 Задание
- •3.22.2 Основные рекомендации
- •3.22.3 Алгоритм программы
- •3.23 Интерфейс RS-232. Прием пакета переменной длины
- •3.23.1 Задание
- •3.23.2 Основы реализации
- •3.23.3 Алгоритм программы
- •3.24 Обмен данными с картой памяти Secure Digital
- •3.24.1 Задание
- •3.24.2 Общие сведения о карах FLASH-памяти SD/MMC
- •3.24.3 Команды SD/MMC
- •3.24.4 Процедура инициализации карты
- •3.24.5 Чтение и запись данных
- •3.24.6 Обработка ошибок
- •3.24.7 Комментарии к алгоритму и программе
- •Алфавитный указатель управляющих регистров
- •Список литературы
- •Содержание
8. Когда кадровая синхронизация будет достигнута, счетчик кадров начнет увеличиваться.
9–10. Когда счетчик достигнет значения 8, последнее слово нужно сохранить, как длину кадра.
if (k==8) N=Frame.Words[1];
11.Упаковка байтов в кадр продолжается до тех пор, пока счетчик не достигнет предела 7+4N. Выполнение этого условия свидетельствует о завершении приема кадра и готовности данных к использованию. Остальные блоки относятся к использованию принятых данных.
12.Обнуление счетчика байт необходимо для подготовки приема следующего кадра.
14–16. В цикле формируются и индицируются первые четыре числа из кадра. Подробно рассмотрим только 15-ый блок
snprintf(S,4,"%3.1f",Frame.Floats[i+2]);
Укажем также, что позиция на индикаторе для каждого числа равна 4i. Повтор в цикле таких команд даст верхнюю строку индикатора в формате
x.x x.x x.x x.x
3.24 Обмен данными с картой памяти Secure Digital
3.24.1 Задание
Разработать библиотеку функций взаимодействия с картами памяти типа SD/MMC. Проверить подпрограммы путем записи и считывания блока объемом 512 байт.
3.24.2 Общие сведения о карах FLASH-памяти SD/MMC
Карты FLASH-памяти SD (Secure Digital) и MMC (MultiMedia Card)
чрезвычайно распространены в компьютерной технике. Они служат накопителями информации в цифровых фотоаппаратах и других мобильных устройствах. Запоминающие устройства SD/MMC отличаются малыми габаритами, высокой надежностью хранения данных, сравнительно низкой ценой и высокой емкостью (емкость может превышать 8 Гбайт). Эти достоинства делают их удобным для применения и в средствах промышленной автоматики. Сегодня MMC встречается редко, а SD часто применяются в модификации microSD и miniSD. Использование простого переходника делает их абсолютно совместимыми с SD/MMC.
Карты памяти SD/MMC поддерживают два интерфейса: специальный интерфейс MultiMedia Card, использующий шесть проводников, не считая контактов питания, и интерфейс SPI (4 проводника). Применение последнего предоставляет меньше возможностей, однако позволяет решать все необходимые задачи чтения и записи данных. Здесь ограничимся описанием только интерфейса SPI. Более того, будут подробно рассмотрены лишь основные, совершенно необходимые команды. Остальные предлагается изучить самостоятельно по многочисленным инструкциям. Реализация функций взаимодействия с картами памяти оказывается громоздкой. Поэтому кроме алгоритмов будет приведен полный листинг программы.
239
При составлении данного описания руководствовались в основном документацией фирмы Sandisk, примером, предложенным фирмой NXP, а
также интернет-ресурсом [http://www.dharmanitech.com/]
3.24.3 Команды SD/MMC
Каждый цикл обмена с картой памяти должен начинаться с установки активного низкого уровня на линии CS. Высокий уровень может быть установлен после завершения одной команды, а может удерживаться неизменно активным в течение нескольких команд.
Воздействие на карту выполняется командами одинакового формата (см. рисунок 3.24.1 вверху). Каждая команда имеет длину 6 байт. Первый байт состоит из битов 01 и шестиразрядного кода команды, далее следует 32разрядный аргумент, уточняющий действие команды, затем циклический код контроля ошибок CRC7, дополненный в конце единичным битом. Основные команды сведены в таблицу 3.24.1.
На большинство команд контроллер карты отвечает одним байтом, обозначенным на рисунке 3.24.1, как «ответ на команду». Ответ чаще всего приходит с некоторой задержкой, поэтому требуется организовать циклический опрос карты в ожидании ответа. Байт ответа имеет ненулевой старший разряд и содержит коды ошибок. В большинстве случаев он должен быть равен нулю.
Напомним, что в отличие от I2С, при обмене по SPI только ведущий может генерировать тактовые сигналы. Причем во время приема на линии передатчика MOSI (контакт DI карты) должен быть установлен высокий уровень. Поэтому для получения ответа необходимо повторять отправку байта 0xFF с одновременным приемом байта.
Внимание! После получения ответа и до формирования очередной команды необходимо выполнить холостую передачу байта 0xFF (восемь тактовых сигналов при ).
3.24.4 Процедура инициализации карты
При выполнении процедуры инициализации тактовая частота приемопередатчика SPI не должна превышать 400 кГц.
После включения питания карта находится в режиме интерфейса Multimedia Card. Для перевода в режим SPI требуется установить высокий уровень на линии CS и подать не менее 74 тактов на линии CLK (то есть не менее десяти переданных байт). Далее выполнить программный сброс, подав команду CMD0 с кодом (0x40 0x00 0x00 0x00 0x00 0x95). Здесь 0x95 —
циклический код CRC7, рассчитанный заранее (см. приложение). Дождаться ответа 0x01, показывающего, что карта находится в режиме ожидания.
Инициализация карты начинается с команды CMD1 с кодом (0x41 0x00 0x00 0x00 0x00 0xFF). В режиме SPI по умолчанию контроль CRC7 картой не производится (хотя при необходимости может быть включен), поэтому здесь и далее вычислять код CRC7 нет необходимости. Можно передавать произвольный байт, заканчивающийся единицей (здесь 0xFF).
240
Формат команды |
||
47 |
46 |
45 |
0 |
1 |
Код команды |
40 |
|
|
S |
2 |
|
R |
|
M |
|
39 |
|
|
R |
2 |
|
R |
|
M |
|
Аргумент
8 |
7 |
1 |
0 |
Аргумент |
|
CRC7 |
1 |
Ответ на команду |
Подтверждение пакета данных |
7 |
6 |
|
5 |
|
4 |
|
|
AR |
|
R |
A |
|
|
0 |
|
D |
|
|
||
D |
|
R |
ER |
R |
||
|
P R |
|
||||
|
ER |
A |
R |
ER |
||
|
|
E |
|
|||
Ошибочный параметр |
|
|
|
|
|
|
Ошибка адреса |
|
|
|
|
||
Ошибка при стирании |
|
|
|
3 |
|
2 |
|
|
1 |
|
0 |
7 |
||
|
C |
|
L |
|
RA |
|
E |
|
|||
R |
R |
IL |
O |
|
|
||||||
C |
|
|
E |
E |
IDL |
|
|||||
E |
R |
C |
M |
R |
S |
|
|
||||
|
|
|
|
|
|
|
|||||
Ошибка |
|
|
|
|
|
Ожидание |
|
||||
CRC |
|
|
|
|
|
|
Стирание прервано |
||||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
Недопустимая команда |
|
5 |
4 |
3 |
1 |
0 |
|
|
|
0 |
STATUS |
1 |
|
|
|
|
Код результата: |
|
|
110 |
– ошибка записи, |
101 – ошибка CRC, |
|||
010 |
– данные приняты |
|
|
Сообщение об ошибке |
|
|
||||||
7 |
6 |
5 |
|
4 |
3 |
2 |
1 |
0 |
|
|
|
|
CK |
E |
C |
CC R |
RR |
0 |
0 |
0 |
L |
RANG |
EC IL |
|||
|
F |
E |
|
|||||
|
|
|
O |
|
A |
R |
E |
|
|
|
Блокировка |
|
|
Ошибка |
|||
|
|
|
записи |
|
|
|
Ошибка контроллера |
|
|
|
|
|
|
|
|
|
|
|
Адрес вне диапазона |
|
Ошибка коррекции данных |
Рисунок 3.24.1 – Форматы команды и основных ответных сообщений карт SD/MMC
DI |
|
|
|
|
|
|
|
|
|
0x51 |
Аргумент |
CRC7 |
|
Повторяется при пакетном чтении |
|
|
|
||
|
|
|
|
Маркер блока данных: |
|
||||
|
|
|
|
|
|
|
|
||
DO |
|
|
|
|
|
|
0xFС – начало блока (при пакетной записи) |
||
|
|
|
|
|
|
|
|||
|
|
Ответ |
Маркер |
Данные |
Данные |
CRC16 |
0xFD – конец блока (далее блок не передается) |
||
|
|
|
|
|
|
|
0xFE – начало блока |
Холостые |
|
|
|
|
|
|
|
|
8 тактов |
||
|
|
|
|
|
|
|
|
|
|
CLK |
|
|
|
|
|
|
|
|
|
DI |
|
|
|
|
|
|
|
|
|
0x58 |
Аргумент |
CRC7 |
Маркер |
Данные |
Данные |
CRC16 |
|
Повторяется при пакетной записи |
|
|
|
|
|
|
|
|
|
||
DO |
|
|
|
|
|
|
|
Занят |
Готов |
|
|
Ответ |
|
|
|
|
Подтв. |
0x00 |
0xFF |
|
|
|
|
|
|
|
|
|
Холостые |
|
|
|
|
|
|
|
|
|
8 тактов |
CLK
CS
Рисунок 3.24.2 – Временные диаграммы обмена данными с картой памяти SD/MMC (вверху — чтение, внизу — запись)
241
Таблица 3.24.1 – Основные команды карты памяти MMC/SD
|
Выполняемая |
Код с |
|
Ответ при |
Длина |
|
Обознач. |
учетом |
Аргумент |
отсутствии |
|||
операция |
пакета, байт |
|||||
|
ст. битов |
|
ошибок |
|||
|
|
|
|
|||
CMD0 |
Режим |
0x40 |
— |
0x01 |
— |
|
ожидания |
||||||
|
|
|
|
|
||
CMD1 |
Инициализа- |
0x41 |
— |
0x00 |
— |
|
ция |
||||||
|
|
|
|
|
||
CMD12 |
Прервать |
0x4C |
— |
0x00 |
— |
|
чтение |
||||||
|
|
|
|
|
||
CMD16 |
Установка |
0x50 |
Размер |
0x00 |
— |
|
размера блока |
блока |
|||||
|
|
|
|
|||
CMD17 |
Чтение блока |
0x51 |
Адрес |
0x00 |
1…512 + |
|
+ 2 (CRC16) |
||||||
|
|
|
|
|
||
|
Чтение |
|
|
|
Не |
|
CMD18 |
нескольких |
0x58 |
Адрес |
0x00 |
||
ограничена |
||||||
|
блоков |
|
|
|
||
|
|
|
|
|
||
CMD24 |
Запись блока |
0x58 |
Адрес |
0x00 |
512 + |
|
+2 (CRC16) |
||||||
|
|
|
|
|
||
|
Запись |
|
Адрес |
|
Не |
|
CMD25 |
нескольких |
0x59 |
первого |
0x00 |
||
ограничена |
||||||
|
секторов |
|
сектора |
|
||
|
|
|
|
Так как инициализация занимает около 150 мс, команду CMD1 с последующим ожиданием ответа необходимо повторять несколько раз. Причем здесь идет речь не просто о циклической передаче байта 0xFF, сопровождающейся приемом ответа, а о периодическом повторе самой команды. Рекомендуется после подачи команды опрашивать карту примерно 250 раз (как раз примерно 150 мс при кГц), после чего повторить команду и опрос. И так до тех пор, пока, наконец, не поступит ответ 0x00. Ответ, скорее всего, будет получен со второй попытки.
Когда инициализация завершена, рекомендуется увеличить скорость передачи данных до максимальной, что для LPC2148 составляет 7,5 Мбит/с.
3.24.5 Чтение и запись данных
Чтение и запись информации осуществляется блоками. При чтении размер блока может быть произвольным от 1 до 512 байт. При записи он фиксированный и составляет 512 байт, что соответствует одному сектору в логической организации накопителя. Размер блока устанавливается командой CMD16 (код с учетом старших бит 0x50). Собственно размер задается младшими байтами аргумента (шестнадцатеричные значения 0x0001– 0x0200). Как обычно после команды выполняется опрос (передача байта 0xFF) и ожидание ответа 0x00. Цикл чтения и записи показан на временных диаграммах (рисунки 3.24.1, 3.24.2).
242