Последовательный периферийный интерфейс SPI (Serial Peripheral Interface) — последовательный стандарт передачи данных. Предназначен для сопряжения микроконтроллеров и периферийных устройств. SPI интерфейс иногда называют четырёхпроводным интерфейсом.

Описание работы интерфейса SPI

Принцип работы SPI заключается в следующем. Данные по SPI  передаются последовательно, по 1 биту. Получение и отправка данных осуществляется раздельно и не происходит в один момент времени, а осуществляется при помощи синхронизированного сигнала на специальной шине.

Шина по которой передается синхросигнал зовется шиной тактирования, а сама идея разделения заключается в том, что считывание и установка данных осуществляется по противоположным фронтам генерируемых на шине тактирования.

Такое разделение с течением времени получение и отправки данных, дает возможность использовать только один регистр. Та устройство которое управляет шиной синхроимпульсов является главным и называется «Ведущим» или «Мастером» (Master).

Главное устройство или «Master» осуществляет управление процессами передачи данных. Т.е. он определяет когда начать процесс передачи данных когда его нужно завершить и какой объем данных передать. Другие устройства которые подключаются к мастеру, называются ведомыми или «Slave«.

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

Наименование выводов интерфейса SPI

При двухстороннем обмене его называют полнодуплексный, в интерфейсе SPI задействованы все 4 линии:

  1. SCLK — шина тактирования;
  2. MOSI  (Master Out, Slave In) — по этой линии происходит процесс передачи данных ведомому устройству;
  3. MISO (Master In, Slave Out) — по этой линии мастер принимает данные от ведомых устройств;
  4. SS (Slave Select) — выбор ведомого устройства

При двухстороннем обмене его называют полнодуплексный, в интерфейсе SPI

Кодировка уровней происходит логическими «1» и «0» на шине данных (MOSI и MISO). Другими словами «1» это высокий уровень напряжения, а «0» соответственно низкий. То как выставляется уровень напряжения на шине не имеет значения, т. е. выводы передатчиков могут быть как с «открытым коллектором» там и «push-pull». Высокий уровень соответствует  равен напряжению питания микросхему. Если у нас схема запитана от 5 В то и высокий уровень — 5 В, если 3.3 то соответственно высокий уровень — 3.3 В.

Линия SS необходима для установки начали и конца передачи сигнала. Этот сигнал инверсный, т.е. когда мы передает данные у нас на этой низкий уровень, когда данные не передаются то высокий. По сигналу SS мастеру можно подключаться к разным «слейвам» и использую одни и те же линии данных. Только вот к каждому «слейву» придется тянуть свою линию SS.

Название линий могу отличаться у разных производителей:

MISO: SOMI, SDO (на устройстве), DO, DON, SO, MRSR;

MOSI: SIMO, SDI (на устройстве), DI, DIN, SI, MTST;

SCLK: SCK, CLK, SPC (SPI serial port clock);

SS: nCS, CS, CSB, CSN, NSS, nSS, STE, SYNC.

 

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

Прием и передача и данных в интерфейсе SPI

Передача данных в интерфейсе SPI происходит побитно, а по противоположным уровням сигнала тактирования происходи либо установка либо чтение данных. Момент чтение данных называется latch, а момент установки shift.

Данные обычно не передаются по одному биту,  обычно их посылают по 8 бит и более. По этой причине на выходе передатчика делают сдвиговый регистр, куда грузится сразу вся пачка передаваемых данных. Значение старшего или младшего бита сдвивого регистра устанавливается на шине данных в зависимости от точно что передаем вперед. А для того чтобы установить на шине последующий передаваемый бит, нужно лишь сдвинуть этот регистр.

Уровень сигнала в котором находится шина тактирования в неактивном состоянии когда у нас передача данных не происходит, называется полярностью ее обозначают CPOL. Если у нас нет передачи данных то на шине тактирования SCLK логический ноль, т.е. CPOL=0, и наоборот если высокий уровень на шине то CPOL=1.

Последовательность чередования считывания и сдвига называют фазой, обозначается как CPHA. Если по первому фронту на SCLK происходит считывание, то CPHA=0, а если по первому фронту на SCLK происходит сдвиг, то CPHA=1.

Режимы работы интерфейса SPI

  • CPOL = 0 — сигнал синхронизации начинается с низкого уровня;
  • CPOL = 1 — сигнал синхронизации начинается с высокого уровня;
  • CPHA = 0 — выборка данных производится по переднему фронту сигнала синхронизации;
  • CPHA = 1 — выборка данных производится по заднему фронту сигнала синхронизации.

Для обозначения режимов работы интерфейса SPI принято следующее соглашение:

  • mode0 — режим 0 (CPOL = 0, CPHA = 0);
  • mode1 — режим 1 (CPOL = 0, CPHA = 1);
  • mode2 — режим 2 (CPOL = 1, CPHA = 0);
  • mode3 — режим 3 (CPOL = 1, CPHA = 1).

 Режимы работы SPI демонстрирует картинка ниже.

Режимы работы SPI Mode0, Mode1, Mode2 и Mode3

 

Важно отметить 1 момент, линия SS это линий которая управляет сеансом обмена, а не только линия для выбора слейва. Поэтому если вы используете только слейв то линию SS подключать нужно подключать.

Только полноправные пользователи могут оставлять комментарии. Войдите , пожалуйста.

Популярные записи

Последовательный интерфейс I2C

Последовательный интерфейс I2C (также его обозначается как IIC) довольно популярный последовательный...

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

Последовательный периферийный интерфейс SPI (Serial Peripheral Interface) — последовательный стандарт передачи данных....

Подключение кнопки к микроконтроллеру AVR

В это примере подключим и научимся обрабатывать события нажатия кнопок при помощи микроконтроллера AVR....

Распиновка наиболее популярных микроконтроллеров AVR

Ниже представлена распиновка наиболее ходовых микроконтроллеров семейства AVR.  Описание выводов, их...