Разделы презентаций


Модуль последовательного периферийного интерфейса

Содержание

Последовательный периферийный интерфейс - Serial Peripheral Interface или SPI-интерфейс. Данный интерфейс используется для работы с различными периферийными устройствами, например, это могут быть различные ЦАП/АЦП, потенциометры, датчики, расширители портов ввода/вывода (GPIO), различная

Слайды и текст этой презентации

Слайд 1Модуль последовательного периферийного интерфейса
SPI

Модуль последовательного периферийного интерфейсаSPI

Слайд 2Последовательный периферийный интерфейс - Serial Peripheral Interface или SPI-интерфейс.
Данный

интерфейс используется для работы с различными периферийными устройствами, например, это

могут быть различные ЦАП/АЦП, потенциометры, датчики, расширители портов ввода/вывода (GPIO), различная память и даже более сложная периферия, такая как звуковые кодеки и контроллеры Ethernet.

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

Интерфейс был разработан компанией Motorola, но в настоящий момент используется всеми производителями. Данный интерфейс отличают простота использования и реализации, высокая скорость обмена и малая дальность действия.

При любом обмене данными по SPI одно из устройств является ведущим (Master'ом), а другое ведомым (Slave'ом). Обычно (но не всегда) в роли ведущего выступает микроконтроллер.

Ведущий переводит ведомое (периферийное) устройство в активное состояние и формирует тактовый сигнал и данные. В ответ ведомое устройство передает ведущему свои данные. Передача данных в обе стороны (дуплексная) происходит синхронно с тактовым сигналом.

Последовательный периферийный интерфейс - Serial Peripheral Interface или SPI-интерфейс. Данный интерфейс используется для работы с различными периферийными

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

данными между микросхемами.
SPI представляет собой соединение двух (или более)

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

Рисунок 1 – Структурная схема интерфейса 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 представляет собой соединение

Слайд 4Рисунок 2 – Временная диаграмма работы интерфейса SPI
При подаче импульсов

синхронизации на выход SCK, данные выталкиваются ведущим с выхода MOSI,

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

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

Рисунок 2 – Временная диаграмма работы интерфейса SPIПри подаче импульсов синхронизации на выход SCK, данные выталкиваются ведущим

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

3).
К ведущему все ведомые подключаются параллельно, за исключением сигнала

выбора ведомого (SSх). Для каждого ведомого необходим отдельный сигнал выбора ведомого (рисунок 3, а). Для сигналов выбора ведомого могут использоваться как специально предназначенные для этого выходы SPI-контроллера, так и порты ввода/вывода общего назначения (GPIO) микроконтроллера.

Частным случаем независимого подключения является вариант с одним единственным ведомым (рисунок 3, б). Крайне не рекомендуется подтягивать сигнал SS к земле, чтобы устройство всегда было в активном состоянии, так как ведомое устройство может использовать сигнал SS для инициализации или для других служебных целей.

Рисунок 3 – Типовая схема соединения устройств по SPI-интерфейсу

а)

б)

Схемы соединений по SPIТиповая схема соединения устройств по SPI (рисунок 3). К ведущему все ведомые подключаются параллельно,

Слайд 6Каскадная схема подключения устройств по SPI (рисунок 4).
Рисунок 4 –

Каскадная схема соединения устройств по SPI-интерфейсу
Основное неудобство при независимом подключении

ведомых (см. рисунок 3) в том, что для каждого из ведомых необходим отдельный сигнал SS.
Каскадная схема подключения, в зарубежной литературе называемая «daisy-chain» (можно перевести как «гирлянда»), лишена такого недостатка.
Как видно из рисунка 4, в каскадной схеме подключения используется общий сигнал выбора ведомого для всех ведомых. Выход каждого из ведомых соединяется со входом следующего. Выход последнего ведомого соединяется со входом ведущего, таким образом образуется замкнутая цепь. При таком подключении можно считать что последовательно соединённые устройства образуют один большой сдвиговый регистр. Соответственно, данные можно записать сразу во все устройства, предварительно собрав нужный пакет, объединяющий данные для каждого из устройств в порядке соответствующем физическому порядку соединения.
Каскадная схема подключения устройств по SPI (рисунок 4).Рисунок 4 – Каскадная схема соединения устройств по SPI-интерфейсуОсновное неудобство

