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

Интерфейс SPI в Arduino — Вольтик.ру

Для эффективного, но простого обмена данными между микроконтроллером и периферийными устройствами разработана шина SPI. Она была разработана инженерами компании Motorola и прекрасно зарекомендовала себя в работе с Arduino.

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

Для обмена информацией SPI использует четыре линии:

  • тактовый сигнал от ведущего устройства Serial Clock (сокращенно SCK, SCLK или CLK), подключаемый к 13-му пину Arduino;
  • линия выбора ведомого Slave Select, подключаемая к 10-му пину Arduino. Используются следующие сокращения и обозначения: SS, STE, CS, CSN, nCS, nSS. CSB;
  • передача данных от ведомого устройства к ведущему устройству MISO, подключаемая к 12-му пину. Используемые сокращения – SO, SDO и DO;
  • линия данных от ведущего устройства к ведомому MOSI, подключаемая к 11-му пину Arduino, имеющая обозначения SI, SDI, DI.

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

Шина SPI способна передавать информацию сразу в двух направлениях, стандартная скорость обмена данными от 1 до 50 МГц. Встретить это изделие инженеров Motorola можно в профессиональных и бытовых электронных устройствах от датчиков разного назначения до радиомодулей.

 

Такое широкое распространение SPI получила в силу своего элементарного и надежного устройства, простому алгоритму передачи данных.

Последовательность действий при работе шины следующая:

  1. На линии SS ведущим устройством задается низкий уровень.
  2. Изменяемый тактовый сигнал задается ведущим устройством по линии Serial Clock, при этом каждое изменение выставляет требуемый уровень на линии MOSI, передавая с каждым тактом по одному биту ведомому устройству.
  3. Ведомое устройство передает бит информации за такт по линии SCLK, выставляя необходимые уровень по линии MISO.

Завершается передача информации установкой на линии SS максимального уровня.

В зависимости от фазы синхронизации (CPHA) и тактового сигнала (CPOL) шина последовательного интерфейса может работать в четырех режимах обмена информацией.

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

  1. фаза синхронизации = 1, тактовый сигнал = 0, считывание бита идет на спаде от 1 к 0, а запись при переходе от 0 к 1.
  2. фаза синхронизации = 0, тактовый сигнал = 0, считывание бита идет при переходе от 0 к 1 на фронте CPOL, а запись при переходе от 1 к 0.
  3. фаза синхронизации = 0, тактовый сигнал = 1, считывание бита идет на спаде от 1 к 0, а запись при переходе от 0 к 1.
  4. фаза синхронизации = 1, тактовый сигнал = 1, считывание бита идет при переходе от 0 к 1 на фронте CPOL, а запись при переходе от 1 к 0.

По умолчанию, данные для Arduino передаются старшим битом вперед, но могут и наоборот – передаваться вперед и младшим битом . Эта специфика отражается в документации микроконтроллера.

Библиотека SPI характеризуется небольшим количеством используемых функций. Она использует для работы с Arduino возможности AVR и делает это в режиме ведущего устройства.

К основным функция библиотеки относятся:

  • begin()инициализация работы с шиной;
  • end()завершение работы с шиной;
  • setBitOrder(order) – определение порядка отправки битов информации, MSBFIRST – все начинается со старшего бита,
    LSBFIRST
     – старт с младшего бита;
  • setClockDivider(divider) – установка делителя тактов в зависимости от основной частоты;
  • setDataMode(mode) – определения одного из четырех режимов работы шины;
  • transfer(value) – функция двусторонней передачи данных.

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

voltiq.ru

Библиотека SPI | Аппаратная платформа Arduino

Библиотека SPI позволяет контроллеру Arduino взаимодействовать с устройствами поддерживающими SPI протокол. Arduino в данном случае выступает в качестве ведущего устройтва.

Коротко о Serial Peripheral Interface (SPI).

Последоваетельный периферийный интерфейс (SPI) — это последовательный синхроный протокол передачи данных используемый микроконтроллерами для обмена данными с одним или несколькими периферийными устройствами на небольших растояниях.

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

  • Master In Slave Out (MISO), переводится как  «вход ведущего выход ведомого», используется для передачи данных от ведомого к ведущему.
  • Master Out Slave In (MOSI) — выход ведущего вход ведомого, для передачи данных от ведущего к периферийным устройствам.
  • Serial Clock (SCK) — синхронизирующая линия, синхросигнал генерируется ведущим устройством.
  • Slave Select pin — вход на ведомых устройствах с помощью которого ведущий может инициировать обмен данными с периферийным устройством. Если на этом входе LOW, то ведомый взаимодействует с ведущим, если HIGH, то ведомый игнорирует сигналы от ведущего.

 При работе с SPI устройствами надо учитывать следующие моменты:

  • Какой порядок вывода данных используется:  Most Significant Bit (MSB — старший бит (разряд)) or Least Significant Bit (LSB — младший бит) первый. Порядок может быть изменен функцией SPI.setBitOrder().
  • Уровень сигнала синхронизации — по какому синхронизирующему сигналу (HIGH или LOW) передаются данные.
  • Фаза синхронизации — влияет на последовательность установки и выборки данных. Фаза синхронизации SPI и уровень сигнала задается функцией SPI.setDataMode().
  • Скорость на которой работает SPI устанавливается функцией SPI.setClockDivider().

