Опубликовано

Введение в интерфейс SPI

По материалам книги Т.Иго «Умные вещи: Arduino, датчики и сети для связи устройств: Пер. с англ. 3-е изд.»  (глава 2 «Простейшая сеть»)

Умные вещи: Arduino

Для внутрисхемного программирования электронных устройств используется разновидность синхронного последовательного интерфейса, носящая название SPI[1]. Интерфейс SPI вместе с другим последовательным синхронным протоколом I2C[2] (который иногда также называется интерфейсом TWI[3]) — представляют собой два наиболее распространенных последовательных протокола, с которыми вам когда-либо придется иметь дело. Этот интерфейс используется для реализации обмена данными с устройствами разных видов — например, с адаптером Wi-Fi на плате MKR100 или с SD-картами памяти, а также с разного рода датчиками.

Ключевым звеном всех последовательных синхронных протоколов является управляющее устройство, которое генерирует на одном из контактов регулярные импульсы (сигналы тактирования) и осуществляет обмен данными по каждому импульсу. Преимущество последовательного синхронного протокола состоит в том, что он позволяет подключить к шине несколько устройств под управлением одного главного контроллера.

Интерфейс SPI реализуется тремя или четырьмя линиями между управляющим устройством (ведущим устройством, или мастером) и периферийным (ведомым) устройством:

  • сигнал тактирования(SCK) — вывод, на который ведущее устройство подает регулярные сигналы тактирования (синхронизации);
  • выход ведущего, вход ведомого (MOSI, Master Out, Slave In): по этой линии ведущее устройство на каждый импульс тактирования посылает данные ведомому устройству;
  • вход ведущего, выход ведомого (MISO, Master In, Slave Out): по этой линии ведомое устройство на каждый импульс тактирования посылает данные ведущему устройству. Если ведомому устройству нет надобности посылать данные ведущему, вывод MISO отсутствует;
  • выбор ведомого(SS, Slave Select) или выбор схемы (CS, Chip Select) — поскольку к шине может быть подключено несколько ведомых устройств, каждое из них имеет контакт CS для его выбора ведущим устройством. Чтобы выбрать определенное ведомое устройство, ведущее устройство устанавливает низкий уровень на этом контакте. Если на этом контакте установлен высокий уровень, устройство отключено от шины.

интерфейс SPI

Поскольку интерфейс SPI является стандартным способом программирования контроллеров AVR, большинство плат на этих контроллерах, включая Arduino Uno и более ранние модели, оснащены разъемом ICSP, на который выведены линии SPI. Этот разъем выглядит следующим образом:

разъем ICSP

Если ваша плата имеет разъем ICSP, вы можете быть уверены, что его распиновка будет такой, как показано на рисунке. Но функции SPI в разных микроконтроллерных платах выводятся на разные контакты. В следующей таблице дается информация о выводе функций SPI на контакты плат Arduino Uno, 101 и MKR1000:

Функция Uno 101 MKR1000
MOSI 11 или ICSP4 ICSP4 8
MISO 12 или ICSP1 ICSP1 10
CLK 13 или ICSP3 ICSP3 9
CS 10 10 по выбору пользователя

[1] SPI, Serial Peripheral Interface — последовательный интерфейс периферийных устройств.

[2] I2C, Inter-Integrated Circuit — шина данных для связи интегральных схем.

[3] TWI, Two-Wire Interface — двухпроводной интерфейс.

Добавить комментарий