Какой интерфейс лучше spi или uart. USART и UART: в чем различие

Какой интерфейс лучше spi или uart. USART и UART: в чем различие

Протокол передачи данных UART
Универсальный асинхронный приёмопередатчик

Предисловие

Современная цифровая электроника - это всегда соединения между цепями (процессорами, контроллерами и т.д.) для создания симбиотической системы. Для того, чтобы отдельные микросхемы могли бы "понимать" друг друга, они должны разделять некий общий протокол связи. За годы существования цифровой техники было разработано множество протоколов. В целом, их все можно разделить на две большие группы - параллельные и последовательные.

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

Параллельные интерфейсы передают одновременно (параллельно) несколько бит информации (отсюда, собственно и их название). Для передачи данных такие интерфейсы требуют наличия шин, состоящих из 8, 16 или более проводников.

Схема параллельного 8-разрядного интерфейса. Передача данных управляется тактирующим сигналом CLK. Байт данных передается по каждому импульсу CLK . Используется 10 проводов.

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

Эти два интерфейса можно сравнить с потоком автомобилей. Параллельный интерфейс - это широкое шоссе с количеством полос движения более восьми, а последовательный интерфейс больше поход на двухполосную сельскую дорогу. Мега - Шоссе, потенциально, имеет бОльшую пропускную способность, но очень дорого с точки зрения строительства. Сельская дорога просто выполняет свою функцию и стоит во много раз дешевле многополосного мега-шоссе.

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

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

За время существования цифровой техники были созданы десятки последовательных протоколов. USB (универсальная Последовательная Шина) и Ethernet - это пример двух наиболее популярных сейчас последовательных протоколов. Другие очень популярные последовательные интерфейсы - это SPI, I2C и последовательный интерфейс, о котором пойдет речь в этой статье. Каждый их этих интерфейсов можно отнести к одной из двух подгрупп - Асинхронные и Синхронные.

Синхронный протокол всегда включает линию тактового сигнала. Это обеспечивает более простую (и зачастую более быструю) передачу данных, но требует как минимум один дополнительный провод. Пример синхронных интерфейсов - это SPI и I2C.

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

Асинхронный последовательный интерфейс, о котором здесь идет речь, широко используется во встраиваемых системах. Если вы хотите добавить в свой проект модуль GPS, Bluetooth, XBee, последовательные ЖК-дисплеи или многие другие внешние устройства, вам, вероятно, придется столкнуться с одним из последовательных интерфейсов.

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

Биты данных
- Биты синхронизации
- Биты проверки четности
- Скорость передачи

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

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

Данный параметр определяет скорость передачи данных по последовательной линии. Обычно это выражается в единицах бит в секунду (бит / с или БОД). Если вы инвертируете этот параметр, выраженный в бодах, то получите время, которое требуется для передачи одного бита. Это значение определяет, как долго передатчик держит последовательную линию в высоком / низком состоянии или в какой период принимающее устройство производит выборку своей линии.

Скорость передачи может быть практически любой в пределах разумного. Единственное требование заключается в том, что оба устройства работали с одинаковой скоростью. Одна из наиболее распространенных скоростей передачи, особенно для простых применений, где скорость не критична, составляет 9600 бит / с. Другие «стандартные» скорости - 1200, 2400, 4800, 19200, 38400, 57600 и 115200.

Чем выше скорость передачи в бодах, тем быстрее осуществляется передача и прием данных. Но для максимальной скорости существуют физические ограничения. Обычно на практике вы не увидите скоростей, превышающих 115200. Для большинства микроконтроллеров это максимальная скорость. Если выбрать слишком высокую скорость, то неизбежно появятся ошибки на
принимающей стороне.

Кадры данных

Каждый блок данных (обычно это байт) фактически отправляется в пакете или кадре битов. Кадры создаются путем добавления бит синхронизации и бит четности к битам данным.

Давайте рассмотрим каждую часть кадра более подробно

Блок Данных (Data chunk)

Самая важная часть каждого пакета - это блок данных, так как именно этот блок несет полезную информацию. Мы намеренно называем этот блок "куском" данных (chunk), поскольку его размер конкретно не указан. Количество данных в каждом пакете может быть установлено любым - от 5 до 9 бит. Разумеется, стандартный размер данных - это наш с вами основной 8-разрядный байт, но другие его размеры также в ходу. 7-битный блок данных может быть более эффективным, чем 8-битный, особенно если вы просто переносите 7-битные символы ASCII (текст).

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

Биты синхронизации

Биты синхронизации представляют собой два или три специальных бита, передаваемых с каждым фрагментом данных. Это стартовый и стоповый биты. Эти биты отмечают начало и конец пакета. Всегда есть только один стартовый бит, но количество стоповых бит настраивается отдельно. Может быть один или два стоп-бита (чаще всего используется один).

Старт-бит всегда определяется линией данных по его спаду (переходу от 1 в 0), в то время как стоп биты определяются линией по фронту, то есть по переходу из 0 в 1.

Биты четности

Четность - это форма очень простой, низкоуровневой проверки ошибок. Может быть два варианта такой проверки: нечетный или четный. Чтобы создать бит четности, все 5-9 бит блока данных складываются, а четность суммы определяет, установлен бит четности или нет. Например, представим себе что у нас проверка установлена в режим четности. Байт данных в двоичном представлении равен 01011101. Видим, что в байте нечетное количество единиц (пять единиц). В этом случае бит проверки четности будет установлен в 1. Если мы настроим режим проверки на на нечетность, то соответственно, бит проверки будет установлен в 0.

Пример настройки протокола: 9600 8N1

9600 8N1 - 9600 бод, 8 бит данных, без контроля четности и 1 стоповый бит - это одна из наиболее часто используемых настроек последовательного протокола. Итак, как выглядит пакет или два из 9600 8N1 данных? Приведем пример:


