Учебный курс AVR. Работа с SPI модулем. Ч1


   Микроконтроллеры AVR имеют в своем составе модули, реализующие стандартные интерфейсы. Эти модули используются для обмена данными с различными периферийными устройствами, например, цифровыми датчиками, микросхемами памяти, ЦАП, АЦП, другими микроконтроллерами и так далее. В этой статье, на примере микроконтроллера atmega16, мы разберемся, как работать с модулем последовательного периферийного интерфейса или модулем SPI (serial peripheral interface).

   Введение

   SPI представляет собой четырехпроводную синхронную шину, предназначенную для последовательного обмена данными между микросхемами. Интерфейс был разработан компанией Motorola, но в настоящий момент используется всеми производителями. Данный интерфейс отличают простота использования и реализации, высокая скорость обмена и малая дальность действия.
   При любом обмене данными по SPI одно из устройств является ведущим (Master'ом), а другое ведомым (Slave'ом). Обычно (но не всегда) в роли ведущего выступает микроконтроллер. Ведущий переводит периферийное устройство в активное состояние и формирует тактовый сигнал и данные. В ответ ведомое устройство передает ведущему свои данные. Передача данных в обе стороны происходит синхронно с тактовым сигналом.
   Физически SPI реализуется на основе сдвигового регистра, который выполняет и функцию передатчика, и функцию приемника.
   Принцип обмена данными по SPI проиллюстрирован на следующих картинках.

 





   Сигналы, используемые данным интерфейсом, имеют следующее назначение: 


MOSI — Master Output / Slave Input. Выход ведущего / вход ведомого. Служит для передачи данных от ведущего устройства к ведомому.
MISO
– Master Input / Slave Output. Вход ведущего / выход ведомого. Служит для передачи данных от ведомого устройства к ведущему.
SLK — Serial Clock. Сигнал синхронизации. Служит для передачи тактового сигнала всем ведомым устройствам.
SS — Slave Select. Выбор ведомого. Служит для выбора ведомого устройства.

   Производители микросхем часто используют другие названия для этих сигналов. Альтернативные варианты могут быть такими:

MOSI – DO, SDO, DOUT.
MISO – DI, SDI, DIN.
SCK – CLK, SCLK.
SS – CS, SYNC.

   Схемы соединений по SPI

   Типовая схема соединения двух устройств по SPI выглядит так.

 



   Также возможно подключение к ведущему устройству несколько ведомых устройств. Однако в любой момент времени обмен может происходить только с одним из них, остальные должны находиться в неактивном состоянии.

 



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

 




   Также возможен сокращенный вариант схемы подключения, когда линия MOSI или MISO не используется. То есть передача данных осуществляется только в одну сторону. Такие схема, например, используются при подключении к микроконтроллеру внешних микросхем ЦАП и АЦП.

 



   Протокол обмена по SPI

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

CPOL – clock polarity. Полярность тактового сигнала - определяет исходный уровень сигнала синхронизации
CPHA – clock phase. Фаза тактового сигнала — определяет последовательность установки и выборки данных.

   Рисунки ниже иллюстрируют все четыре режима обмена SPI.

   SPI mode 0: CPOL = 0, CPHA=0. Тактовый сигнал начинается с уровня логического нуля. Защелкивание данных выполняется по нарастающему фронту. Смена данных происходит по падающему фронту. Моменты защелкивание данных показаны на рисунках стрелочками

 


  SPI mode 1: CPOL = 0, CPHA=1. Тактовый сигнал начинается с уровня логического нуля. Смена данных происходит по нарастающему фронту. Защелкивание данных выполняется по падающему фронту.

 


   SPI mode 2: CPOL = 1, CPHA=0. Тактовый сигнал начинается с уровня логической единицы. Защелкивание данных выполняется по падающему фронту. Смена данных выполняется по нарастающему фронту тактового сигнала.

 


   SPI mode 3: CPOL = 1, CPHA=1. Тактовый сигнал начинается с уровня логической единицы. Смена данных выполняется по падающему фронту тактового сигнала. Защелкивание данных выполняется по нарастающему фронту.

 


   Современные микроконтроллеры поддерживают все четыре режима работы SPI.
   Стоит отметить, что передача данных по SPI может происходить не только старшим битом вперед, но и младшим. А количество байт передаваемых за время удержания сигнала выбора (SS) ничем не ограничено и определяется спецификацией используемого ведомого устройства. Также в спецификации на ведомое устройство указываются поддерживаемые режимы работы SPI, максимальная частота тактового сигнала, содержимое передаваемых или принимаемых данных.

Остальные части

   Учебный курс AVR. Работа с SPI. Запись и чтение данных. Ч2
   Учебный курс AVR. Работа с SPI. Управление сдвиговым регистром. Ч3

У вас недостаточно прав для комментирования.