Сегодня мы начинаем знакомство с шиной SPI (Serial Peripheral Interface).
Данная шина очень широко используется в электронике. Она очень удобна, являясь синхронной и полнодуплексной, поэтому, применяется во многих схемах для общения между различными цифровыми усторйствами – датчиками, контроллерами, драйверами и прочими устройствами.
Ещё одним важнейшим фактором необходимости нашего с ней знакомства является то, что данная шина аппаратно организована в контроллерах AVR.
Мало того, хотим мы этого или не хотим, с интерфейсом SPI мы с вами общаемся уже давным давно, как только начали первый раз прошивать наш контроллер, так как прошивается он именно посредством данного интерфейса.
Поэтому хочется познакомиться с данной шиной поближе.
Давайте откроем техническую документацию на контроллер Atmega8, откроем страницу, где изображена распиновка данного контроллера и посмотрим, что от 16 до 19 ножки и находятся выводы шины SPI
Теперь немного подробнее о данных выводах
SS (chip select) – это ножка выбора устройства. Если на ведомом устройстве на данной ножке установится низкий уровень, то данное устройство будет откликаться и обмениваться информацией по шине SPI, если высокий, то не будет.
MOSI (master output slave input) – это ножка выхода ведущего устройства и входа ведомого устройства.
MISO (master input slave output) – наоборот, выход ведомого, вход ведущего.
SCK – ножка синхронизации. Ко всем устройствам, участвующим в обмене информации по данной шине, подаются синхроимпульсы с определённой частотой.
Вот схема реализации шины SPI в контроллере Atmega8
Как в любой шине, здесь имеется ряд регистров, в которых хранится определённая информация.
Нам интересен SHIFT REGISTER, через него и происходит обмен информации. Как только на ножке синхронизации будет определённый фронт, или нисходящий или восходящий, в зависимости от настройки, данные регистры у ведомого и ведущего устройства обменяются информацией, причем не всей информацией, а только одним битом. Данные регистры сдвинутся влево и старшие биты из каждого регистра уйдут в младшие биты такого же регистра сопряженного устройства. То есть ведомый передаст свой старший бит через ножку MOSI ведущему, который его запишет в освободившийся засчет сдвига влево младший бит, а ведомый свой вытесненный засчет сдвига передаст старший бит через ножку MISO в младший бит ведущего. Вот так и идёт обмен, то есть за 8 полных циклов тактирования они полностью обменяются байтами
Как только все 8 бит одного байта информации передадутся, определённый регистр нам просигнализирует о том, что данный процесс закончен. Вернее, определённый бит определённого регистра.
Также в блок-схеме мы видим делитель, на вход которого поступают тактовые импульсы и уже потом разделённые на определенное значение поступают по цепочке на ножку SCK и уже оттуда подаются на ведомое устройство на одноимённую ножку. Этим и обеспечивается синхронность работы устройств. Частота тактовых импульсов выбирается из наименьшей поддерживаемой всеми устройствами, участвующими в обмене.
Я говорю во множественном числе, так как может быть не только два устройства в данной цепи. Как это обеспечивается при условии, что у устройств нет никаких адресов, я сейчас и расскажу.
Существует несколько способов обена информацией между несколькими устройствами, то есть когда на одно ведущее устройство приходится несколько ведомых. Мы рассмотрим два самых распространённых из них.
Первый способ – радиальный (нажмите на картинку для увеличения изображения)
Здесь мастер направляет данные к определённому устройству, включая на ножке SS логический 0. При данном способе возможно выбрать только одно устройство, также потребуются несколько свободных ножек портов контроллера.
Есть ещё один интересный способ – кольцевой или каскадный (нажмите на картинку для увеличения изображения)
Здесь мы видим, что ножки выбора все запараллелены и обмен идёт по кругу. Тем самым скорость падает, засчёт того, что увеличивается круг передачи, но зато экономятся лапки портов.
Всё это мы в очередных занятиях изучим подробнее, когда будем использовать определённые устройства в наших проектах.
Ну, вроде со схемотехникой передачи данных по шине SPI мы разобрались.
Теперь разберёмся, как же данным процессом управлять на уровне аппаратных регистров контроллера AVR.
Данные регистры мы видим в блок-схеме выше на странице.
У Atmega8 существуют следующие регистры для обслуживания шины SPI.
SPDR (SPI Data Register) – регистр данных, в блок-схеме это DATA BUFFER. В этот регистр мы будем заносить байт для последующей его передачи на ведомое устройство и из него же будем читать байт информации, пришедший с ведомого устройства. Также не обязательно что у нас контроллер будет ведущим устройством. Впоследствии мы соберём схему из двух контроллеров, один из которых будет ведомым. Так что именно в этом регистре будет находиться байт и для отправки и для приёма.
SPCR (SPI Control Register) – управляющий регистр
Данный регистр включает в себя следующие биты:
SPIE (SPI Interrupt Enable) – бит, который разрешает прерывания.
SPE (SPI Enable) – бит, включающий шину SPI.
DORD (Data Order) – бит, устанавливающий порядок отправки бит, Если он установлен в 1, то первым отправляется младший бит, если в 0 – старший.
Читайте также: Летние шины dunlop в новосибирске
MSTR (Master/Slave Select) – бит, который назначает устройство ведущим либо ведомым. При установке данного бита 1 устройство будет ведущим.
CPOL (Clock Polarity) – полярность синхронизации, определяет, при каком фронте синхронизирующего импульса будет инициироваться режим ожидания
Если данный бит в 1, то режим ожидания будет у нас при восходящем фронте, а если в 0, то при нисходящем.
CPHA (Clock Phase) – бит, отвечающий за фазу тактирования, то есть по какому именно фронту будет осуществляться передача бита.
Посмотрим диаграммы передачи данных в зависимости от установки CPOL и CPHA
Вот такая вот интересная зависимость. Порой мы иногда видим в технических характеристиках какого нибудь устройства, что оно, к примеру, может работать в режиме SPI 0:0 и SPI 1:1, вот это как раз и касается настройки этих битов.
SPR1, SPR0 (SPI Clock Rate Select) – это биты, отвечающие за значение делителя частоты синхронизации, работают совместно с битом SPI2X, находящемся в регистре статуса. Он также управляющий, так как восьми бит в управляющем регистре под все настройки не хватило, а в статусном много свободных.
SPSR (SPI Status Register) – статусный регистр
SPI2X (Double SPI Speed Bit) – бит, удваивающий скорость, работающий совместно с битами SPR1 и SPR0 управляющего регистра.
Посмотрим зависимость частоты от данных трёх битов
SPIF (SPI Interrupt Flag) – Флаг прерывания. Установку данного бита в единицу мы ждём. когда принимаем байт. Как только байт от другого устройства появится полностью у нас в буфере, то данный флаг установится. Данный флаг работает только в случае установки бита, разрешающего прерывания, а также разрешения глобальных прерываний.
WCOL (Write COLlision Flag) – флаг конфликта, или коллизий, установится в том случае, если во время передачи данных будет конфликт битов, если во время передачи данных выполнится попытка записи в регистр данных.
Ну теперь мы, можно сказать, немного познакомились с интерфейсом SPI.
В следующем занятии мы уже попытаемся данную шину использовать на практике, подключив к нашему контроллеру какое-нибдуь ведомое устройство.
Купить программатор можно здесь (продавец надёжный) USBASP USBISP 2.0
Смотреть ВИДЕОУРОК (нажмите на картинку)
- Национальная библиотека им. Н. Э. Баумана Bauman National Library
- Персональные инструменты
- SPI (Serial Peripheral Interface)
- Интерфейс
- Операции
- Передача данных
- Часы полярности и фазы
- Топология систем связи на базе SPI
- Синхронизация в SPI
- Приложения
- Преимущества и недостатки интерфейса SPI
- Преимущества
- Недостатки
- Стандарты
- Пример программной реализации
- 📽️ Видео
Видео:Передача данных - шина SPIСкачать
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Видео:AVR 38# Последовательный интерфейс SPIСкачать
SPI (Serial Peripheral Interface)
SPI (англ. Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный периферийный интерфейс, служит для связи периферии и микроконтроллера. Например, в качестве периферии может быть: дисплей, различные датчики, FLASH память, SD карта (да, да, SD карта или «флешка» которую вы используете в телефонах и фотоаппаратах общается с внешним миром с помощью интерфейса SPI) и т.д.Интерфейс SPI, наряду с I2C, относится к самым широко-используемым интерфейсам для соединения микросхем. Изначально он был придуман компанией Motorola, а в настоящее время используется в продукции многих производителей. Его наименование является аббревиатурой от ‘Serial Peripheral Bus’, что отражает его предназначение — шина для подключения внешних устройств. Шина SPI организована по принципу ‘ведущий-подчиненный’. В качестве ведущего шины обычно выступает микроконтроллер, но им также может быть программируемая логика, DSP-контроллер или специализированная ИС. Подключенные к ведущему шины внешние устройства образуют подчиненных шины. В их роли выступают различного рода микросхемы, в т.ч. запоминающие устройства (EEPROM, Flash-память, SRAM), часы реального времени (RTC), АЦП/ЦАП, цифровые потенциометры, специализированные контроллеры и др. Устройства SPI взаимодействуют в полнодуплексном режиме, используя архитектуру master-slave с одним ведущим устройством. Главное устройство инициирует кадр для чтения и записи. Иногда SPI называют четырехпроводной последовательной шиной, контрастирующей с трех-, двух-и однопроводными последовательными шинами. SPI может рассматриваться, как синхронный последовательный интерфейс, но он отличается от протокола синхронного последовательного интерфейса (SSI), который также является четырехпроводным синхронным последовательным протоколом связи. Протокол SSI использует дифференциальную сигнализацию и предоставляет только один симплексный канал связи. [Источник 1] .
Видео:Лекция 307. Интерфейс SPIСкачать
Интерфейс
В SPI используются четыре цифровых сигнала:
- MOSI или SI – выход ведущего, вход ведомого (англ. Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому;
- MISO или SO – вход ведущего, выход ведомого (англ. Master In Slave Out). Служит для передачи данных от ведомого устройства ведущему.
- SCK или SCLK – последовательный тактовый сигнал (англ. Serial CLocK). Служит для передачи тактового сигнала для ведомых устройств.
- CS или SS – выбор микросхемы, выбор ведомого (англ. Chip Select, Slave Select).Как правило, выбор микросхемы производится низким логическим уровнем.
В зависимости от комбинаций полярности и фазы синхроимпульсов возможны четыре режима работы SPI. [Источник 2] . Хотя приведенные выше имена контактов являются наиболее популярными, в прошлом иногда использовались альтернативные соглашения об именовании контактов, поэтому имена контактов портов SPI для более старых продуктов IC могут отличаться от тех, которые представлены ниже:
Читайте также: Какая страна выпускает шины кордиант
Режим SPI | Временная диаграмма |
Режим SPI0 |
Активные уровень импульсов — высокий. Сначала защёлкивание, затем сдвиг.
Активные уровень импульсов — высокий. Сначала сдвиг, затем защёлкивание.
Активные уровень импульсов — низкий. Сначала защёлкивание, затем сдвиг.
Активные уровень импульсов — низкий. Сначала сдвиг, затем защёлкивание.
- MSB — старший бит;
- LSB — младший бит.
Мастеру приходится настраиваться на тот режим, который используется ведомым. При обмене данными по интерфейсу SPI микроконтроллер может работать как ведущий (режим Master) либо как ведомый (режим Slave). При этом пользователь может задавать следующие параметры:
- режим работы в соответствии с таблицей;
- скорость передачи;
- формат передачи (от младшего бита к старшему или наоборот).
Видео:Лекция "Интерфейсы (часть I). RS-232/422/485. SPI"Скачать
Операции
Шина SPI может работать с одним ведущим устройством и с одним или несколькими ведомыми устройствами.
Если одно ведомое устройство используется, то SS может быть зафиксирован на низком логическом уровне, если позволяет ведомое устройство. Некоторые ведомые устройства требуют понижение сигнала чипа для начала действий. Примером может служить Maxim MAX1242 ADC, который запускает преобразование при переходе high→low. С множественными ведомыми устройствами, независимый сигнал SS необходим от ведущего для каждого ведомого устройства.
Большинство ведомых устройств имеют три состояния выходов, поэтому их сигнал MISO будет высокоимпедансным, когда устройство не выбрано.
Передача данных
Рисунок 1 — Типичная конфигурация системы с использованием двух сдвиговых регистров для формирования интер-чипа кольцевого буфера
Протокол передачи по интерфейсу SPI предельно прост и, по сути, идентичен логике работы сдвигового регистра, которая заключается в выполнении операции сдвига и, соответственно, побитного ввода и вывода данных по определенным фронтам сигнала синхронизации. Установка данных при передаче и выборка при приеме всегда выполняются по противоположным фронтам синхронизации. Это необходимо для гарантирования выборки данных после надежного их установления. Если к этому учесть, что в качестве первого фронта в цикле передачи может выступать нарастающий или падающий фронт, то всего возможно четыре варианта логики работы интерфейса SPI. Эти варианты получили название режимов SPI и описываются двумя параметрами:\
- CPOL — исходный уровень сигнала синхронизации (если CPOL=0, то линия синхронизации до начала цикла передачи и после его окончания имеет низкий уровень (т.е. первый фронт нарастающий, а последний — падающий), иначе, если CPOL=1, — высокий (т.е. первый фронт падающий, а последний — нарастающий));
- CPHA — фаза синхронизации; от этого параметра зависит, в какой последовательности выполняется установка и выборка данных (если CPHA=0, то по переднему фронту в цикле синхронизации будет выполняться выборка данных, а затем, по заднему фронту, — установка данных; если же CPHA=1, то установка данных будет выполняться по переднему фронту в цикле синхронизации, а выборка — по заднему).
Ведущая и подчиненная микросхемы, работающие в различных режимах SPI, являются несовместимыми, поэтому, перед выбором подчиненных микросхем важно уточнить, какие режимы поддерживаются ведущим шины. Аппаратные модули SPI, интегрированные в микроконтроллеры, в большинстве случаев поддерживают возможность выбора любого режима SPI и, поэтому, к ним возможно подключение любых подчиненных SPI-микросхем (относится только к независимому варианту подключения). Кроме того, протокол SPI в любом из режимов легко реализуется программно.
Часы полярности и фазы
Как показано на рисунке 2, в дополнение к установке тактовой частоты, ведущий должен также установить полярность и временной участок по отношению к данным. Временная диаграмма на рисунке, показывает полярность и фазу часов — красные линии обозначают начальные края часов,а синие-конечные.
Рисунок 2 — Временная диаграмма SPI
Возможны четыре комбинации фазы (CPHA) и полярности (CPOL) сигнала SCLK по отношению к сигналам данных. Режимы работы определяются комбинацией бит CPHA и CPOL:
- CPOL = 0 — сигнал синхронизации начинается с низкого уровня;
- CPOL = 1 — сигнал синхронизации начинается с высокого уровня;
- CPHA = 0 — выборка данных производится по переднему фронту сигнала синхронизации;
- CPHA = 1 — выборка данных производится по заднему фронту сигнала синхронизации.
Для обозначения режимов работы интерфейса SPI принято следующее соглашение:
- режим 0 (CPOL = 0, CPHA = 0);
- режим 1 (CPOL = 0, CPHA = 1);
- режим 2 (CPOL = 1, CPHA = 0);
- режим 3 (CPOL = 1, CPHA = 1).
Топология систем связи на базе SPI
В простейшем случае к ведущему устройству подключено единственное ведомое устройство и необходим двусторонний обмен данными. В таком случае используется трехпроводная схема подключения. Интерфейс SPI позволяет подключать к одному ведущему устройству несколько ведомых устройств, причем подключение может быть осуществлено несколькими способами, как показано на рисунках 3 и 4 [Источник 3] .
Первый способ позволяет реализовать радиальную структуру связи (топология типа «звезда»), его принято считать основным способом подключения нескольких ведомых устройств. В данном случае для обмена более чем с одним ведомым устройством ведущее устройство должно формировать соответствующее количество сигналов выбора ведомого устройства (SS). При обмене данными с ведомым устройством, соответствующий ему сигнал SS переводится в активное (низкое) состояние, при этом все остальные сигналы SS находятся в неактивном (высоком) состоянии. Выводы данных MISO ведомых устройств соединены параллельно, при этом они находятся в неактивном состоянии, а перед началом обмена один из выходов (выбранного ведомого устройства) переходит в активный режим.
Второй способ позволяет реализовать структуру связи типа «кольцо». В данном случае для активации одновременно нескольких ведомых устройств используется один сигнал SS, а выводы данных всех устройств соединены последовательно и образуют замкнутую цепь. При передаче пакета от ведущего устройства этот пакет получает первое ведомое устройство, которое, в свою очередь, транслирует свой пакет следующему ведомому устройству и так далее. Для того, чтобы пакет от ведущего устройства достиг определенного ведомого устройства, ведущее устройство должно отправить еще несколько пакетов.
Видео:Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1)Скачать
Синхронизация в SPI
Частота следования битовых интервалов в линиях передачи данных определяется синхросигналом SCK, который генерирует ведущее устройство, ведомые устройства используют синхросигнал для определения моментов изменения битов на линии данных, при этом ведомые устройства никак не могут влиять на частоту следования битовых интервалов. Как в ведущем устройстве, так и в ведомом устройстве имеется счетчик импульсов синхронизации (битов). Счетчик в ведомом устройстве позволяет последнему определить момент окончания передачи пакета. Счетчик сбрасывается при выключении подсистемы SPI, такая возможность всегда имеется в ведущем устройстве. В ведомом устройстве счетчик обычно сбрасывается деактивацией интерфейсного сигнала SS. [Источник 4] .
Так как действия ведущего и ведомого устройства тактируются одним и тем же сигналом, то к стабильности этого сигнала не предъявляется никаких требований, за исключением ограничения на длительность полупериодов, которая определяется максимальной рабочей частотой более медленного устройства. Это позволяет использовать SPI в системах с низкостабильной тактовой частотой, а также облегчает программную эмуляцию ведущего устройства.
Видео:MCP2515, контроллер CAN шины с интерфейсом SPIСкачать
Приложения
SPI используется с различными периферийными устройствами, такими как:
- Датчики: температуры, давления, АЦП, сенсорные экраны, видео игровые контроллеры
- Устройства контроля: аудио кодеки, цифровые потенциометры, ЦАП
- Камера: объектив Canon EF
- Коммуникации: сеть Интернет, интерфейс USB, USB, USART, CAN, IEEE 802.15.4, IEEE 802.11
- Память: Флэш и EEPROM
- Часы реального времени
- ЖК, иногда даже для управления изображения данных
- Любые ММС или CD карты (в том числе поддержка SDIO)
Для высокопроизводительных систем, FPGAs иногда использует SPI интерфейс как ведомый к ведущему, а ведущий к датчикам, или для флэш-памяти, используемой для загрузки, если они основаны на SRAM. [Источник 5] .
Видео:Лекция 308. Шина I2CСкачать
Преимущества и недостатки интерфейса SPI
Преимущества
- Полнодуплексная передача данных по умолчанию.
- Более высокая пропускная способность по сравнению с I²C или SMBus.
- Возможность произвольного выбора длины пакета, длина пакета не ограничена восемью битами.
- Простота аппаратной реализации:
- более низкие требования к энергопотреблению по сравнению с I²C и SMBus;
- возможно использование в системах с низкостабильной тактовой частотой;
- ведомым устройствам не нужен уникальный адрес, в отличие от таких интерфейсов, как I²C, GPIB или SCSI.
Недостатки
- Необходимо больше выводов, чем для интерфейса I²C.
- Ведомое устройство не может управлять потоком данных.
- Нет подтверждения приема данных со стороны ведомого устройства (ведущее устройство может передавать данные «в никуда»).
- Нет определенного стандартом протокола обнаружения ошибок.
- Отсутствие официального стандарта, что делает невозможным сертификацию устройств.
- По дальности передачи данных интерфейс SPI уступает таким стандартам, как UART и CAN.
- Наличие множества вариантов реализации интерфейса.
- Отсутствие поддержки горячего подключения устройств.
Видео:SPI шина на осциллографеСкачать
Стандарты
Шина SPI- стандарт это де-факто. Однако отсутствие официального стандарта находит свое отражение в самых различных вариантах протокола. Различные размеры слова являются общими. Каждое устройство определяет свой собственный протокол, в том числе, если оно поддерживает команды. Некоторые устройства предназначены только для передачи, другие-только для приема. Некоторые протоколы сначала передают наименьший бит.
Некоторые устройства даже имеют незначительные отклонения от режимов CPOL/CPHA, описанных выше. Отправка данных от ведомого устройства к ведущему может использовать противоположный временной край в качестве ведущего устройства к ведомому. Устройства часто требуют дополнительного времени простоя времени перед первым, после последнего, или между командой и ее ответом. Некоторые устройства имеют два часа, один для чтения данных, а другой для передачи его в устройство.
Многие микросхемы SPI поддерживают только сообщения, кратные 8 битам. Такие чипы не могут взаимодействовать с JTAG или SGPIO протоколами, или с любым другим протоколом, в котором сообщения, не кратны которые 8 битам. [Источник 6] . Существуют также аппаратные различия. Некоторые микросхемы объединяют MOSI и MISO в единую линию передачи данных (SI/SO); это иногда называют «трехпроводной» сигнализацией (в отличие от обычного «четырехпроводного» SPI). SafeSPI- это отраслевой стандарт для SPI в автомобильной промышленности. Его основным фокусом является передача данных датчика между различными устройствами.Видео:Интерфейс SPI на примере STM32. Подключение периферии - экрана и памяти.Скачать
Пример программной реализации
Ниже представлен пример программной реализации SPI мастера на языке Си. Линия CS (chip select, выбор микросхемы) должна быть активирована (в большинстве случаев — притянута к низкому уровню), перед тем, как начнётся обмен данными, и деактивирована после окончания обмена. Большинство устройств требуют несколько сеансов передачи с активной линией CS. Эта функция может быть вызвана несколько раз, пока линия активна.
- Свежие записи
- Нужно ли менять пружины при замене амортизаторов
- Скрипят амортизаторы на машине что делать
- Из чего состоит стойка амортизатора передняя
- Чем стянуть пружину амортизатора без стяжек
- Для чего нужны амортизаторы в автомобиле
📽️ Видео
Цифровые интерфейсы и протоколыСкачать
Микросхемы и программаторы, Шины I2C и SPIСкачать
Введение в шину I2CСкачать
О шине SPI и библитоеке SPI. Arduino.Скачать
SPI интерфейсСкачать
Кто и когда обращается к SPI flash в процессе запуска материнской платы. + куча полезной инфы. КМС#4Скачать
Интерфейсы :: SPI :: Часть 1:: Общие сведенияСкачать
Программирование МК AVR. УРОК 24. Знакомство с шиной SPIСкачать
лекция 349 Atmega8 интерфейс SPIСкачать
Теория и практика UART, I2C (TWI), SPI на arduino.Скачать
Логический анализатор шины i2cСкачать