Фактически для каждого байта передаваемых данных отправляются 10 бит: начальный бит, 8 бит данных и стоповый бит. Таким образом, при 9600 бит / с мы фактически отправляем 9600 бит в секунду или 960 (9600/10) байтов в секунду.

Теперь, когда вы знаете, как создавать последовательные пакеты, мы можем перейти к разделу аппаратного обеспечения.
Мы увидим, как всё это будет реализовано на уровне сигнала.

Последовательная шина состоит всего из двух проводов: один для отправки данных и другой - для приема. Таким образом, последовательные устройства должны иметь два последовательных контакта: приемник, (RX ) и передатчик (TX ).

Важно понимать, что обозначения RX и TX относятся к самому устройству. Поэтому RX одного устройства должен соединяться с TX другого, и наоборот. Это может показаться странным, если вы привыкли подключать сигналы VCC к VCC, GND к GND, MOSI в MOSI и т.д. Но все-таки это имеет смысл, поскольку передатчик (TX ) должен разговаривать с приемником (RX) , а не с другим передатчиком.

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

Некоторые последовательные шины могут функционировать с помощью всего лишь одного провода между отправляющим и принимающим устройством. Например, ЖК-дисплеи с последовательным включением на самом деле не передают никаких данных обратно в управляющее устройство. Это называется симплексная последовательная связь. Все, что вам нужно - это один провод TX ведущего устройства к контакту RX управляемого.

Реализация в железе

Итак, мы с вами рассмотрели асинхронный последовательный протокол с концептуальной стороны. Мы знаем, какие провода нам нужны. Но как осуществляется последовательная связь на уровне сигнала? На самом деле, по-разному. Существуют всевозможные стандарты. Давайте рассмотрим пару наиболее популярных аппаратных реализаций последовательного интерфейса: логического уровня (TTL) и RS-232.

Когда микроконтроллеры и другие низкоуровневые ИС взаимодействуют между собой по последовательному протоколу, они обычно делают это на уровне TTL (транзисторно- транзисторная логика). Последовательные сигналы TTL живут между диапазоном напряжения питания микроконтроллера - обычно от 0 до 3,3 В или 5 В. Сигнал на уровне VCC (3,3 В, 5 В и т. д.) указывает либо о простое, либо это - бит 1 данных, либо стоп-бит. Сигнал 0 В (GND) представляет собой либо стартовый бит, либо бит данных значения 0.

Интерфейс , который можно найти на некоторых более старых компьютерах и периферийных устройствах, похож на обычный последовательный TTL. У них просто разные уровни напряжения. Обычно сигналы RS-232 варьируются от -13 В до +13В, хотя спецификация позволяет все что угодно в диапазоне от +/- 3 В до +/- 25 В. Низкое напряжение (-5 В, -13 В и т. д.) указывает либо холостой ход, либо стоп-бит, либо бит данных значения 1. Высокий сигнал RS-232 означает либо стартовый бит, либо 0-бит данных. В полярности сигналов как раз кроется противоположность последовательному TTL.

Во встроенных схемах (внутри одного устройства) намного проще использовать последовательные сигналы формата TTL. Но в случае с длинными линиями передачи данных низкие уровни TTL намного более восприимчивы к потерям и помехам. RS-232 или более сложные стандарты, такие как RS-485, лучше подходят для последовательных передач на большие расстояния.

Когда вы соединяете два последовательных устройства вместе, важно убедиться, что их сигнальные напряжения совпадают. Вы не можете напрямую соединять последовательное устройство TTL с шиной RS-232. Вам придется конвертировать их уровни для взаимной совместимости.

UART

Универсальный асинхронный приемник / передатчик (UART) представляет собой блок схем, ответственный за реализацию последовательной связи. По сути, UART выступает в качестве посредника между параллельными и последовательными интерфейсами. На одном конце UART есть шина из восьми (или около того) линий данных (плюс некоторые управляющие контакты), с другой - два последовательных провода - RX и TX.

Интерфейсы UART существуют в виде отдельных микросхем, но чаще всего они встроены в микроконтроллеры. Чтобы узнать, есть ли у вашего МК протокол UART, вам придется почитать даташит на этот контроллер. У некоторых нет ни одного, у некоторых есть, у некоторых их несколько. Например, Arduino Uno, основанный на старом добром ATmega328, имеет только один UART, в то время как Arduino Mega - построенный на ATmega2560 - имеет целых четыре UART.

R и T в терминологии UART несут ответственность за отправку и получение последовательных данных. На стороне передачи UART должен создать пакет данных - добавление битов синхронизации и четности - и отправить этот пакет по линии TX в соответствии с установленной скоростью передачи. На стороне приема UART должен проверять линию RX со скоростью, соответствующей ожидаемой скорости передачи в бодах, выбирать биты синхронизации и выделять данные.

Истерии появилось множество вопросов, как подключить плату к компьютеру. И многие люди даже не понимают, что же такое UART. И я решил рассказать здесь какой это мощный инструмент.

Роутер превращается в компьютер, если к нему по UART подключить клавиатуру и дисплей

От телеграфа к COM-порту

Протокол UART (Universal asynchronous receiver/transmitter) или, по-русски, УАПП (универсальный асинхронный приемопередатчик) - старейший и самый распространенный на сегодняшний день физический протокол передачи данных. Наиболее известен из семейства UART протокол RS-232 (в народе – COM-порт, тот самый который стоит у тебя в компе). Это, наверное, самый древний компьютерный интерфейс. Он дожил до наших дней и не потерял своей актуальности.

