Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Шина SPI

Шина SPI (Serial Peripheral Interface, Последовательный периферийный интерфейс), в отличие от I2C, может применяться для одновременной передачи данных в обоих направлениях и с разными скоростями, в зависимости от типа используемого микроконтроллера. Однако сами взаимодействия все так же осуществляются по схеме ведущий/ведомый: плата Arduino играет роль ведущего устройства и определяет, с каким устройством (ведомым) она будет взаимодействовать.

Каждое устройство, поддерживающее подключение к шине SPI, имеет четыре линии, по которым осуществляется обмен данными: MOSI (Master-Out, Slave-In — ведущий посылает, ведомый принимает), MISO (Master-In, Slave-Out — ведущий принимает, ведомый посылает), SCK (Serial Clock Line, тактовая линия) и SS или CS (Slave Select или Chip Select — выбор ведомого или выбор устройства). Контакты с D11 по D13 на плате зарезервированы для подключения линий MISO, MOSI и SCK шины SPI, но линию SS можно подключить к любому другому цифровому контакту (часто для этого используется контакт D10, потому что он расположен рядом с контактами, зарезервированными для шины SPI).

В состав Arduino IDE входит библиотека SPI с двумя примерами .

Если используется одно устройство, его подключают к выводу D10 и сразу устанавливают значение HIGH, потому что большинство SPI-устройств переходят в активное состояние, когда на линии SS устанавливается низкий уровень. Затем происходит инициализация библиотеки. Существует два способа работы с данными. Некоторые устройства сначала посылают старший бит, а некоторые посылают его последним. Метод setBitOrder() позволяет задать порядок через константы MSBFIRST или MSBLAST.


#include <SPI.h>

void setup() {
  pinMode(10, OUTPUT);
  digitalWrite(10, HIGH);
  // инициализация SPI:
  SPI.begin();
  SPI.setBitOrder(order); // на выбор
}

Чтобы послать данные SPI-устройству, сначала нужно установить на линии SS уровень LOW и таким образом сообщить устройству, что оно выбрано ведущим устройством (платой Arduino) для взаимодействий. А затем послать необходимое количество байтов данных соответствующим количеством вызовов следующей функции, — то есть эту функцию придётся вызвать для каждого байта:


SPI.transfer(byte);

Завершив взаимодействие с устройством, следует установить уровень HIGH на линии SS, чтобы сообщить устройству, что плата Arduino завершила сеанс связи. Каждое SPI-устройство должно подключаться отдельной линией SS. Например, если к шине SPI подключено два устройства, линия SS, соединяющая второе устройство, подключается к контакту D9 на плате Arduino.

Дополнительное чтение

RFID-модуль RC522 работает по протоколу SPI.

Реклама