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

Последовательный периферийный интерфейс (SPI) обеспечивает высокоскоростной синхронный обмен данными между микроконтроллерами ATmega603/103 и периферийными устройствами или между несколькими микроконтроллерами ATmega603/103.

Основные характеристики SPI интерфейса:

  • Полнодуплексный 3-проводный синхронный обмен данными.
  • Режим работы ведущий или ведомый.
  • Обмен данными с передаваемыми первыми старшим или младшим битами.
  • Четыре программируемые скорости обмена данными.
  • Флаг прерывания по окончании передачи.
  • Активация из Idle режима (только в режиме ведомого)

Соединения между ведущим и ведомым CPU, использующими SPI интерфейс, показаны на рис. 39. Вывод PB1(SCK) является выходом тактового сигнала ведущего микроконтроллера и входом тактового сигнала ведомого. По записи ведущим CPU данных в SPI регистр начинает работать тактовый генератор SPI и записанные данные сдвигаются через вывод выхода PB2(MOSI) ведущего микроконтроллера на вывод входа PB2 (MOSI) ведомого микроконтроллера. После сдвига одного байта тактовый генератор SPI останавливается, устанавливая флаг окончания передачи (SPIF). Если в регистре SPCR будет установлен бит разрешения прерывания SPI (SPIE), то произойдет запрос прерывания. Вход выбора ведомого PB0(SS), для выбора индивидуального SPI устройства в качестве ведомого, устанавливается на низкий уровень. При установке высокого уровня на выводе PB0(SS) порт SPI деактивируется и вывод PB2(MOSI) может быть использован в качестве вывода входа. Режим ведущий/ведомый может быть установлен и программным способом установкой или очисткой бита MSTR в регистре управления SPI.

Два сдвиговых регистра ведущего и ведомого микроконтроллеров можно рассматривать как один разнесенный 16-разрядный циклический сдвиговый регистр. См. Рис 39. При сдвиге данных из ведущего микроконтроллера в ведомый одновременно происходит сдвиг данных из ведомого микроконтроллера в ведущий, т.е. в течение одного цикла сдвига происходит обмен данными между ведущим и ведомым микроконтроллерами.

Рис. 38. Блок-схема SPI

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

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

При разрешенном SPI направления данных выводов MOSI, MISO, SCK и SS настраиваются в соответствии со следующей таблицей:

Таблица 22. Настройка выводов SPI

Вывод Направление, ведущий SPI <Направление, ведомый SPI/b>
MOSI Определяется пользователем Вход
MISO Вход Определяется пользователем
SCK Определяется пользователем Вход
S S Определяется пользователем Вход

Рис. 39. Межсоединения ведущего и ведомого SPI