20. Последовательный интерфейс SPI
20.1. Отличительные особенности
- Полнодуплексная, синхронная передача данных по трем линиям
- Ведущая или подчиненная работа
- Первым передается младший или старший бит данных
- Восемь программно-выбираемых скоростей
- Флаг прерывания по завершению передачи
- Флаг ошибочной записи в регистр данных
- Возобновление активной работы МК из режима IDLE
- Ведущий режим с удвоенной скоростью (CK/2)
20.2. Обзор
Последовательный интерфейс SPI - интерфейс для высокоскоростной синхронной передачи данных с использованием трех или четырех выводов ИС. С его помощью можно организовать высокоскоростное соединение между МК XMEGA и внешними ИС, а также между несколькими микроконтроллерами AVR. Интерфейс SPI поддерживает полнодуплексную передачу данных.
Устройство, подключенное к шине, должно действовать как ведущее устройство или как подчиненное. Ведущее устройство инициирует транзакции передачи данных и полностью ими управляет. Взаимодействие между ведущим и подчиненным ЦПУ через интерфейс SPI показано на рисунке 20.1. Система состоит из двух сдвиговых регистров, а также генератора синхронизации на стороне ведущего устройства.
Ведущий SPI инициирует цикл связи установкой низкого уровня на выводе выбора подчиненного устройства (SS) той ИС, с которой необходимо установить соединение. Подлежащие передаче данные ведущее и подчиненное устройства помещают в сдвиговые регистры. После этого, ведущее устройство начинает генерировать импульсы синхронизации на линии SCK, что приводит к взаимному обмену данными. Передача данных сдвигом в направлении от ведущего устройства к подчиненному всегда выполняется на линии MOSI, а передача в обратном направлении - на линии MISO. После передачи каждого пакета данных, ведущее устройство, в целях синхронизации подчиненного устройства, может перевести линию SS в высокое состояние.
Рисунок 20.1. Механизм взаимодействия ведущего и подчиненного модулей SPI
Модуль SPI микроконтроллеров XMEGA оснащен одноуровневой буферизацией в канале передачи и двухуровневой буферизацией в канале приема. Это означает, что подлежащие передаче байты данных, нельзя поместить в регистр данных модуля SPI пока полностью не завершится цикл сдвигов. Во время приема данных, принятую посылку необходимо успеть считать прежде, чем завершится прием очередной посылки. В противном случае, первый байт данных будет потерян.
В подчиненном режиме SPI, логика управления выполняет выборку поступающего на вход SCK сигнала. Чтобы гарантировать корректность выборок сигнала синхронизации, необходимо соблюдать требования к длительности низкого и высокого уровней импульсов синхронизации: длительность и низкого и высокого уровней должна быть не менее 2 циклов синхронизации ЦПУ.
После разрешения работы модуля SPI, вступают в силу альтернативные настройки направления на выводах MOSI, MISO, SCK и SS в соответствии с таблицей 20.1. Выводы, которые отмечены как "задается пользователем", должны быть настроены программно.
Таблица 20.1. Перекрытие модулем SPI настроек порта ввода-вывода
Вывод |
Направление для ведущего SPI |
Направление для подчиненного SPI |
MOSI |
Задается пользователем |
Вход |
MISO |
Вход |
Задается пользователем |
SCK |
Задается пользователем |
Вход |
/SS |
Задается пользователем |
Вход |
20.3. Ведущий режим
Когда интерфейс SPI используется как ведущий, автоматическое управление линией SS не производится. Вывод SS необходимо настроить как выход и им необходимо управлять из программы пользователя. Если к шине подключено несколько подчиненных и/или ведущих устройств, то ведущий модуль SPI может использовать любые имеющиеся у МК линии ввода-вывода общего назначения для управления линией SS каждого подключенного к шине подчиненного устройства.
После записи байта в регистр данных включается в работу генератор синхронизации шины SPI и выполняется передача сдвигом восьми бит данных в подчиненное устройство. По завершении сдвига одного байта, генератор синхронизации шины SPI останавливается и устанавливается флаг прерывания модуля SPI. Записью нового байта в регистр данных ведущее устройство может продолжить передачу данных. Кроме того, он может сигнализировать о завершении передачи данных установкой низкого уровня на линии SS. Последний принятый байт данных сберегается в буферном регистре.
Если вывод SS настроен как вход, необходимо учитывать, что работа ведущего устройства будет возможной, только если на этом входе будет присутствовать высокий уровень. Если же вывод SS будет работать как вход и на нем будет присутствовать низкий уровень, то модуль SPI будет интерпретировать такую ситуацию, как попытку другого ведущего устройства получить управление над шиной. Во избежание конфликтов на шине, ведущее устройство выполняет следующие действия:
- Переходит в подчиненный режим.
- Устанавливает флаг прерывания модуля SPI.
|