Подсоединение StartKIT к Raspberry Pi по протоколу SPI


Предыдущая | Следующая

Набор StartKIT оборудуется разъемами для интерфейсной связи с продуктами Raspberry Pi, соответствие разъемов полное, поэтому две платы можно соединить гибким шлейфом (рис. 6.53).

Протокол SPI

SPI — означает Serial Peripheral Interface (последовательный периферийный интерфейс). Интерфейс SPI используется для работы с различными периферийными устройствами — например, с различными ЦАП/АЦП, потенциометрами, датчиками, расширителями портов ввода/вывода (GPIO). С технической точки зрения SPI — это синхронная четырехпроводная шина. Она представляет собой соединение двух синхронных сдвиговых регистров, которые являются центральным элементом любого SPI-устройства. Для соединения используется конфигурация "ведущий-ве­домый", и лишь ведущий может генерировать импульсы синхронизации. В схеме всегда только один ведущий (в отличие от той же шины I2C, где возможен вариант с более чем одним ведущим), а количество ведомых может быть различно. В общем случае выход ведущего соединяется со входом ведомого и наоборот — выход ве­домого соединяется со входом ведущего. При подаче импульсов синхронизации на

выход SCK данные выталкиваются ведущим с выхода MOSI и захватываются ведомым по входу MISO. Таким образом, если подать количество импульсов синхронизации, соответствующее разрядности сдвигового регистра, то данные в регистрах обменяются местами. Отсюда следует, что SPI всегда работает в полнодуплексном режиме.

Контроллер SPI, как правило, реализуется периферийным блоком в микроконтроллере. В большинстве чипов он может работать как в режиме ведущего, так и в ре­жиме ведомого. Но в настоящее время Linux поддерживает только режим ведущего (Master).

Существует несколько способов включения SPI-устройств. Простейший из них вы видите на рис. 6.54.

В данном случае к ведущему все ведомые подключаются параллельно, за исключением сигнала выбора ведомого (SS). Для каждого ведомого необходим отдельный сигнал выбора ведомого (на рисунке они обозначены как SSx). В качестве сигналов выбора ведомого могут использоваться как специально предназначенные для этого выходы SPI-контроллера, так и порты ввода/вывода общего назначения (GPIO) микроконтроллера.

Два проводника служат для передачи данных, один для подачи тактовых импульсов и по одному сигналу выбора ведомого для каждого из ведомых.

Описание используемых сигналов:

* MOSI (Master Output, Slave Input (выход ведущего, вход ведомого)) — этот сиг­нал предназначен для последовательной передачи данных от ведущего к ведо­мому;

* MISO (Master Input, Slave Output (вход ведущего, выход ведомого)) — этот сиг­нал предназначен для последовательной передачи данных от ведомого к веду­щему;

* SCLK — Serial Clock (сигнал синхронизации) — используется для синхрониза­ции при передаче данных;

* ~CS — Chip Select (выбор микросхемы) — с помощью этого сигнала происхо­дит активация ведомого устройства.

Установка поддержки SPI в Raspberry Pi

Необходимо убедиться, что в Raspberry Pi интерфейс SPI включен (по умолчанию он обычно отключен, потому что редко используется):

sudo nano /etc/modprobe.d/raspi-blacklist.conf

Закомментируем эту строку (поставив в начале строки #):

spi-bcm2708

Сохраняем файл (комбинацией клавиш <Ctrl>+<O>) и перезагружаем устройство:

sudo reboot

После перезагрузки вводим в терминале:

lsmod

В списке устройств должно присутствовать устройство spi_bcm2708 (рис. 6.55).

Модуль spidev для Python

Подключим поддержку модуля spidev для Python. Модуль нужен для поддержки обмена данных по протоколу SPI.

Приступаем:

sudo apt-get update sudo apt-get upgrade sudo reboot

Установим модуль python-dev: sudo apt-get install python-dev

Загрузим и установим модуль spidev:

mkdir python-spi cd python-spi

wget https://raw.github.com/doceme/py-spidev/master/setup.py wget https://raw.github.com/doceme/py-spidev/master/spidev module.c sudo python setup.py install

Теперь устройство SPI доступно для программирования на Python.

Пишем скрипт на Python для обмена данными по протоколу SPI. Содержимое скрипта представлено в листинге 6.21.

Листинг 6.21. Скрипт simple-spi.py на Python для обмена данными по протоколу SPI

Запускаем скрипт на выполнение:

python /home/pi/python prg/startkit/simple-spi.py

И видим в терминале процесс отправки данных по SPI (рис. 6.56).