Выбрать главу

Глава 9. Интерфейсная шина SPI

Интерфейсная

Список деталей

Для повторения примеров главы вам понадобятся следующие детали:

• плата Arduino Uno;

• USB-кабель В (для Uno );

• 1 красный светодиод;

• 1 желтый светодиод;

• 1 зеленый светодиод;

• 1 синий светодиод;

• 4 резистора номиналом 100 Ом;

• 2 резистора номиналом 4,7 кОм;

• динамик;

• цифровой SPI потенциометр МСР4231;

• перемычки;

• макетная плата.

Электронные ресурсы к главе

На странице http://www.exploringarduino.com/content/ch9 можно загрузить программный код, видеоуроки и другие материалы для данной главы. Кроме того, листинги примеров можно скачать со страницы www.wiley.com/go/exploringarduino в разделе Downloads.

Что вы узнаете в этой главе

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

вернуться

11

На русском: http://wiki.amperka.ru/видеоуроки:8-интерфейсы-spi.