Слайд 7Сокращенный вариант схемы подключения устройств по SPI (рисунок 5).
Рисунок 5

– Сокращенная схема соединения устройств по SPI-интерфейсу
Сокращенный вариант схемы подключения,

когда линия MOSI или MISO не используется, то есть передача данных осуществляется только в одну сторону используются, например, при подключении к микроконтроллеру внешних микросхем ЦАП и АЦП.
Сокращенный вариант схемы подключения устройств по SPI (рисунок 5).Рисунок 5 – Сокращенная схема соединения устройств по SPI-интерфейсуСокращенный

Слайд 8Протокол обмена по SPI
Протокол обмена по SPI аналогичен логике работы

сдвигового регистра и заключается в последовательном побитном выводе/вводе данных по

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

SPI mode 0

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

Рисунок 6 – Временная диаграмма работы SPI-интерфейса в режиме mode 0.

Протокол обмена по SPIПротокол обмена по SPI аналогичен логике работы сдвигового регистра и заключается в последовательном побитном

Слайд 9SPI mode 1

CPOL = 0, CPHA=1. Тактовый сигнал начинается с

уровня логического нуля. Смена данных происходит по нарастающему фронту. Защелкивание

данных выполняется по падающему фронту.

Рисунок 7 – Временная диаграмма работы SPI-интерфейса в режиме mode 1.

SPI mode 2

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

Рисунок 8 – Временная диаграмма работы SPI-интерфейса в режиме mode 2.

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

Слайд 10SPI mode 3

CPOL = 1, CPHA=1. Тактовый сигнал начинается с

уровня логической единицы. Смена данных выполняется по падающему фронту тактового

сигнала. Защелкивание данных выполняется по нарастающему фронту.

Рисунок 9 – Временная диаграмма работы SPI-интерфейса в режиме mode 3.

Современные микроконтроллеры поддерживают все четыре режима работы SPI.

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

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

Слайд 11Рисунок 10 – Осциллограмма режимов работы SPI-интерфейса во всех режимах.
На

этом рисунке 10 показаны сигналы MOSI (синяя линия) и SCK

