ВНИМАНИЕ!
Так как техническая реализация протокола SPI может быть разной, необходимо изучать техническое описание, прилагаемое к каждому устройству.
В зависимости от требований конкретного устройства существуют четыре основных способа реализации протокола SPI. SPI-устройства выступают при обмене в качестве подчиненных синхронных устройств, данные синхронизируются с тактовым сигналом (SCLK). Подчиненное устройство может воспринимать данные либо по положительному, либо по отрицательному фронту тактового сигнала (так называемая фаза синхронизации), а активное состояние SCLK по умолчанию может быть высоким или низким уровнем (так называемая полярность синхронизации).
В итоге получается, что обмен SPI в общей сложности можно настроить четырьмя способами (табл. 9.1).
Таблица 9.1. Режимы SP/ в Arduino IDE
No
|
Режим SPI
|
Полярность синхронизации
|
Фаза синхронизации
|
1
|
Mode O
|
LOW
|
По фронту синхросигнала
|
2
|
Mode 1
|
LOW
|
По спаду синхросигнала
|
- 188 -
Таблица 9.1 (окончание)
No
|
Режим SPI
|
Полярность синхронизации
|
Фаза синхронизации
|
3
|
Mode 2
|
HIGH
|
По спаду синхросигнала
|
4
|
Mode 3
|
HIGH
|
По фронту синхросигнала
|
9.2. Подключение устройств SPI
Систему обмена данными через SPI несложно настроить. Для связи между мастером и всеми подчиненными устройствами используется три вывода:
• последовательный сигнал синхронизации (SCLK);
• выход ведущего, вход ведомого (MOSI);
• вход ведущего, выход ведомого (MISO).
У каждого ведомого устройства также есть контакт выбора данного устройства (контакт SS). Следовательно, общее число портов ввода-вывода, необходимых на мастер-устройстве, всегда будет 3+n, где n - число ведомых устройств. Пример SPI-системы с двумя ведомыми устройствами изображен на рис. 9.1.
Рис. 9.1. Пример конфигурации SPI-устройств
- 189 -
9.2.1. Конфигурация интерфейса SPI
Любой интерфейс SPI содержит, как минимум, четыре линии передачи данных. Для каждого ведомого устройства добавляются дополнительные линии SS. Прежде чем отправлять или получать данные через SPI, нужно выяснить, что делают эти линии ввода-вывода и как они должны быть подключены (табл. 9.2).
Таблица 9.2. Описание линий ввода-вывода интерфейса SPI
Линии SPI
|
Описание
|
MOSI
|
Линия для отправки последовательных данных от ведущего устройства к ведомому
|
MISO
|
Линия для отправки последовательных данных от ведомого устройства к ведущему
|
SCLK
|
Линия синхронизации последовательных данных
|
SS
|
Линия выбора ведомого устройства, активный уровень - низкий
|
В отличие от интерфейса I 2C, подтягивающие резисторы здесь не требуются, и протокол полностью двунаправленный. Итак, чтобы подключить устройство SPI к плате Arduino, необходимо соединить его с контактами MOSI, MISO, SCLK и SS.
После этого все готово к использованию Arduino библиотеки SPI.
Так как SPI не является универсальным стандартом, некоторые производители устройств SPI могут по-разному называть линии связи SPI. Линию выбора ведомого иногда называют CS, линию синхронизации - CLK; контакты MOSI и MISO ведомых устройств называют входом последовательных данных (SDI) и выходом последовательных данных (SDO) соответственно.
9.2.2. Протокол передачи данных SPI
Передача данных по SPI синхронизируется тактовым сигналом и зависит от состояния линий SS. Все команды, отправляемые мастером, проявляются на входах MOSI, MISO, SCLK всех ведомых устройств. Состояние контакта SS сообщает устройству, игнорировать эти данные или принимать. При написании программы следует учитывать, что при передаче данных только один контакт SS должен иметь низкий уровень.
Последовательность действий для связи с устройством SPI выглядит следующим образом:
1. У становить низкий уровень на линии SS устройства, с которым хотите установить связь.
2. Переключать на тактовой линии уровень сигнала вверх и вниз со скоростью, меньшей или равной скорости передачи, поддерживаемой ведомым устройством.
3. На каждом такте отправлять 1 бит данных по линии MOSI или получать 1 бит данных по линии MISO.
- 190 -
4. Продолжать, пока передача (или прием) не закончится, и остановить переключения тактовой линии.
Читать дальше