SPI (Serial Peripheral Interface, последовательный интерфейс для периферийного оборудования) является одним из самых популярных коммуникационных интерфейсов, уже имеющихся в составе многих микроконтроллеров и интегральных схем.
Интерфейс SPI был разработан и представлен компанией Motorola, Inc. (Freescale Semiconductor). Из-за простоты и удобства интерфейс SPI встроен во многие микросхемы периферии, как и шина
IIC-bus компании Philips. В интерфейсе SPI имеется 3 или 4 сигнала, что больше, чем в интерфейсе IIC (где только 2 сигнала), однако скорость передачи у SPI намного больше, до 20 Mbps (мегабит) и выше, в зависимости от возможности периферийного устройства (в 5 - 50 раз быстрее, чем скорость интерфейса IIC). Кроме того, SPI позволяет одновременно передавать информацию в двух направлениях (и в микросхему периферии, и из неё). По этой причине SPI используется часто для высокоскоростных ADC (АЦП), DAC (ЦАП) или для микросхем связи и коммуникации, которые требуют как можно более высокую скорость передачи данных.
Базовая структура SPI показана на рисунке.
Главная микросхема, master (мастер, обычно это микроконтроллер) подключена через три сигнальные линии SCLK (Serial Clock, такты данных), MISO (Master-In Slave-Out, вход мастер-устройства, выход подчиненного устройства) и MOSI (Master-Out Slave-In, выход мастер-устройства, вход подчиненного устройства) к устройству slave (подчиненное, ведомое устройство). И в master, и в slave имеется 8-битный регистр сдвига, которые обмениваются данными по сигналу синхронизации SCLK, который генерируется устройством master. Дополнительно может использоваться отдельный сигнал SS (Slave Select, сигнал активизации для подчиненного устройства), который используется для синхронизации начала пакета или границы байта, и одновременно этот сигнал выборки может использоваться для подключения к одному master нескольких slave-устройств (multi-slave configuration, при этом для каждого slave-устройства делается отдельный сигнал выборки). Большинство микросхем slave имеют разные обозначения для имен сигналов SPI, наподобие DI, DO и CS. Для однонаправленных устройств, как например DAC и одноканальный ADC, одна из линий данных (MOSI или MISO) может отсутствовать. Данные передаются бит за битом, старший бит идет первым MSB first (Most Significant Bit первый). Когда несколько микросхем slave подключаются по SPI к одному мастеру, то сигналы SCLK, MOSI, MISO подключаются параллельно, а сигнал выборки SS идет на каждую микросхему slave отдельно. Выход данных определенной микросхемы slave выбирается по соответствующему сигналу CS, а все невыбранные микросхемы slave отключают свой выход от сигнала MISO.
[Диаграммы времени интерфейса SPI]
Режим SPI | Временная диаграмма |
Mode 0 Активен положительный импульс. Захват (Latch), затем сдвиг (Shift). |
|
Mode 1 Активен положительный импульс. Сдвиг (Shift), затем захват (Latch). |
|
Mode 2 Активен отрицательный импульс. Захват (Latch), затем сдвиг (Shift). |
|
Mode 3 Активен отрицательный импульс. Сдвиг (Shift), затем захват (Latch). |
|
В интерфейсе SPI сдвиг данных (data shift) и захват данных (data latch) осуществляются противоположными перепадами сигнала тактов SCLK. Достоинство такого разделения в том, что по времени сдвиг и захват разделены друг от друга, что улучшает функционирование этих критичных по времени выполнения процессов. Поэтому требования по быстродействию внутренних узлов микросхемы снижаются. Имеется однако некоторая сложность - master должен правильно сконфигурировать свой SPI, чтобы выбрать один из четырех режимов, который реализован в микросхеме slave.