Общее описание интерфейса SPI в ардуино
SPI – Serial Peripheral Interface в переводе «Последовательный периферийный интерфейс». SPI является протоколом передачи данных синхронного типа. Для передачи данных посредством SPI необходимо, чтобы одно устройство было мастером (Master), а другое слэйвом (Slave). Передача данных между устройствами по SPI производится по четырем или по трем проводам.
- MOSI (Master Out Slave In). Провод, для отправки данных от мастера к слэйву.
- MISO (Master In Slave Out). Провод, для отправки данных от слэйва к мастеру.
- SCLK (Serial Clock). Импульсы синхронизации между мастером и слэйвом. Генерирует мастер;
- SS (Slave Select). Выбор Slave устройства. Устройство выбирается установкой на линии логического 0.
Для SPI в ардуино предусмотрено 4 режима передачи данных.
Режим SPI_MODE0
Бит CPOL – 0, CPHA – 0.
Режим SPI_MODE1
Бит CPOL – 0, CPHA – 1.
Режим SPI_MODE2
Бит CPOL – 1, CPHA – 0.
Режим SPI_MODE3
Бит CPOL – 1, CPHA – 1.
Заметка
Обратите внимание на рисунках сверху на линию Sample. Пики показывают в какой момент можно считывать данные.
К одному мастеру, по SPI, может быть подключено несколько устройств Slave. Подключение устройств может быть реализовано в двух вариантах: каскадном и независимом варианте. Примеры приведены на картинке ниже.
Использование и подключение интерфейса SPI в ардуино
В каждой плате ардуино переферийное устройство SPI выведено на отдельные ножки.
Библиотека для работы с SPI в Arduino IDE
Управление устройствами через протокол SPI в ардуино производится с помощь функций стандартной библиотеки SPI.h.
Подключив библиотеку через директиву #include <SPI.h> , необходимо настроить SPI функцией
SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));
Первым параметром идет скорость передачи, второй параметр – порядок следования бит (старший бит первый MSBFIRST или младший бит первый LSBFIRST). Третий параметр определяет режим работы SPI.
Для передачи и чтения данных предназначена функция SPI.transfer(val). Функция возвращает прочитанный байт. Если необходимо только считать данные без передачи, параметр Val прировняйте 0.
SPI.transfer(0);
Алгоритм работы с SPI ардуино
- Подключить библиотеку SPI.h;
- Провести инициализацию SPI. Выбрать нужную скорость передачи, установить порядок следования бит и режим работы.
- Установить линии SS в 0.
- Произвести запись/чтение байта. Или массива байтов. Чтение должно быть непрерывным.
- Установить линию SS в 1.