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
Линия выбора ведомого устройства, активный уровень - низкий
В отличие от интерфейса I2C, подтягивающие резисторы здесь не требуются, и протокол полностью двунаправленный. Итак, чтобы подключить устройство 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. Продолжать, пока передача (или прием) не закончится, и остановить переключения тактовой линии.
5. Установить на SS высокий уровень.
Обратите внимание, что на каждом такте данные должны быть отправлены (или получены). Например, далее в сценарии связи с цифровым потенциометром плата Arduino будет посылать данные, но ничего не получать от ведомого устройства.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОК