Вы уже знакомы с двумя интерфейсами связи, используемыми платой Arduino: шиной I2C и последовательной шиной UART. В этой главе вы узнаете о третьем интерфейсе цифровой связи, поддерживаемом аппаратными средствами Arduino, о последовательной шине периферийного интерфейса (или SPI).
В отличие от I2C, шина SPI имеет отдельные линии для отправки и получения данных, а также дополнительную линию для выбора ведомого устройства. Это требует
- 187 -
наличия дополнительных выводов, но устраняет проблему адресации ведомого устройства. SPI-интерфейс, по сравнению с более высокой скорости. Далее мы рассмотрим встроенную в Arduino IDE библиотеку SPI и аппаратные средства платы Arduino для подключения цифрового потенциометра. С помощью цифрового потенциометра будем регулировать яркость светодиода и громкость динамика, что позволит создать простое устройство, формирующее световые и звуковые эффекты.
ПРИМЕЧАНИЕ
Вы можете шаг за шагом посмотреть демонстрационный видеоурок к главе, расположенный по адресу http://www.jeremyblum.com/2011/02/2011/02/20/ardulno-tutorial-8-spl-lnterfaces[11]. Этот видеоурок также доступен на сайте издательства Wiley.
9.1. Общие сведения о протоколе SPI
Интерфейс SPI, разработанный компанией "Моторола", представляет собой полнодуплексный последовательный стандарт связи, который поддерживает одновременный двунаправленный обмен данными между ведущим устройством (мастером)
и одним или несколькими подчиненными. Поскольку протокол SPI не имеет формального стандарта, работа различных устройств SPI может немного отличаться (например, различно число передаваемых в пакете битов или может отсутствовать линия выбора ведомого устройства). Далее рассмотрим общепринятые команды SPI, которые поддерживаются в Arduino IDE.
ВНИМАНИЕ!
Так как техническая реализация протокола 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 -
Любой интерфейс SPI содержит, как минимум, четыре линии передачи данных. Для каждого ведомого устройства добавляются дополнительные линии SS. Прежде чем отправлять или получать данные через SPI, нужно выяснить, что делают эти линии ввода-вывода и как они должны быть подключены (табл. 9.2).
Таблица 9.2. Описание линий ввода-вывода интерфейса SPI
Линии SPI | Описание |
MOSI | Линия для отправки последовательных данных от ведущего устройства к ведомому |
MISO | Линия для отправки последовательных данных от ведомого устройства к ведущему |
SCLK | Линия синхронизации последовательных данных |
SS | Линия выбора ведомого устройства, активный уровень - низкий |
В отличие от интерфейса I2C, подтягивающие резисторы здесь не требуются, и протокол полностью двунаправленный. Итак, чтобы подключить устройство SPI к плате Arduino, необходимо соединить его с контактами MOSI, MISO, SCLK и SS.
После этого все готово к использованию Arduino библиотеки SPI.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии