Шина spi arduino uno

Видео:Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1)Скачать

Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1)

SPI -Serial Peripheral Interface, краткое руководство

Данная статья является кратким дискурсом по шине SPI и не должна восприниматься как точная техническая документация. Рассматривается только полнодуплексный вариант применения.

Видео:arduino spiСкачать

arduino spi

Общие сведения:

SPI — (Serial Peripheral Interface) эспиай, последовательный периферийный интерфейс иногда называемый 4-х проводным интерфейсом, является последовательным синхронным интерфейсом передачи данных. Изобретён компанией Motorola в середине 1980-x. В отличие от I2C и UART, SPI требует больше сигналов для работы, но может работать на более высоких скоростях. Не поддерживает адресацию, вместо этого используется сигнал SS (slave select — выбор ведомого), который также иногда называется CS (chip select), CE (chip enable) или SE (slave enable). Поддерживает только одного ведущего на шине. Ведущий устанавливает скорость обмена данными и другие параметры, такие как полярность и фаза тактирования. Обмен данными происходит в режиме полного дуплекса, что означает устройства на шине могут одновременно передавать и принимать данные. Интерфейс использует следующие сигналы (в номенклатуре AVR, для получения точного названия сигналов обратитесь к технической документации микросхемы, с которой работаете):

  • MISO (master in slave out) — вход ведущего, выход ведомого
  • MOSI (master out slave in) — выход ведущего, вход ведомого
  • SCK (serial clock) — сигнал тактирования
  • SS (slave select) — сигнал выбор ведомого.

Несмотря на то, что интерфейс называется 4-х проводным, для подключения нескольких ведомых понадобится по одному проводу SS для каждого ведомого (в полнодуплексной реализации). Сигналы MISO, MOSI и SCK являются общими для всех устройств на шине. Ведущий посылает сигнал SS для того ведомого, обмен данными с которым будет осуществляться. Простыми словами, все ведомые, кроме выбранного ведущим будут игнорировать данные на шине. SS является инверсным (active-low), что означает что ведущему необходимо прижать эту линию для выбора ведомого.

Видео:Передача данных - шина SPIСкачать

Передача данных - шина SPI

Подключение:

Видео:MCP2515, контроллер CAN шины с интерфейсом SPIСкачать

MCP2515, контроллер CAN шины с интерфейсом SPI

SPI на Arduino:

Arduino UNO/Piranha UNO/Arduino ULTRA

На Arduino UNO/Piranha UNO/Arduino ULTRA выводы аппаратного SPI расположены на 10, 11, 12 и 13 выводах, а так же эти выводы соединены с колодкой ICSP (in circuit serial programmer):

Шина spi arduino uno

СигналВывод
SS10
MOSI11
MISO12
SCK13

Arduino MEGA

На Arduino MEGA выводы аппаратного SPI расположены на 50, 51, 52 и 53 выводах, а так же эти выводы соединены с колодкой ICSP (in circuit serial programmer):

Шина spi arduino uno

СигналВывод
SS53
MOSI51
MISO50
SCK52

Пример для Arduino

В этих примерах мы соединим две Arduino по SPI по следующей схеме:

Шина spi arduino uno

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

Arduino UNO в качестве ведущего:

Arduino UNO в качестве ведомого:

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

Видео:Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч2)Скачать

Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч2)

SPI на Raspberry Pi

На Raspberry Pi выводы аппаратного SPI расположены на выводах GPIO7, GPIO8, GPIO9, GPIO10, GPIO11:

Шина spi arduino uno

Перед работой с SPI необходимо его включить. Сделать это можно из эмулятора терминала командой sudo raspi-config -> Interfacing options -> Serial -> No -> Yes -> OK -> Finish или из графической среды в главном меню -> Параметры -> Raspberry Pi Configuration -> Interfaces -> SPI

Подробное описание как это сделать можно посмотреть по ссылке Raspberry Pi, включаем I2C, SPI

Пример работы с SPI на Python:

В отличие от Arduino для Raspberry не существует простых решений для работы в режиме ведомого. Подробней ознакомиться с работой чипа BCM Raspberry можно в технической документации на официальном сайте, стр. 160.

Для проверки работы сценария можно подключить Raspberry по SPI к Arduino со скетчем из примера выше через преобразователь уровней или Trema+Expander Hat:

Шина spi arduino uno

Видео:AVR 38# Последовательный интерфейс SPIСкачать

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

Подробнее о SPI

Параметры

Существуют четыре режима работы SPI, зависящие от полярности (CPOL) и фазы (CPHA) тактирования:

РежимПолярностьФазаФронт тактированияФронт установки бита данных
SPI_MODE000СпадающийНарастающий
SPI_MODE101НарастающийСпадающий
SPI_MODE210НарастающийСпадающий
SPI_MODE311СпадающийНарастающий

В Arduino IDE для установки режима необходимо передать функции, возвращающей объект настроек параметр режима работы SPI_MODE, например:

Для выбора режима работы SPI на Raspberry Pi необходимо вызвать дескриптор объекта SpiDev().mode и присвоить ему битовые значения CPOL и CPHA, например:

Скорость передачи данных

Скорость передачи данных устанавливается ведущим и может меняться «на лету». Программист в силах указать лишь максимальную скорость передачи данных.

Видео:О шине SPI и библитоеке SPI. Arduino.Скачать

О шине SPI и библитоеке SPI. Arduino.

SPI Arduino – подключение устройств к ардуино

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

Видео:Лекция 307. Интерфейс SPIСкачать

Лекция 307. Интерфейс SPI

SPI в Arduino

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

Выводы и контакты SPI

Связь по интерфейсу SPI arduino происходит между несколькими устройствами, которые расположены близко друг к другу. Платы Ардуино оснащены отдельными выводами для SPI. Сопряжение происходит при помощи четырех контактов:

  • MOSI – по этой линии передается информация к Slave от Master.
  • MISO – используется для передачи информации к Master от Slave.
  • SCLK – создание тактовых импульсов для синхронной передачи данных.
  • SS – выбор ведомого устройства.

Взаимодействие SPI устройств

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

Шина spi arduino uno

Перед началом работы нужно определить:

  • С какого бита должен начинаться сдвиг – со старшего или с младшего. Регулируется порядок при помощи функции PI.setBitOrder().
  • Определить уровень, на котором должна находиться линия SCK при отсутствии тактового импульса. Регулируется функцией SPI.setDataMode().
  • Выбрать скорость передачи данных. Определяется функцией SPI.setClockDivider().

Следующим шагом будет определение, в каком режиме будет происходить передача информации. Выбор режима определяется такими показателями, как полярность и фаза тактового импульса. Если уровень низкий, записывается 0, высокий – 1. Всего существует 4 режима:

  • Режим 0 – SPI_MODE0: полярность (CPOL) 0, фаза (CPHA) 0.
  • Режим 1: полярность 0, фаза 1.
  • Режим 2:полярность 1, фаза 0.
  • Режим 3: полярность 1, фаза 1.

Изначально в Ардуино заложено, что данные передаются старшим битом вперед, но перед началом нужно уточнить это в документации. Продемонстрировать режимы можно на картинке.

Возможно два вида подключения в интерфейсе SPI: независимое и каскадное. В первом случае при подключении Master обращается к каждому Slave индивидуально, во втором случае подключение происходит по очереди, т.е. каскадно.

Видео:Подключение дисплея LCD12864B на ST7920 к Arduino по SPIСкачать

Подключение дисплея LCD12864B на ST7920 к Arduino по SPI

Подключение SPI к Ардуино

Плата Arduino уже содержит специальные выводы для подключения интерфейса SPI. Эти же выводы повторены в отельном разъеме ICSP. На этом разъеме отсутствует SS – изначально предусмотрено, что микроконтроллер Ардуино будет выступать в роли ведущего устройства. Если нужно использовать его в качестве ведомого, можно использовать любой цифровой вывод в качестве SS.

На данной иллюстрации представлен вариант подключения OLDE-экрана по SPI к ардуино.

Шина spi arduino uno

Для каждой модели Ардуино существую свои выводы для SPI. Эти выводы:

  • Uno: MOSI соответствует вывод 11 или ICSP-4, MISO – 12 или ICSP-1, SCK – 13 или ICSP-3, SS (slave) – 10.
  • Mega1280 или Mega2560: MOSI – 51 или ICSP-4, MISO – 50 или ICSP-1, SCK – 52 или ICSP-3, SS (slave) – 53.
  • Leonardo: MOSI – ICSP-4, MISO –ICSP-1, SCK –ICSP-3.
  • Due: MOSI – ICSP-4, MISO –ICSP-1, SCK –ICSP-3, SS (master) – 4, 10, 52.

Последний контроллер Arduino Due расширяет возможности пользователя и позволяет реализовать больше задач, чем на остальных микроконтроллерах. Например, можно автоматически управлять ведомым устройством и автоматически выбирать различные конфигурации (тактовая частота, режим и другие).

Видео:💡 Arduino - Экраны #2 - Электронная бумага и SPI шина - EP7Скачать

💡 Arduino - Экраны #2 - Электронная бумага и SPI шина - EP7

Библиотека SPI Arduino

Для работы на Ардуино создана отдельная библиотека, которая реализует SPI. Перед началом кода нужно добавить #include , чтобы включить библиотеку.

  • begin() и end() – включение и выключение работы. При инициализации на выход настраиваются линии SCLK, MOSI и SS, подавая низкий уровень на SCLK, MOSI и высокий на SS. Функция end() не меняет уровни линий, она нужна для выключения блока, связанного с интерфейсом, на плате Ардуино.
  • setBitOrder(order) – установка порядка отправки битов информации (MSBFIRST – приоритет старшего бита, LSBFIRST – приоритет младшего бита).
  • setClockDivider(divider) – установка делителей тактов основной частоты. Можно поставить делители 2, 4, 8, 16, 32, 64 и 128. Записывается следующим образом – SPI_CLOCK_DIVn, где n – выбранный делитель.
  • setDataMode(mode) – выбор одного из четырех рабочих режимов.
  • transfer(value) – осуществление передачи байта от ведущего устройства и возвращение байта, который принят от ведомого устройства.
  • shiftIn(miso_pin, sclk_pin, bit_order) и shiftOut(mosi_pin, sclk_pin, order, value) – принятие и отправка данных, можно подключать к любым цифровым пинам, но перед этим нужно самостоятельно их настроить.