Надо сказать, что изначально интерфейс УАПП появился в США как средство для передачи телеграфных сообщений, и рабочих бит там было пять (как в азбуке Морзе). Для передачи использовались механические устройства. Потом появились компьютеры, и коды ASCII, которые потребовали семь бит. В начале 60-х на смену пришла всем известная 8-битная таблица ASCII, и тогда формат передачи стал занимать полноценный байт, плюс управляющие три бита.

В 1971 году, когда уже начался бум микросхем, Гордон Белл для компьютеров PDP фирмы Western Digital сделал микросхему UART WD1402A. Примерно в начале 80-х фирмой National Semiconductor был создан чип 8520. В 90-е был придуман буфер к интерфейсу, что позволило передавать данные на более высоких скоростях. Этот интерфейс, не претерпев практически никаких изменений, дошел и до наших дней

Физика интерфейса

Чтобы понять, что роднит и отличает разные UART-интерфейсы, разберем принцип работы самого популярного и любимого нами протокола RS-232. Дотошно расписывать все тонкости его работы я не буду. Об этом написан ни один десяток мегабайт статей, и если ты умеешь пользоваться Гуглом, то без проблем найдешь всю необходимую информацию. Но основы я расскажу, благо с ними можно уже круто всем рулить, а всякие фишки используются очень редко.

Основные рабочие линии у нас – RXD и TXD, или просто RX и TX. Передающая линия – TXD (Transmitted Data), а порт RXD (Received Data) – принимающая.
Эти линии СОМ-порта задействованы при передаче без аппаратного управления потоком данных. При аппаратном потоке задействованы еще дополнительные интерфейсные линии (DTS, RTS и пр.). Выход передатчика TX соединен с входом приемника RX и наоборот. Электрический принцип работы RS-232 отличается от стандартной 5-вольтовой TTL логики. В этом протоколе логический нуль лежит от +3 до +12 вольт, а единица от -3 до -12, соответственно. Промежуток от -3 до +3 вольт считается зоной неопределенности. Учти, что все напряжения указаны относительно корпуса компьютера, или земли. Теперь, я думаю, ты понимаешь, зачем в компьютерном блоке питания существует сразу два напряжения: -12 и +12 вольт. Они были введены специально для работы СОМ-порта.


Приём сигнала по RS-232 (взято из книги М.Гук «Аппаратные интерфейсы ПК»)

Такая большая амплитуда рабочих напряжений, целых 24 вольта, нужна в первую очередь для помехоустойчивости линий связи. По стандарту, длина кабеля, по которому у нас бегают данные, может быть 15 м. Хотя на практике люди умудрялись заставлять его работать даже на 25 м. Электрические параметры RS-232 – это главная характеристика, которая отличает его от других протоколов семейства UART.

Следующие характеристики – формат посылки и скорость передачи данных – полностью применимы ко всем видам UART и обеспечивают их совместимость через несложные схемы сопряжения.

Стандартная посылка занимает 10 бит. Но правило это распространяется только на стандартные настройки СОМ-порта. В принципе, его можно перенастроить так, чтобы он даже интерфейс One-Wire понимал. В режиме простоя, когда по линии ничего не передается, она находится в состоянии логической единицы, или -12 вольт. Начало передачи обозначают передачей стартового бита, который всегда равен нулю. Затем идет передача восьми бит данных. Завершает посылку бит четности и стоповый бит. Бит четности осуществляет проверку переданных данных. Стартовый бит говорит нам, что пересылка данных завершена. Надо отметить, что STOP-бит может занимать 1, 1.5, и 2 бита. Не стоит думать, что это дробные биты, это число говорит только о его длительности. Стоповый бит, как и стартовый, равен нулю.


Сигнал UART на экране осциллографа. Виден старт бит, данные и стоповый бит. Спасибо за картинку

Скорость работы

Даже если тебе раньше никогда не приходилось работать с СОМ-портом, по крайней мере, в модеме ты должен знать номинальные скорости работы: 9600, 28800, 33600, 56000 и т.п. Сколько бит в секунду убегает из нашего порта? Вот смотри, допустим, скорость у нас 9600 бит в секунду. Это означает, что передача одного бита будет занимать 1/9600 секунды, а пересылка байта – 11/9600. И такая скорость для байта верна только в случае, если стоп-бит будет занимать один бит. В случае, если он занимает два стоп-бита, то передача будет 12/9600. Это связано с тем, что вместе с битами данных передаются еще специальные биты: старт, стоп и бит четности. Линейка скоростей СОМ-порта стандартизирована. Как правило, все устройства работают на трех стандартных скоростях: 9600, 19200, 115200. Но возможны другие варианты, даже использование нестандартных скоростей или скорости, меняющейся во времени, – с этим я сталкивался при разборе полетов очередного устройства.

Такой разный протокол

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

Второй по распространению интерфейс после RS-232 – это RS-485. Он является промышленным стандартом, и передача в нем осуществляется по витой паре, что дает ему неплохую помехоустойчивость и повышенную скорость передачи до 4 мегабит в секунду. Длина провода тут может достигать 1 км. Как правило, он используется на заводах для управления разными станками.

Надо сказать, что IRDA, или инфракрасная связь, которая встроена в большинство телефонов и КПК, тоже по сути является UARTом. Только данные передаются не по проводам, а с помощью инфракрасного излучения.

В SMART-картах (SIM, спутниковое телевиденье, банковские карты) – тех самых устройствах, которые мечтает похачить каждый уважающий себя фрикер – тоже используется наш любимый UART. Правда, там полудуплексная передача данных, и логика работы может быть 1,8/3,3 и 5 вольт. Выглядит так, будто RX запаян с TX на одном конце и на другом – в результате, один передает, другой в этот момент слушает, и наоборот. Это регламентировано стандартом смарт-карт. Так мы точно знаем, сколько байт пошлем, и сколько нам ответит карточка. Тема достойна отдельной статьи. В общем, запомни, что UART есть практически везде.


Устройства, которые имеют на своём борту UART, по часовой стрелке: мышка, ридер-эмулятор SMART-карт, КПК Palm m105, отладочная плата для микроконтроллера ATtiny2313 (или AT89C2051), модем.

Сопряжение интерфейсов

Я уже глаза намозолил разными интерфейсами, но как с ними работать-то? Ну, с обычным RS-232 понятно, а, допустим, с 5-вольтовым юартом как быть? Все просто: существуют различные готовые микросхемы-преобразователи. Как правило, в маркировке они содержат цифры «232». Увидел в схеме микруху с этими цифирями – будь уверен: скорее всего, это преобразователь. Через такие микросхемы с небольшим обвязом и сопрягаются все интерфейсы UART. Я не буду рассказывать о промышленных интерфейсах, а скажу о тех преобразователях, которые интересуют нас в первую очередь.

Самый известный преобразователь интерфейса – это микросхема, разработанная фирмой MAXIM, которая и получила от нее часть своего названия (max232). Для ее работы требуется четыре конденсатора от 0,1 микрофарады до 4 микрофарад и питание 5 вольт. Удивительно, что эта микросхема из 5 вольт генерирует отрицательное напряжение, чтобы сопрягать 5-вольтовый UART с RS-232.

Существуют микросхемы сопряжения USB с UART, например, микросхема ft232rl. В Ubuntu для этой микросхемы уже встроены драйвера. Для Windows их придется качать с официального сайта. После установки драйверов в системе появится виртуальный СОМ-порт, и с ним уже можно рулить различными устройствами. Советую не принимать эти микросхемы, как единственно возможные. Найдется громадное количество более дешевых и интересных аналогов, посему наседай на Гугл и поймешь, что мир UARTа – это круто.

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

Что нам это дает?

Как ты понял, интерфейс UART присутствует во многих устройствах, в которых стоит какой-либо процессор или контроллер. Я даже больше скажу: если там стоит контроллер, то юарт есть стопудово (только он не всегда может использоваться). Как правило, по этому интерфейсу идет наладка и проверка работоспособности девайса. Зачастую производитель умалчивает о наличии этого интерфейса в изделии, но найти его несложно: достаточно скачать мануал на процессор и, где находится юарт, ты будешь знать. После того, как ты получишь физический доступ к железяке по нашему интерфейсу, можно его настроить на свое усмотрение или даже заставить работать, так как надо тебе, а не как задумал производитель. В общем, – выжать максимум возможностей из скромного девайса. Знание этого протокола дает также возможность подслушать, что же творится в линиях обмена между различными процессорами, так как часто производители организуют целые юарт-сети в своем устройстве. В общем, применений много, главное – интуитивно понимать, как это делать.

Апдейтим роутер

Намедни я намутил себе WiFi-роутер WL-520GU и, прочитав статью Step’a «Level-up для точки доступа» (][ #106), успешно установил туда Linux. Но у меня возникли проблемы с монтированием swap-раздела жесткого диска. Так появилась необходимость посмотреть лог загрузки точки доступа – подмонтировался раздел или нет – причем, как говорится, на лету, чтобы сразу вносить необходимые изменения. Шестым чувством я подозревал, что в моем роутере просто обязан быть UART. Я взял в руки крестовую отвертку и начал его разбирать. Дело тривиальное, но с заковыркой – потайные винтики находятся под резиновыми ножками (если решишь повторить, помни, что при разборе ты лишаешься гарантии). Моему взору предстала достаточно скучная плата, где все «chip-in-one»: один центральный процессор, в который включено все, внешняя оператива, флеша, преобразователь питания и рядок разъемов с кнопками. Но на плате была не распаянная контактная площадка, точнее сказать, отверстия под иголки. Их было четыре штуки. Вот он UART, это очевидно! По плате даже без мультиметра видно, что крайние иголки – это +3,3 вольта и второй – земля. Средние контакты, соответственно, RX и TX. Какой из них что, легко устанавливается методом научного тыка (спалить интерфейс очень проблематично).
Сразу хочу отметить, что интерфейс UART в каждом роутере выглядит по-разному. В большинстве случаев, это не распаянные отверстия на плате. Правда, в одном роутере от ASUS я даже встретил полностью подписанный разъем.

Собираем преобразователь

Чтобы подключить роутер к компу, необходимо сопрячь интерфейсы RS-232 с UARTом роутера. В принципе, можно подключить к USB, используя указанную выше микросхему FT232RL, – что я и сделал при первой проверке роутера. Но эта микросхема – в достаточно сложном для пайки корпусе, посему мы поговорим о более простых решениях. А именно – микросхеме MAX232. Если ты собираешься питаться от роутера, то там, скорее всего, будет 3,3 вольта, поэтому лучше использовать MAX3232, которая обычно стоит в КПК (схему распайки нетрудно найти в инете). Но в моем роутере присутствовало питание +5 вольт на входе, а указанных микросхем у меня великое множество, и я не стал заморачиваться. Для сборки нам потребуются конденсаторы 0,1 мкФ (4 штуки) и сама микросхема. Запаиваем все по традиционной схеме, и начинаем эксперименты.


Исходники для сборки

На выход я сразу повесил 9-пиновый разъем типа «папа», чтобы можно было легко подключить нуль-модемный кабель. Если ты помнишь, во времена DOSа такими кабелями делали сетку из двух компов и резались в «Дюкнюкем». Провод для наших целей собрать несложно. Правда, получится не полный нуль-модем и через него особо не поиграешь, но рулить точкой доступа будет самое то! Тебе понадобятся два 9-пиновых разъема типа «мама», корпуса к ним и провод, например, от старой мышки или клавы (главное, чтобы в нем было три провода). Сначала соединяем земли ¬- это пятый контакт разъемов; просто берем любой провод и с обоих сторон припаиваем к 5-му контакту. А вот с RX и TX надо поступить хитрее. С одного конца провода запаиваем на 3-й контакт, а с другого – на 2-й. Аналогично с третьим проводом, только с одного конца запаиваем на 2-й контакт, с другого – на 3-й. Суть в том, что TX должен передавать в RX. Прячем запаянные разъемы в корпус - и готов нуль-модемный кабель!


Распаянные иголки на плате роутера.

Для удобства монтажа в материнку роутера я впаял штырьковый разъем, а в монтажку с MAX232 – обратный разъем и вставил платку, как в слот. RX и TX роутера подбираются экспериментально.


Собраная плата

Теперь надо запитать микросхему преобразователя. Общий провод у нас присутствует уже прямо в разъеме на мамке роутера. А вот + 5 вольт находится прямо у входа питания роутера, в месте, где подключается адаптер. Точку нахождения 5 вольт определяем вольтметром, измеряя разные узлы относительно земли роутера.
Подключаем питание. Включаем и начинаем наши злостные эксперименты.


Прожигаем отверстие для вывода проводов


Распаянный СОМ-порт


Всё в сборе. Обратите внимание, что красный провод питания идёт к разъёму адаптера роутера. Узелок внутри сделан, для того чтобы рывком на оторвать припаянные провода.

Настройка терминала

Нам нужно настроить терминальную программу. В Винде все достаточно просто: запускаем Hyper Terminal, отключаем программную и аппаратную проверку данных, выставляем скорость 115200 и один стоповый бит. А вот в Линухе дело обстоит чуть хитрее. У меня Ubuntu, и рассказывать буду про нее. Для начала разберись, как в твоей сборке именуется СОМ-порт. В моем случае СОМ1 был ttyS0 (если использовать к примеру микросхему FT232, то он будет именоваться ttyUSB0). Для работы с ним я использовал софтинку minicom.

Запускай ее с параметрами: minicom -l -8 -c on -s. Далее выбирай «Настройки последовательного порта»:
Последовательный порт /dev/ttyS0

* Скорость/четность/биты 115200 8N1
* Аппаратное управление потоком - нет
* Программное управление потоком - нет

Сохраняем настройки. Софтина попробует проинициализировать модем - не обращай внимания. Чтобы вызвать меню, нажми . Там можно менять настройки, например: включить/выключить эхо - Е.
Настройка

Я не рекомендую подключать микросхему преобразователя к роутеру, дабы проверить ее функционал. Допускается только брать с него питание. Проверка проходит очень просто - необходимо перемкнуть RX с TX. Сначала перемыкаешь в СОМ-порте 2-й и 3-й контакт - проверяешь настройки терминалки. Пишешь что-то на клаве: если символы возвращаются, значит, все ОК. Также проверяешь кабель, те же контакты. Потом подключаешь микросхему, и уже у нее на выходе ставишь перемычку. Я заостряю на этом внимание, потому что, например, у меня возникли проблемы, и ничего не работало, пока я все не проверил и не нашел ошибку.

После всех настроек можешь смело цеплять к роутеру и искать RX-TX на роутере, периодически выдергивая из него питание. Если все сделано правильно, то при подаче питания ты увидишь лог загрузки роутера. Принимай поздравления, теперь у тебя полный аппаратный рут, так, будто ты сидишь за монитором с клавой роутера.


Лог загрузки роутера в программе minicom

Автономное плаванье

Согласись, делать через терминальную программу то же самое, что удобнее сделать через SSH – не айс. Мне хотелось превратить роутер в автономный Linux-компьютер, со своей хитрой архитектурой. Для этого нужно, чтобы данные с клавиатуры передавались по UART, и по нему же выводились на монитор. Паять и разрабатывать устройство было лениво. Тогда-то и пришла идея заюзать для этих целей пылящийся без дела КПК. По сути, наладонник будет исполнять роль контроллера клавиатуры и дисплея, ну и служить сопряжением интерфейсов.

Сначала я попробовал древнейший Palm m100. Но, видимо, у него очень маленькая буферная память, и от количества данных, которые идут с роутера, ему становилось плохо. Я взял другой - промышленный КПК, с нормальным СОМ-портом и терминалкой. Подключил, вставил в док и, в результате, получил небольшой линукс-компьютер. В принципе, вместо дорогущего промышленного КПК подойдет большинство наладонников, работающих под операционкой WinCE, главное – найти подходящий терминальный софт.


Линукс компьютер:)

Итоги

Итак, я показал небольшой пример использования UART. Если ты вкуришь в этот протокол, то поверь, станешь просто повелителем различных железок. Есть он практически везде, и через него можно сопрягать, казалось бы, совершенно разные вещи. К примеру, к тому же роутеру при небольших настройках подключается мобильный телефон по юарту, – и раздает с него интернет. В общем, применений куча. Не бойся экспериментировать, самообразовываться и реализовать свои идеи.

Этот пост является отредактированной для хабра версией моей статьи в Хакере № 05/09 «Главный инструмент фрикера».

Литература:
1. Михаил Гук «Аппаратные интерфейсы ПК» - просто студенческая библия по персоналке.

UART - Universal Asynchronous Receiver-Transmitter, или по русски Универсальный Асинхронный Приёмопередатчик - УАПП. Используется для организации связи компьютера с различными цифровыми устройствами в электронике. Интерфейс преобразует передаваемые данные в последовательный код так, чтобы была возможна их передача по одной цифровой линии другому электронному устройству. Прямого описания протокола UART все таки есть, но его косвенное описание можно увидеть в стандартах на широко известные физический протоколы RS-232, RS-422, RS-423, RS-485

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

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

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

Универсальный Асинхронный Приёмопередатчик - УАПП применяется с начала 60-х годов прошлого века и с тех пор претерпевал серьезные модернизации. Даже в 21 столетии последовательные протоколы UART всё ещё представляют один из основных методов обмена битами между различными цифровыми устройствами на небольшие расстояния.

UART является базой так широко используемого в прошлом . В самом простом виде UART интерфейс представляет собой три провода: передача, приём и земля.


Существенный минус универсального асинхронного приёмопередатчика кроется в том, что нет возможности определить какое из цифровых устройств является ведущим, а какое ведомым (мастер / раб). Обычно, это определяет то кто проектирует схему может назвать этот провод как TX и задать работу устройства, в соответствии с рисунком ниже:


В данном случае микроконтроллер принимает, и передаёт данные. А можно сделать следующим образом:


В соответствие с этой схемой микроконтроллер всегда передаёт (TX) получателю (RX) и наоборот. Какая из двух схем все таки правильная? Оказывается обе, все зависит только от производителя микросхемы и готового цифрового устройства.

Внимание TX, подключенный к TX и RX-RX, в большинстве случаев приведет к сгоранию микросхемы, так что это хороший пример того, что надо читать документацию перед тем как соединять чипы по UART, так как существует несколько способов соединения.

Если приемник и передатчик находятся на одной печатной плате, тогда уровень сигнала при приеме-передаче практически равен уровню напряжения питания микроконтроллера. Допустим, уровень логической единицы - "1" будет передаваться с потенциалом 3.3В, а ноль, с потенциалом, не более 0,5 Вольта. С передачей сигнала на большие расстояния начинают появляться проблемы в виде искажения сигнала и растет , появляются ошибки передачи, вплоть до полной остановки.

Для того, чтобы исключить такие проблемы в линию передачи и приема добавляют дополнительные буферы, которые усиливают сигнал. После этого их можно передавать на десятки метров без потери информации. Но в д.с для передачи уровня логической единицы применяется напряжение -3В..-15В, а для "0" - +3В до +15В.


Вместо инхронизации в UART применяется, так называемый "стартовый бит" подготавливающий цифровую схему к передачи сообщения. После стартового бита иду данные, а затем в линию посылается "стоп-бит", говорящий о завершении передачи информации. Вместе выходит 10 бит: первый - старт-бит, 8 бит данных, и последний стоп-бит, смотри осциллограмму передачи данных по протоколу UART интерфейса на рисунке ниже.


Биты передаются с определенной скоростью передачи, которая измеряется в битах в секунду или, в бодах. Так 9600 бод эквивалентно 9600 бит/сек. А так как у нас передаётся 10 бит за одно сообщение, это значит, что мы при этой скорости можем передать 960 сообщений за одну секунду.

Значение скорости передачи не передаётся вместе с сообщением, то в приёмнике и передатчике должны быть заранее заданы равные скорости. Интерфейс UART допускает до 5% рассинхронизации таймеров. В этом интервале он может получать и принимать верные информационные данные.

Можно сказать со 100% уверенностью, что каждый современный микроконтроллер имеет в своем составе универсальный последовательный интерфейс - UART. Умея работать с этим портом вы можете согласовать работу старых и современных электронных устройств, передать или принять данные в различные электронные устройства.

В современных микроконтроллерах, вместо UART интерфейса используют полностью с ним совместимый стандарт USART (универсальный асинхронный/синхронный приёмопередатчик).

USART это более гибкий в плане настройки UART с дополнительными функциями. В USART можно регулировать длину слова с более большим интервалом (от 5 до 9) чем в UART (от 8 до 9). В USART возможна как синхронная так асинхронная и передача данных (в UART осуществляется только асинхронная). При синхронной передачи помимо двух линий - данных и питания, применяется дополнительная шина (XCK) с синхросигналом. С такой настройкой USART уже пересекается с интерфейсом SPI и его можно применять как «ведущий» в интерфейсе SPI.

Рассмотрим классический случай, когда интерфейс асинхронный (т.е. с отсутствующей линией синхронизации).

Передача данных в UART интерфейсе происходит по одному биту в одинаковые временные промежутки. Этот промежуток задается скоростью UART и для конкретного типа соединения обозначается в бодах, что соответствует количество бит в секунду. В электронике имеется общепринятый ряд типовых скоростей: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400;460800; 921600 бод;

Скорость (S, бод) и длительность бита (T, секунд) связаны между собой общеизвестной формулой

Байт данных отправляются в пакетах (первый бит идет перед байтом данных и второй бит следует после, количество бит опциональны)


Для приема и передачи данных в интерфейсе UART применяются всего две линии данных и земля:

передающая шина данных (TXD или TX);
принимающая линия данных (RXD или RX);
земля (GND).

Уровню логической единицы и нуля аналогичны типовым уровням TTL:

лог. "1" - +5 Вольт;
лог. "0" 0 Вольт.

Разновидность UART - интерфейс RS-485

Сети, построенные на основе интерфейсов RS-485 и RS-422, представляет собой приемопередатчики, подключенные с помощью витой пары. В основе RS-485 лежит принцип дифференциальной (балансной) передачи данных. Основа ее базируется на передаче одного сигнала по двум проводам. Причем по первому проводу (A) интерфейса следует оригинальный сигнал, а по второму - его инверсная копия. Простыми словами, если на А "1", то на В "0" и наоборот, т.е, между двумя проводами витой пары всегда существует разность потенциалов: при "1" уровне она положительная, при "нулевом" - отрицательная.

Интерфейс RS-232 (стандарт EIA) был создан для сопряжения персонального компьютера (PC) и аппаратуры передачи данных (модема) с использованием синхронно-асинхронного режима передачи на расстояние до нескольких метров . Стандарт предусматривает два типа разъемов DB25 и DB9 с 8 сигналами. Данные передаются по 2 независимым цепям RxD, TxD приемопередатчиков интерфейса (UART1, UART2 на рис. 1.14) и позволяют использовать дуплексный режим обмена, остальные 6 сигналов предназначены для управления обменом данных. В современных реализациях интерфейса эти сигналы не используются, предполагается постоянная готовность приемопередатчиков к обмену данными (интерфейс UART). Применяемые алгоритмы управления вместо формирования управляющих сигналов производят передачу управляющих сообщений вместе с основными данными через сигнальные цепи RxD, TxD.

Рис. 1.14. Интерфейс RS232

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

В настоящее время интерфейс применяется как средство физического уровня в интерфейсах "точка-точка" с невысокой скоростью передачи данных 2,4 – 115,2 кбит/с. Наиболее часто используется асинхронный режим с форматом отдельного сообщения: стартовый бит – 5-8 бит данных – стопо- вый бит (UART-кадр). Стартовый и стоповый биты отмечают начало и конец сообщения и позволяют обеспечить синхронизацию приемопередатчиков и контроль длины сообщения; стартовый бит – сигнал логического нуля в течение 1 такта, а стоповый бит – сигнал логической единицы.

Дуплексный режим передачи данных предполагает независимость работы приемника и передатчика интерфейса. Поэтому они содержат независимые схемы управления и регистры данных. Обычно запись байта данных в регистр передатчика приводит к старту процедуры передачи UART-кадра, а завершение приема UART-кадра формирует сигнал готовности байта данных к считыванию из регистра приемника.

Из-за несложных алгоритмов управления, универсальности и возможности дуплексного обмена данными интерфейс UART широко применяется как стандартный последовательный интерфейс связи между различными техническими средствами автоматизации. Например, микроконтроллеры семейств AVR, PIC и многие другие содержат встроенные средства аппаратной реализации интерфейса UART, через которые могут быть подключены внешние устройств, обеспечивающие поддержку других современных интерфейсов LVDS, 1-W, IrDA, RS-485, CAN и т.п.

Некоторые характеристики и особенности микросхем UART этой фирмы приведены на рис. 1.16.

Если применяемые технические средства не содержат встроенного интерфейса UART, можно использовать специальные микросхемы UART. Эти микросхемы (рис. 1.15) преобразуют параллельный формат данных в последовательный, обеспечивают хранение данных в буферных запоминающих устройствах, формируют необходимые сигналы управления интерфейса, запросы прерываний для обработки данных передаваемых интерфейсом и т.п. Компания EXAR является признанным лидером в области

производства микросхем UART.

Рис. 1.15. Передача данных с помощью микросхем UART

Рис. 1.16. Классификация микросхем UART фирмы EXAR

Самым простым среди 8-разрядных UART является микросхема ST16C450 (рис. 1.17).

Рис. 1.17. Структурная схема ST16C450

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

Раздельное управление приемом и передачей;

Программно управляемая скорость передачи (от 50 бит/с до 1.5 Мбит/с);

Сигналы управления модемом (CTS, RTS, DSR, DTR, RI и CD);

Программируемая длина передаваемых символов (5, 6, 7 и 8 бит);

Генерация и обнаружение битов четности;

Низкий потребляемый ток – 1.2 мА.

Кроме традиционных UART с 8-разрядной параллельной шиной, фирма EXAR производит 32-разрядные UART для работы с шиной PCA. Внутренние буферы FIFO предназначены для разгрузки процессорного ядра и позволяют уменьшить число прерываний для обслуживания UART. Например, микросхема UART типа XR16C85x с объемом FIFO 128 байт может накапливать в буфере целую страницу данных, увеличивая длительность передачи без прерываний CPU.

Ранее было отмечено, что интерфейс RS-232 предусматривает применение двух типов разъемов: DB9 и DB25. Назначение контактов разъемов приведено в табл. 1.2.

Таблица 1.2

№ контакта

№ контакта

Назначение

Детектор сигнала с линии (несущей)

Прием данных

Передача данных

Готовность терминала

Сигнальное заземление

Готовность данных

Запрос передачи

Готовность к передаче

Индикатор вызова

Достаточно часто сигналы интерфейса формируются со стандартными логическими уровнями (0-5 В), а по протоколу RS-232 уровни напряжений составляют ±12 В. Приемопередатчики для преобразования физических уровней сигналов интерфейса UART, называемые драйверами COM-порта, выпускаются многими производителями интегральных микросхем. Отличаются микросхемы числом приемников и передатчиков, питающими напряжениями, потребляемой мощностью, максимальной скоростью передачи, а также наличием встроенных конденсаторов и некоторыми другими параметрами.

Лидерами по производству микросхем в этой области являются фирмы Maxim и Analog Devices. Перечень микросхем RS-232 Line Driver/Receivers, выпускаемых фирмой Maxim, состоит из 150 наименований, фрагмент перечня приведен в табл. 1.3. Аналогичный перечень для Analog Devices приведен в табл. 1.4.

В стандартных применениях интерфейс RS-232 используется для соединения двух устройств. Одно из этих устройств является передатчиком, а другое – приемником. В этой связи сигналы линии связи RS-232 приемником и передатчиком формируются и обрабатываются по-разному.

Скорость (кбит/с)

Режим энерго- сбереже-ния

Состояние RxD

Конденсаторы

Напряжение питания (В)

Ток потребления (мА)

Скорость (кбит/с)

Режим энерго- сбереже-ния

Состояние RxD