Производители SPI устройств несколько по разному реализуют протокол, поэтому необходимо внимательно ознакомиться с техническим описанием к устройству. Комбинация фазы синхронизиции (CPHA) и уровня сигнала синхронизации (CPOL) задают режим логики работы интерфейса SPI. Режим устанавливается функцией SPI.setDataMode().

РежимУровень сигнала (CPOL)Фаза (CPHA)
000
101
210
311
 Подключение

На контроллерах Arduino Duemilanove и других на базе ATmega168 /328, шина SPI использует выходы 10 (SS), 11 (MOSI), 12 (MISO), и 13 (SCK). На Arduino Mega — 50 (MISO), 51 (MOSI), 52 (SCK), и 53 (SS). Обратите внимание, что даже если вы не используете выход SS, он должен быть установлен как выход, в противном случае интерфейс может оказаться в режиме ведомого и библиотека не будет работать как надо.

В качестве SS выхода может быть использован выход отличный от 10-го. Например, при работе с Arduino Ethernet shield контроллер использует выход 4 для взаимодействия с SD картой по SPI и выход 10 для работы с Ethernet контроллером.

Функции

Выражаем благодарность Modular за помощь в переводе библиотеки.

arduino.ru

Теория программирования — интерфейс SPI

Доброго времени суток! Сегодняшняя статья – небольшое теоретическое отступление, которое поможет нам при освоении курса «Программирование Ардуино». Речь пойдёт об интерфейсе SPI. Что это такое и с чём его едят, мы постараемся разобраться в данной статье.

Для начала определение. SPI (Serial Peripheral Interface — последовательный периферийный интерфейс) – это последовательный синхронный стандарт передачи данных, который предназначен для связи контроллера с различной периферией. Этот интерфейс простой и удобный. Под Аrduino написана специальная библиотека для работы с SPI.

Связь строится по принципу «ведущий-ведомый». В качестве ведущего устройства обычно выступает контроллер. Все остальные устройства, что подключаются в систему — ведомыми. Данные от ведущего устройства по шине данных передаются к одному из выбранных ведомых или наоборот от ведомого устройства к ведущему синхронно, по тактирующему сигналу ведущего.

Распиновка шины данных SPI состоит из 4-х линий: MOSI, MISO, CS и SCLK:

  • MOSI (Master Out Slave In — Ведущий-выход, Ведомый-вход) или просто SI – передача данных происходит от ведущего устройства к ведомому.
  • MISO (Master In Slave Out — Ведущий-вход, Ведомый-выход) или просто SO – передача данных происходит от ведомого устройства к ведущему.
  • CS (Chip Select — Выбор чипа) или SS (Slave Select — Выбор ведомого) – выбор ведомого устройства.
  • SCLK (Serial CLocK) или просто SCK – передача тактового сигнала от ведущего устройства к ведомому.

Для того, чтобы передать данные от ведущего устройства к ведомому необходимо, чтобы ведущий выставил низкий уровень сигнала на линии CS ведомого, с которым собирается настроить связь. После этого биты передаются по линии MOSI. Для прекращения передачи данных ведущий как бы «отпускает» линию CS – выставляя на ней высокий уровень сигнала.

Для подключения нескольких ведомых устройств к шине данных SPI нужно на каждое из них завести свою индивидуальную линию CS. После того, как это будет выполнено, ведущее устройство сможет поочерёдно «дергать» линиями, переключаясь между ведомыми устройствами. Несколько ведомых можно подключать по разному: параллельно или последовательно.

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

Особенность параллельного подключения нескольких ведомых устройств заключается в том, что для создания связи используются общие линии SCLK, MOSI и MISO. При этом каждое ведомое устройство имеет свою линию SS(CS).  Ведущее устройство определяет с каким «текущим ведомым» наладить обмен данными, путем формирования низкого уровня сигнала на соответствующей линии SSn (где n – 1,2…).

Для подключения к контроллеру n-числа ведомых устройств по интерфейсу SPI нужно выделить для данной цели n+3 выводов микроконтроллера.

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

Что же касается последовательного подключения ведомых устройств, то они используют общие линии SCLK и SS, а выход одного подключается ко вход другого. Линия MOSI ведущего устройству подключается к первому ведомому, а линия MISO — к последнему. Если смотреть на это подключение с точки зрения ведущего устройства, то по шине данных SPI, как бы подключено одно ведомое устройство.

Следует отметить преимущество такого типа подключения: можно подключать n-ое число устройств задействовав для этой цели всего 4 вывода микроконтроллере.

На этом пока всё, продолжение следует…


ПОДЕЛИТЕСЬ С ДРУЗЬЯМИ!

About alexlevchenko
Ценю в людях честность и открытость. Люблю мастерить разные самоделки. Нравится переводить статьи, ведь кроме того, что узнаешь что-то новое — ещё и даришь другим возможность окунуться в мир самоделок.

mozgochiny.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *