После Vogue истерии
появилось множество вопросов, как подключить плату к компьютеру. И
многие люди даже не понимают, что же такое 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 на экране осциллографа. Виден старт бит, данные и стоповый бит. Спасибо DIHALTза картинку
Скорость работы
Даже если тебе раньше никогда не приходилось работать с СОМ-портом, по
крайней мере, в модеме ты должен знать номинальные скорости работы:
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
* Аппаратное управление потоком — нет
* Программное управление потоком — нет
Сохраняем настройки. Софтина попробует проинициализировать модем — не
обращай внимания. Чтобы вызвать меню, нажми <ctrl-a z>. Там можно
менять настройки, например: включить/выключить эхо — Е.
Настройка
Я не рекомендую подключать микросхему преобразователя к роутеру, дабы
проверить ее функционал. Допускается только брать с него питание.
Проверка проходит очень просто — необходимо перемкнуть RX с TX. Сначала
перемыкаешь в СОМ-порте 2-й и 3-й контакт — проверяешь настройки
терминалки. Пишешь что-то на клаве: если символы возвращаются, значит,
все ОК. Также проверяешь кабель, те же контакты. Потом подключаешь
микросхему, и уже у нее на выходе ставишь перемычку. Я заостряю на этом
внимание, потому что, например, у меня возникли проблемы, и ничего не
работало, пока я все не проверил и не нашел ошибку.
После всех настроек можешь смело цеплять к роутеру и искать RX-TX на
роутере, периодически выдергивая из него питание. Если все сделано
правильно, то при подаче питания ты увидишь лог загрузки роутера.
Принимай поздравления, теперь у тебя полный аппаратный рут, так, будто
ты сидишь за монитором с клавой роутера.
Лог загрузки роутера в программе minicom
Автономное плаванье
Согласись, делать через терминальную программу то же самое, что удобнее
сделать через SSH – не айс. Мне хотелось превратить роутер в автономный
Linux-компьютер, со своей хитрой архитектурой. Для этого нужно, чтобы
данные с клавиатуры передавались по UART, и по нему же выводились на
монитор. Паять и разрабатывать устройство было лениво. Тогда-то и пришла
идея заюзать для этих целей пылящийся без дела КПК. По сути, наладонник
будет исполнять роль контроллера клавиатуры и дисплея, ну и служить
сопряжением интерфейсов.
Сначала я попробовал древнейший Palm m100. Но, видимо, у него очень
маленькая буферная память, и от количества данных, которые идут с
роутера, ему становилось плохо. Я взял другой — промышленный КПК, с
нормальным СОМ-портом и терминалкой. Подключил, вставил в док и, в
результате, получил небольшой линукс-компьютер. В принципе, вместо
дорогущего промышленного КПК подойдет большинство наладонников,
работающих под операционкой WinCE, главное – найти подходящий
терминальный софт.
Линукс компьютер :)
Итоги
Итак, я показал небольшой пример использования UART. Если ты вкуришь в
этот протокол, то поверь, станешь просто повелителем различных железок.
Есть он практически везде, и через него можно сопрягать, казалось бы,
совершенно разные вещи. К примеру, к тому же роутеру при небольших
настройках подключается мобильный телефон по юарту, – и раздает с него
интернет. В общем, применений куча. Не бойся экспериментировать,
самообразовываться и реализовать свои идеи.