Учебники

Arduino — последовательный периферийный интерфейс

Шина последовательного периферийного интерфейса (SPI) — это система для последовательной связи, которая использует до четырех проводников, обычно три. Один проводник используется для приема данных, один для отправки данных, один для синхронизации и один альтернативно для выбора устройства для связи. Это полнодуплексное соединение, что означает, что данные отправляются и принимаются одновременно. Максимальная скорость передачи выше, чем в системе связи I2C.

Board SPI Pins

SPI использует следующие четыре провода —

  • SCK — это последовательные часы, управляемые мастером.

  • MOSI — это главный выход / ведомый вход, управляемый ведущим.

  • MISO — это главный вход / выход ведомого, управляемый ведущим.

  • SS — это ведомый выбор.

SCK — это последовательные часы, управляемые мастером.

MOSI — это главный выход / ведомый вход, управляемый ведущим.

MISO — это главный вход / выход ведомого, управляемый ведущим.

SS — это ведомый выбор.

Используются следующие функции. Вы должны включить SPI.h.

  • SPI.begin () — Инициализирует шину SPI, устанавливая SCK, MOSI и SS на выходы, подтягивая SCK и MOSI на низкий и SS на высокий.

  • SPI.setClockDivider (divider) — установить делитель тактового сигнала SPI относительно системных часов. На платах, основанных на AVR, доступны делители 2, 4, 8, 16, 32, 64 или 128. Значение по умолчанию — SPI_CLOCK_DIV4, которое устанавливает тактовую частоту SPI на одну четверть частоты системной тактовой частоты (5 МГц для платы на 20 МГц).

  • Разделитель — это может быть (SPI_CLOCK_DIV2, SPI_CLOCK_DIV4, SPI_CLOCK_DIV8, SPI_CLOCK_DIV16, SPI_CLOCK_DIV32, SPI_CLOCK_DIV64, SPI_CLOCK_DIV128).

  • SPI.transfer (val) — передача SPI основана на одновременной отправке и получении: полученные данные возвращаются в receiveVal.

  • SPI.beginTransaction (SPISettings (speedMaximum, dataOrder, dataMode)) — speedMaximum — это часы, dataOrder (MSBFIRST или LSBFIRST), dataMode (SPI_MODE0, SPI_MODE1, SPI_MODE2 или SPI_MODE3).

SPI.begin () — Инициализирует шину SPI, устанавливая SCK, MOSI и SS на выходы, подтягивая SCK и MOSI на низкий и SS на высокий.

SPI.setClockDivider (divider) — установить делитель тактового сигнала SPI относительно системных часов. На платах, основанных на AVR, доступны делители 2, 4, 8, 16, 32, 64 или 128. Значение по умолчанию — SPI_CLOCK_DIV4, которое устанавливает тактовую частоту SPI на одну четверть частоты системной тактовой частоты (5 МГц для платы на 20 МГц).

Разделитель — это может быть (SPI_CLOCK_DIV2, SPI_CLOCK_DIV4, SPI_CLOCK_DIV8, SPI_CLOCK_DIV16, SPI_CLOCK_DIV32, SPI_CLOCK_DIV64, SPI_CLOCK_DIV128).

SPI.transfer (val) — передача SPI основана на одновременной отправке и получении: полученные данные возвращаются в receiveVal.

SPI.beginTransaction (SPISettings (speedMaximum, dataOrder, dataMode)) — speedMaximum — это часы, dataOrder (MSBFIRST или LSBFIRST), dataMode (SPI_MODE0, SPI_MODE1, SPI_MODE2 или SPI_MODE3).

У нас есть четыре режима работы в SPI:

  • Режим 0 (по умолчанию) — Часы обычно имеют низкий уровень (CPOL = 0), и данные выбираются при переходе от низкого к высокому (передний фронт) (CPHA = 0).

  • Режим 1 — тактовая частота обычно низкая (CPOL = 0), и данные выбираются при переходе от высокого к низкому (задний фронт) (CPHA = 1).

  • Режим 2 — тактовая частота обычно высокая (CPOL = 1), и данные выбираются при переходе от высокого к низкому (передний фронт) (CPHA = 0).

  • Режим 3 — тактовая частота обычно высокая (CPOL = 1), и данные выбираются при переходе от низкого к высокому (задний фронт) (CPHA = 1).

  • SPI.attachInterrupt (handler) — функция, которая вызывается, когда подчиненное устройство получает данные от ведущего.

Режим 0 (по умолчанию) — Часы обычно имеют низкий уровень (CPOL = 0), и данные выбираются при переходе от низкого к высокому (передний фронт) (CPHA = 0).

Режим 1 — тактовая частота обычно низкая (CPOL = 0), и данные выбираются при переходе от высокого к низкому (задний фронт) (CPHA = 1).

Режим 2 — тактовая частота обычно высокая (CPOL = 1), и данные выбираются при переходе от высокого к низкому (передний фронт) (CPHA = 0).

Режим 3 — тактовая частота обычно высокая (CPOL = 1), и данные выбираются при переходе от низкого к высокому (задний фронт) (CPHA = 1).

SPI.attachInterrupt (handler) — функция, которая вызывается, когда подчиненное устройство получает данные от ведущего.

Теперь мы соединяем две платы Arduino UNO вместе; один как хозяин, а другой как раб.

  • (SS): контакт 10
  • (MOSI): контакт 11
  • (MISO): контакт 12
  • (SCK): контакт 13

Земля общая. Ниже приведено схематическое изображение соединения между двумя платами:

Подключение плат

Давайте посмотрим на примеры SPI как Master и SPI как Slave.