Видео:Теория и практика UART, I2C (TWI), SPI на arduino.Скачать

Теория и практика UART, I2C (TWI), SPI на arduino.

Преимущества и недостатки SPI

Преимущества интерфейса SPI:

  • Возможность передавать большие данные, не ограниченные длиной в 8 бит.
  • Простота в реализации программного обеспечения.
  • Простота аппаратной реализации.
  • Выводов нужно меньше, чем для параллельных интерфейсов.
  • Только быстродействие устройств ограничивает максимальную тактовую частоту.
  • Большое количество выводов по сравнению с I2C.
  • Slave не может управлять потоком информации.
  • Отсутствие стандартного протокола обнаружения ошибок.
  • Большое количество способов реализации интерфейса.
  • Отсутствие подтверждения приема информации.

Видео:Arduino Интерфейсы SPI 8Скачать

Arduino Интерфейсы SPI 8

Пример использования SPI Ардуино в проекте с датчиком давления

Для реализации проекта нам нужны Ардуино, датчик давления макетная плата и провода. Пример подключения датчика изображен на рисунке.

Шина spi arduino uno

При помощи датчика SCP1000 возможно узнавать такие параметры как давление и температура и передать эти значения через SPI.

Основные элементы скетча программы

В первую очередь в коде прописываются регистры датчика при помощи setup(). С устройства возвращаются несколько значений – одно в 19 бит для полученного давления, другое в 16 бит – для температуры. После этого происходит считывание двух температурных байтов и считывание давления в два этапа. Сначала программа берет три старших бита, затем следующие 16 бит, после чего при помощи побитового сдвига происходит объединение этих двух значений в одно. Настоящее давление – это 19-тиразрядное значение, деленное на 4.

const int PRESSURE = 0x1F; // первый этап определения давления (выявляются три старших бита)

const int PRESSURE_LSB = 0x20; // второй этап, в котором определяются 16 бит для давления

const int TEMPERATURE = 0x21; //16 бит для температуры

Для чтения данных температуры и преобразования ее в градусы Цельсия используется следующий элемент кода:

int tempData = readRegister(0x21, 2);

float realTemp = (float)tempData / 20.0; // чтобы определить реальное значение температуры в Цельсиях, нужно полученное число разделить на 20

Считывание битов давления и объединение их:

byte pressure_data_high = readRegister(0x1F, 1);

unsigned int pressure_data_low = readRegister(0x20, 2);

long pressure = ((pressure_data_high Краткие выводы о SPI

Экраны и датчики SPI часто встречаются в проектах ардуино, поэтому нужно знать, как работает этот протокол. В принципе, ничего сложного в подключении SPI устройств нет. Главное, правильно подсоединить провода и использовать методы стандартной библиотеки в нужной последовательности. Для некоторых устройств, например, SD карты или OLED — экранов, альтернатив, в принципе, не существует.


🔍 Видео

🔀 Сдвиговый регистр 74HC595: ПОДКЛЮЧАЕМ ПО SPI К АРДУИНОСкачать

🔀 Сдвиговый регистр 74HC595: ПОДКЛЮЧАЕМ ПО SPI К АРДУИНО

Подключить несколько устройств к Ардуино по шине SPIСкачать

Подключить несколько устройств к Ардуино по шине SPI

Интерфейс SPI на примере STM32. Подключение периферии - экрана и памяти.Скачать

Интерфейс SPI на примере STM32. Подключение периферии - экрана и памяти.

ЛУЧШИЙ ЭКРАН ДЛЯ АРДУИНО ARDUINO TFT LCD 1.44 SPI 128Х128 ЗА $3!Скачать

ЛУЧШИЙ ЭКРАН ДЛЯ АРДУИНО ARDUINO TFT LCD 1.44 SPI 128Х128 ЗА $3!

Arduino+Arduino - SPI реализация общения между 2 ардуинами по SPIСкачать

Arduino+Arduino - SPI  реализация общения между 2 ардуинами по SPI

Подключение сенсорного цветного 240x320 SPI ILI9341 дисплея 2.8 (2.4, 2.2) к ArduinoСкачать

Подключение сенсорного цветного 240x320 SPI ILI9341 дисплея 2.8 (2.4, 2.2) к Arduino

Arduino SPIСкачать

Arduino SPI

FLprog урок №2 шины данных Uart\I2C\ICSP\OneWireСкачать

FLprog урок №2 шины данных Uart\\I2C\\ICSP\\OneWire
Поделиться или сохранить к себе:
Технарь знаток