Опубликовано

Уровни согласования взаимодействия устройств

По материалам книги Т.Иго «Умные вещи: Arduino, датчики и сети для связи устройств: Пер. с англ. 3-е изд.»  (глава 2 «Простейшая сеть»)

Умные вещи: Arduino

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

Уровни согласования

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

  • Физический. Каким образом вводы и выводы каждого устройства соединяются с другими? Сколько необходимо соединений между двумя устройствами для возможности обмена сообщениями?
  • Электрический. Какие уровни напряжения использовать для представления битов данных? 5 вольт? 3,3 В? Какое-либо другое напряжение?
  • Логический. Какую схему логики использовать — положительную или отрицательную? Схема, при которой высокий уровень напряжения представляет логическую 1, а низкий — логический 0, называется положительной, а когда значения уровней инвертированы: высокий уровень напряжения представляет логический 0, а низкий — логическую 1, — отрицательной.
  • Уровень данных. Как осуществляется синхронизация битов? Сколько битов считывается за раз: 8, 9, 10 или больше? Обозначаются ли группы битов в начале и в конце специальными битами?
  • Уровень приложений. Как организовываются группы битов для создания сообщений? Каков порядок обмена сообщениями для того, чтобы что-то сделать?

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

Какой бы сложной ни была бы сеть, никогда не забывайте о том, что связь между электронными устройствами — это всего лишь электрические импульсы. Устройства, осуществляющие обмен данными по последовательному каналу, соединены между собой электрически. Посылающее устройство изменяет уровень напряжения на соединяющей линии через согласованные интервалы времени, и каждый такой интервал представляет собой один бит данных. Чтобы отправить значение 0 или 1 очередного бита, отправитель меняет уровень напряжения, а получатель определяет уровень полученного сигнала: высокий он или низкий.

Отправитель и получатель могут согласовывать скорость отправки битов двумя способами (рис. 2.3). Скорость асинхронного последовательного обмена данными согласовывается между обеими сторонами обмена и синхронизируется (иногда говорят: тактируется) отправителем и получателем независимо друг от друга. А скорость синхронного последовательного обмена данными управляется отправителем, который подает постоянный сигнал синхронизации (тактирования) на отдельную линию (на рис. 2.3 показаны два интерфейса синхронного последовательного обмена: интерфейс SPI и интерфейс I2C). Синхронный последовательный обмен данными в основном применяется для связи между интегрированными схемами (например, между процессором компьютера и его микросхемами памяти). В этой главе рассматривается только асинхронный последовательный обмен данными, так как именно этот тип последовательной связи лежит в основе сетей, которым посвящена эта книга: от Ethernet-соединений по проводам до беспроводной радиосвязи.

Асинхронный обмен данными

Асинхронный обмен данными: каждое устройство использует свой  собственный генератор тактовых (синхронизирующих) сигналов, обмен данными осуществляется с заранее согласованной скоростью

Синхронный обмен данными (интерфейс SPI, Serial Peripheral Interface)

Синхронный обмен данными (интерфейс SPI, Serial Peripheral Interface): ведущее устройство подает  сигнал тактирования на ведомое устройство и инициирует обмен, подавая сигнал выбора схемы. Обмен данными происходит по смене уровня напряжения сигнала тактирования на обратное

Синхронный обмен данными (интерфейс I2C)

Синхронный обмен данными (интерфейс I2C): ведущее устройство подает сигнал тактирования на ведомое устройство, выбирая ведомое по его адресу. Обмен данными происходит по смене уровня напряжения сигнала тактирования на обратное

Рис. 2.3. Типы последовательной связи

Опубликовано

Введение в интерфейс SPI

По материалам книги Т.Иго «Умные вещи: Arduino, датчики и сети для связи устройств: Пер. с англ. 3-е изд.»  (глава 2 «Простейшая сеть»)

Умные вещи: Arduino

Для внутрисхемного программирования электронных устройств используется разновидность синхронного последовательного интерфейса, носящая название SPI[1]. Интерфейс SPI вместе с другим последовательным синхронным протоколом I2C[2] (который иногда также называется интерфейсом TWI[3]) — представляют собой два наиболее распространенных последовательных протокола, с которыми вам когда-либо придется иметь дело. Этот интерфейс используется для реализации обмена данными с устройствами разных видов — например, с адаптером Wi-Fi на плате MKR100 или с SD-картами памяти, а также с разного рода датчиками.

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

Интерфейс SPI реализуется тремя или четырьмя линиями между управляющим устройством (ведущим устройством, или мастером) и периферийным (ведомым) устройством:

  • сигнал тактирования(SCK) — вывод, на который ведущее устройство подает регулярные сигналы тактирования (синхронизации);
  • выход ведущего, вход ведомого (MOSI, Master Out, Slave In): по этой линии ведущее устройство на каждый импульс тактирования посылает данные ведомому устройству;
  • вход ведущего, выход ведомого (MISO, Master In, Slave Out): по этой линии ведомое устройство на каждый импульс тактирования посылает данные ведущему устройству. Если ведомому устройству нет надобности посылать данные ведущему, вывод MISO отсутствует;
  • выбор ведомого(SS, Slave Select) или выбор схемы (CS, Chip Select) — поскольку к шине может быть подключено несколько ведомых устройств, каждое из них имеет контакт CS для его выбора ведущим устройством. Чтобы выбрать определенное ведомое устройство, ведущее устройство устанавливает низкий уровень на этом контакте. Если на этом контакте установлен высокий уровень, устройство отключено от шины.

интерфейс SPI

Поскольку интерфейс SPI является стандартным способом программирования контроллеров AVR, большинство плат на этих контроллерах, включая Arduino Uno и более ранние модели, оснащены разъемом ICSP, на который выведены линии SPI. Этот разъем выглядит следующим образом:

разъем ICSP

Если ваша плата имеет разъем ICSP, вы можете быть уверены, что его распиновка будет такой, как показано на рисунке. Но функции SPI в разных микроконтроллерных платах выводятся на разные контакты. В следующей таблице дается информация о выводе функций SPI на контакты плат Arduino Uno, 101 и MKR1000:

Функция Uno 101 MKR1000
MOSI 11 или ICSP4 ICSP4 8
MISO 12 или ICSP1 ICSP1 10
CLK 13 или ICSP3 ICSP3 9
CS 10 10 по выбору пользователя

[1] SPI, Serial Peripheral Interface — последовательный интерфейс периферийных устройств.

[2] I2C, Inter-Integrated Circuit — шина данных для связи интегральных схем.

[3] TWI, Two-Wire Interface — двухпроводной интерфейс.