Шина последовательного периферийного интерфейса (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.