Конденсаторы

Напряжение питания (В)

Ток потребления (мА)

Устройство-передатчик (например, компьютер) в системе передачи данных принято называть оконечным оборудованием данных или DTE (Data Terminal Equipment), а приемник (например, модем) – устройством аппаратуры передачи данных или DCE (Data Communication Equipment). Направление передачи сигналов между DTE и DCE показано в табл. 1.5.

Как видно из табл. 1.5, каждый сигнал выходной для одного устройства и входной – для другого. Например, для DTE-устройства сигнал передаваемых данных TD является выходным, а для DCE-устройства сигнал TD является входным. DCE-устройство формирует сигнал DCD (если это модем, то он определяет наличие несущего сигнала в телефонной линии), а DTE-устройство принимает этот сигнал и т.п.

Устройство DTE

Направление передачи

Устройство DCE

- * ¦¦

В некоторых случаях возникает задача обеспечить работу интерфейса RS- 232 между двумя однотипными устройствами, например, необходимо обеспечить соединение DTE-DTE (компьютер-компьютер). Соединения между разъемами в этом случае определяются коммуникационными программами, используемыми компьютерами. В минимальной конфигурации кабель, соединяющий два устройства, должен содержать три провода: один – для объединения сигнальной земли SG, второй и третий – для передачи сигналов TD и RD (рис. 1.18), причем необходимо выполнить перекрестное соединение сигналов. Такой кабель, например, может обеспечить соединение двух компьютеров с помощью встроенной в Windows программы Hyper Terminal.

Если компьютер "предполагает", что он работает с модемом, то, в этом случае, можно применить нуль-модемный кабель (рис. 1.19). На этом рисунке цифрами обозначены контакты разъема DB25M, а штриховой линией – провод "защитной земли"- GND.

Рис. 1.18. Трехпроводный вариант RS-232

Рис. 1.19. Нуль-модемные соединения кабелей RS-232

Выбор варианта соединения определяется условиями формирования управляющих и проверочных сигналов устройств DTE. Следует отметить, что вариант кабеля "a" наиболее популярен, и его следует использовать в тех случаях, когда нет достаточной информации об особенностях реализации интерфейсов соединяемых устройств. Вариант кабеля "г" позволяет "убедить" компьютер в постоянной готовности внешнего устройства DTE к приему и передаче сигналов.

Рис. 1.23. Схема питания устройства ввода-вывода от COM-порта

Статьи и Лайфхаки

Многих пользователей интересует всё, что связано с подключением платы к ПК. Одновременно с этим они задаются вопросом, что такое настройки uart в телефоне . Наша статья посвящена именно этому инструменту, а также его применению в сфере мобильных технологий.

Что же такое UART в телефоне и зачем нужна его настройка?

С английского языка UART, или universal asynchronous receiver-transmitter, можно перевести как универсальное асинхронное средство приёма-передачи. В настоящий момент это не только наиболее известный, но и достаточно старый протокол передачи информации.

Самым распространённым протоколом UART является RS-232, то есть com-порт, установленный на настольном компьютере. Его особенность заключается в том, что и сегодня он не теряет своей актуальности и активно используется. Широко известен и такой промышленный стандарт, как RS-485.

Добавим, что UART1 и UART2 применяется для подключения прошивочного кабеля, а также для соединения с компьютером. На системный разъём нашего сотового устройства выведены такие порты, как UART1, UART2 и USB. Добавим, что инфракрасный порт, по сути, также является UART. Отличие заключается лишь в способе передачи данных (не проводной, а ИК-излучение). В SIM-картах также используется этот протокол – правда, там предусмотрен полудуплексный способ передачи информации.

Отдельного внимания заслуживает запрос сопряжения интерфейсов. На сегодняшний день для этого существует особые микросхемы. Хорошим примером является микросхема ft232rl, разработанная для сопряжения UART с USB. Тем не менее, на ней не стоит зацикливаться, поскольку существуют и более дешёвые, однако весьма интересные аналоговые средства сопряжения.

Зачем нужен интерфейс UART? Как правило, именно по нему можно проверять и налаживать работоспособность нашего устройства.

Зачастую производители мобильной техники не акцентируют внимание на поддержке этого протокола. Чтобы это проверить наверняка, рекомендуется скачать мануал на тот процессор, где есть UART. Мы сможем не только получить физический доступ к устройству по нашему протоколу, но и настроить его работу на собственное усмотрение – нередко совсем не так, как это задумал производитель.

Итак, мы выяснили, что же представляет собой данный интерфейс. Однако понимание того, что такое настройки uart в телефоне, способна дать нам только подробная инструкция по настройке.

Инструкция по настройке UART в телефоне

Для настройки протокола вызываем инженерное меню телефона, набрав комбинацию *#3646633#, после чего переходим к следующему меню. Для этого заходим в пункт «Device» > «Set UART» > «UART Setting».

Мы видим такие пункты, как «PS Config» и «TST Config». Первый пункт отвечает за обмен информацией с ПК по USB-проводу, а второй необходим для отладки ПО, благодаря чему разработчики выявляют неисправности.

Каждый из пунктов содержит параметры перенаправления потока на устройство (UART 1-3 или USB) и скорость такого потока. Тестовый порт, то есть «TST Config», нам не нужен, и его мы не трогаем. Что касается «PS Config», необходимо позаботиться об определённых настройках. Устанавливаем значение «UART1». В драйвере на ПК, как правило, указана скорость потока (к примеру, 115200). Устанавливаем аналогичную скорость для UART1 (или «Auto»).

Также вместо UART1 можно выставить «USB Port», правда, в этом случае при подключении USB-провода не гарантируется, что режим USB отобразится. Перезагружаем устройство и вновь пробуем соединение.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows