Omega имеет встроенный аппаратный SPI-контроллер, позволяющий связываться с периферийными устройствами, которые поддержкивают SPI. Чтобы реализовать SPI-соединение, Omega имеет библиотеку на языке C, модуль Python и командную строку. В этой статье основное внимание будет уделено команде spi-tool.
Что такое SPI?
Последовательный периферийный интерфейс (SPI) представляет собой четырехпроводный синхронный протокол связи, в основном используемый для подключения микропроцессоров или микроконтроллеров к датчикам, памяти и другим периферийным устройствам.
Четыре сигнала:

SPI - это синхронная шина данных. Одна из линий - часы, используемые для синхронизации битов, отправляемых по другим линиям данных.
Протокол основан на архитектуре ведущий-ведомый. Ведущий генерирует тактовые сигналы System Clock и сигналы ведомому Slave Select. Каждому ведомому устройству требуется собственное подключение к ведущему.
Для дополнительной информации, посмотрите статью Википедии.
Omega и SPI
SPI-шина Omega2 имеет одну доступную линию для выбора ведомого (CS1). Шина зарегистрирована в операционной системе через файл виртуального устройства /dev/spidev32766.1. Это стало возможным благодаря sysfs, псевдо-файловой системе, которая содержит информацию об аппаратном обеспечении Omega в файлах и позволяет пользователю управлять оборудованием, редактируя файлы.
Вот что означают цифры в названии виртуального устройства:
- 32766 - номер шины Omega2.
- 1 - идентификатор устройства. В данном случае соответствует ведомому устройству, подключенному к выводу CS1 Omega2.
При использовании данной шины вам нужно будет указать конкретно эти номера. Держите их под рукой!
Сбоку устройство 0 (CS0) подключено к флэш-памяти, используемой Omega.
Аппаратное обеспечение
Ниже показаны контакты SPI на Omega2 и на док-станции расширения.


Командная строка
Утилита командной строки spi-tool позволяет пользователю читать и писать одиночные байты и/из SPI-шины Omega2. В приведенных ниже примерах используйте номер SPI-шины и идентификатор устройства (см. раздел выше).
По умолчанию этой утилиты нет в прошивке Omega. Чтобы установить ее:
opkg update
opkg install spi-tool
Запустите spi-tool -h для вывода описания параметров утилиты.
Чтение байт
Чтобы прочитать байт с SPI-устройства, укажите адрес памяти на устройстве:
spi-tool -b
Эта команда выведет байт, считанный с указанного адреса на SPI-устройстве.
Аргументы и параметры
Требуются следующие аргументы:
, - указанные в этом разделе. - address - указывает адрес, с которого следует считать SPI-устройство.
Вот некоторые полезные параметры, которые вы можете использовать:
- --frequency
- установка максимальной частоты SPI (Гц) - --delay
- Установить задержку после последнего переданного бита до следующей передачи в микросекундах. - --bpw
- установить количество бит на слово (число) - --cs
- установить GPIO для сигнала SPI CS - --3wire – совмещение сигналов ведомого на входа/выходе
- --no-cs – сигнал о том, что микросхема не выбрана
- --cs-high – перевести микросхему в активное состояние (active HIGH)
- -lsb - перенос наименее значимого бита
Примеры
Как прочесть байт на шине 32766, с устройства 1, с адреса 0x11:
root@Omega-ABCD: ~ # spi-tool -b 32766 -d 1 read 0x11
> SPI Read from addr 0x11: 0x81
Как прочесть байт на шине 32766, с устройства 1; выбор микросхемы active HIGH; от адреса 0x00:
root@Omega-ABCD:~# spi-tool -b 32766 -d 1 --cs-high read 0x00
> SPI Read from addr 0x00: 0xf8
Как прочесть байт на шине 32766, с устройства 1; общего входного/выходного сигнала ведомого; от адреса 0xaf:
root@Omega-ABCD:~# spi-tool -b 32766 -d 1 --3wire read 0xaf
> SPI Read from addr 0xaf: 0xbe
Запись байта
Наряду с чтением вы также можете использовать spi-tool для записи на SPI- устройство:
spi-tool -b
Аргументы и параметры
, - указаны в этом разделе. - - указывает адрес по которому проводится запись
- значение для записи.
Параметры такие же как в разделе «Чтение байта»
Примеры
На шине 32766, на устройстве 1, записать по адресу 0x12 значение 0x42:
root@Omega-ABCD:~# spi-tool -b 32766 -d 1 write 0x12 0x42
> SPI Write to addr 0x12: 0x42
На шине 32766, на устройстве 1, перевести микросхему в статус active HIGH, записать по адресу 0x09 значение 0xfa:
root@Omega-ABCD:~# spi-tool -b 32766 -d 1 --cs-high write 0x09 0xfa
> SPI Write to addr 0x09: 0xfa
На шине 32766, на устройстве 1; объединить входной и выходной сигналы ведомого; записать по адресу 0xbf значение 0x01:
root@Omega-ABCD:~# spi-tool -b 32766 -d 1 --3wire write 0xbf 0x01
> SPI Write to addr 0xbf: 0x01
Перемещение за пределы командной строки
Утилита spi-tool позволяет достичь некоторого базового взаимодействие с SPI-устройствами. С более сложными проектами потребуется дополнительное взаимодействие с SPI-устройством, которое не может быть реализовано в командной строке.
Onion разработал библиотеку на языке C и модуль Python, которые дадут вам гибкость в использовании SPI-устройств.