(жёлтая линия).
Во всех случаях передаётся число 0x64. Светлые вертикальные линии показывают момент выборки данных.
Рисунок 10 – Осциллограмма режимов работы SPI-интерфейса во всех режимах.На этом рисунке 10 показаны сигналы MOSI (синяя

Слайд 12Цепи SPI в лабораторном стенде UNI-DS3

Цепи SPI в лабораторном стенде UNI-DS3

Слайд 13 SPI модуль микроконтроллера AVR
SPI модуль микроконтроллера AVR atmega128

использует для своей работы 4 вывода - MOSI, MISO, SCK

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

Если к микроконтроллеру подключено больше одного периферийного устройства, в качестве дополнительных выводов выбора (SS), можно использовать любые выводы общего назначения. При этом штатный вывод SS должен быть всегда правильно сконфигурирован, даже если он не используется.

SPI модуль микроконтроллера AVR SPI модуль микроконтроллера AVR atmega128 использует для своей работы 4 вывода -

Слайд 14Регистры SPI модуля
В микроконтроллере atmega16 для работы с модулем SPI

используются три регистра:

управляющий регистр SPCR,
статусный регистр SPSR,
регистр данных SPDR.

Все три регистра восьмиразрядные.

Конфигурация модуля SPI

Управляющий регистр SPCR (SPI Control Register)

SPIE – разрешает /запрещает прерывания от модуля SPI. Если бит установлен в 1, прерывания от SPI разрешены.
SPE – включает/выключает модуль SPI. Если бит установлен в 1, модуль SPI включен.
DORD – определяет порядок передачи данных. Когда бит установлен в 1, содержимое регистра данных передается младшим битом вперед. Когда бит сброшен, то старшим битом вперед.
MSTR – определяет режим работы (master/slave) микроконтроллера. Если бит установлен в 1, микроконтроллер работает в режиме Master (ведущий). Если бит сброшен – в режиме Slave (ведомый). Обычно микроконтроллер работает в режиме master.
SPR1 и SPR0 – определяют частоту тактового сигнала SPI модуля, то есть скорость обмена. Максимально возможная скорость обмена всегда указывается в спецификации периферийного устройства.

Регистры SPI модуляВ микроконтроллере atmega16 для работы с модулем SPI используются три регистра:управляющий регистр SPCR,статусный регистр SPSR,

Слайд 15CPOL и CPHA – определяют режим работы SPI модуля. Требуемый

режим работы зависит от используемого периферийного устройства.
Статусный регистр SPSR (SPI

Status Register) предназначен для контроля состояния SPI модуля, кроме того он содержит дополнительный бит управления скоростью обмена.

Статусный регистр SPI

SPIF – флаг прерывания от SPI. Он устанавливается в 1 по окончании передачи байта данных. Если разрешены прерывания модуля, одновременно с установкой этого флага генерируется прерывание от SPI. Также этот флаг устанавливается в 1 при переводе микроконтроллера из режима master в режим slave с помощью вывода SS.
Сброс флага происходит аппаратно, при вызове подпрограммы обработки прерывания или после чтения регистра SPSR с последующим обращением к регистру данных SPDR.

CPOL и CPHA – определяют режим работы SPI модуля. Требуемый режим работы зависит от используемого периферийного устройства.Статусный

Слайд 16WCOL — флаг конфликта записи. Флаг устанавливается в 1, если

во время передачи данных выполняется попытка записи в регистр данных

SPDR. Флаг сбрасывается аппаратно после чтения регистра SPSR с последующим обращением к регистру данных SPDR.

SPI2X — бит удвоения скорости обмена. Установка этого разряда в 1 удваивает частоту тактового сигнала SCK. Микроконтроллер при этом должен работать в режиме master.

Взаимосвязь между битами SPR0, SPR1, SPI2X и частотой тактового сигнала SCK показана в таблице.

Где Fosc — тактовая частота микроконтроллера AVR.

Для передачи и приема данных предназначен регистр SPDR (SPI Data Register). Запись данных в этот регистр инициирует передачу данных SPI модулем. При чтении этого регистра, считывается содержимое буфера сдвигового регистра SPI модуля.

WCOL — флаг конфликта записи. Флаг устанавливается в 1, если во время передачи данных выполняется попытка записи

Слайд 17 Минимальный программный код для работы с SPI модулем

состоит из двух функций:

функции инициализации.
функции передачи/приема байта данных
Программный код
Передача/прием данных

Процесс передачи/приема данных с помощью SPI модуля, работающего в режиме Master, состоит из следующей последовательности действий:

1. установка низкого логического уровня на линии SS
2. загрузка данных в регистр SPDR
3. ожидание окончания передачи (проверка флага SPIF)
4. сохранение принятых данных (чтение SPDR), если требуется
5. возврат на 2-ой шаг, если переданы не все данные
6. установка высокого логического уровня на линии SS

/*инициализация SPI модуля в режиме master*/
void SPI_Init(void)
{
/*настройка портов ввода-вывода. Все выводы порта, кроме MISO выходы*/
SPI_DDRX |= (1< SPI_PORTX |= (1<
/*разрешение spi, старший бит вперед, мастер, режим 0*/
SPCR = (1< SPSR = (0<}

Минимальный программный код для работы с SPI модулем состоит из двух функций:функции инициализации.функции передачи/приема байта

Слайд 181. Cначала иницилизируют интерфейс SPI через регистр управления (для ATmega он SPCR)
отключаем SPI

от выходов микроконтроллера (обнуляют бит) или выключаем модуль SPI;
обнуляем регистр

управления SPI;
конфигурируем интерфейс SPI, т.е:
если позволяет микроконтроллер то подключаем вывод синхронизации и вывод данных (в ATmega такой возможности нет, вывод синхронизации и данных используется всегда);
если позволяет микроконтроллер, то выбираем какой регистр сдвига мы будем использовать, 8-битный, 16-и битный. т.е. какими данными мы будем обмениваться по SPI: 8, 16 и т.п. битными, (В ATmega такой возможности нет, по умолчанию используются 8 бит);
разрешаем или запрещаем прерывания по spi (?)
определяем режим работы SPI ;
определяем как передаются биты, сначала старший разряд или младший;
определяем полярность сигнала синхронизации;
определяем по какому фронту определяется сигнал синхронизации (по спадающему или нарастающему);
определяем скорость передачи данных (определить делитель);
устанавливаем на вывод SS единицу и иницилизируем как выход (единица означает «ведомому сигнал не принимать», ноль «ведомому сигнал принимать»);
иницилизируем на выход выводы MOSI и SCK, а выход MISO на вход (если это не делает автоматически микроконтроллер, для ATmega328p это приходиться делать «вручную»;
включаем режим ведущего;
подключит SPI к выходам микроконтроллера или включить модуль SPI;

Примерный порядок действий при работе с SPI на любом микроконтроллере

1. Cначала иницилизируют интерфейс SPI через регистр управления (для ATmega он SPCR)отключаем SPI от выходов микроконтроллера (обнуляют бит) или выключаем

Слайд 192. Работа интерфейса
устанавливаем на SS логической ноль (зависит от микроконтроллера,

в одних это надо делать самим программно (ATmega), т.е. мы

устанавливаем 0-ль перед передачей и 1-цу после, а в других, выход SS устанавливается в 0-ль автоматически после записи данных в регистр передатчика и 1-цу по окончанию передачи)
записываем данные в регистр данных передатчика, тем самым запускаем их передачу по MOSI
ожидаем окончание передачи через цикл while пока в регистре состояния SPI не будет выставлен бит прерывания (для ATmege это бит «SPIF» регистра SPCR)
устанавливаем на SS логическую единицу
3. Отключить SPI от выхода микроконтроллера или отключить модуль SPI
2. Работа интерфейсаустанавливаем на SS логической ноль (зависит от микроконтроллера, в одних это надо делать самим программно

Слайд 20#include
#include

void init_spi()
{
//конфигурируем выводы для SPI

(SS, SCK, MOSI - выход, MOSI вход)
DDRB =

(1< //конфигурируем выводы сам SPI
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 2000,000 kHz
// SPI Clock Phase: Cycle Start
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=(0< /*********** НАЧАЛО SPI ************************
SPCR - регистр конфигурации интерфейса SPI
SPIE – разрешает /запрещает прерывания от модуля SPI.
Если бит установлен в 1, прерывания от SPI разрешены.
SPE – включает/выключает модуль SPI.
Если бит установлен в 1, модуль SPI включен.
DORD – определяет порядок передачи данных.
Когда бит установлен в 1, содержимое регистра данных передается младшим битом вперед (LSB).
Когда бит сброшен, то старшим битом вперед (MSB).
MSTR – определяет режим работы микроконтроллера.
Если бит установлен в 1, микроконтроллер работает в режиме Master (ведущий).
Если бит сброшен – в режиме Slave (ведомый).
Обычно микроконтроллер работает в режиме master.
CPOL и CPHA – определяют в каком режиме работает SPI модуль.
Режим Уровень сигнала (CPOL) Фаза (CPHA)
0 0 0
1 0 1
2 1 0
3 1 1

#include #include void init_spi() {  //конфигурируем выводы для SPI (SS, SCK, MOSI - выход, MOSI вход)

Слайд 21SPR1 и SPR0 – определяют частоту тактового сигнала SPI модуля,

то есть скорость обмена. Максимально возможная скорость обмена всегда указывается

в спецификации периферийного устройства.
SPR1 SPR0 частота
0 0 fosc/4
0 1 fosc/16
1 0 fosc/64
1 1 fosc/128
*/
SPSR=(1< /*
SPSR - статусный регистр интерфейса SPI
SPIF - бит для чтения, если 1-ца то передача байта закончена
WCOL - бит для чтения, если 1-ца то конфилкт записи, "данные не ушли, а была попытка отправить новые"
SPI2X- 1-ца удваивает скорость передачи, тогда будет
SPR1 SPR0 частота
0 0 fosc/2
0 1 fosc/8
1 0 fosc/32
1 1 fosc/64
****************** КОНЕЦ ИНИЦИАЛИЗАЦИИ SPI ***************************/
}

int main(void)
{
init_spi();
while(1)
{
PORTB &= ~(1< SPDR = 125; //отправляем данные, например число 125
while(!(SPSR & (1< PORTB = (1< }
}
SPR1 и SPR0 – определяют частоту тактового сигнала SPI модуля, то есть скорость обмена. Максимально возможная скорость

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика