Читаем Изучаем Arduino: инструменты и методы технического волшебства полностью

Вы уже знакомы с двумя интерфейсами связи, используемыми платой 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.

<p>9.1. Общие сведения о протоколе SPI</p>

Интерфейс 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

По фронту синхросигнала

<p>9.2. Подключение устройств SPI</p>

Систему обмена данными через 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.

Перейти на страницу:

Похожие книги