Что такое UART. Коротко о методе приема-передачи

Раз уж я буду использовать UART для связки устройств блога с Вашими проектами немного расскажу как он устроен и как им пользоваться.

Универсальный асинхронный приемопередатчик (UART) довольно старый и распространенный интерфейс. До недавнего времени разъем COM порта (тот-же UART только уровни напряжения другие) был обязательным атрибутом каждого компьютера. Теперь COM порт постепенно «отмирает» и если на «башнях» он еще не редкость, то на ноутбуках его уже нет и в помине. Но в виду простоты и популярности интерфейса подавляющее большинство микроконтроллеров имеет UART в составе своей периферии. И если персональный компьютер UART перестает удовлетворять из-за низкой скорости и невозможности расширения, то для микроконтроллеров интерфейс удобен и использование его будет продолжаться.
Раз UART есть во многих микроконтроллерах, значит мы его будем использовать как один из интерфейсов связи устройств блога с Вашими электронными устройствами.
Для начала немного теории работы интерфейса (без лишних подробностей). Для связи по интерфейсу UART используется две ножки контроллера RXD – для приема сообщений (Receiver) и TXD – для передачи сообщений (Transmitter). UART — полнодуплексный интерфейс. Это значит, что приемник и передатчик работают независимо друг от друга. Более того, передатчик или приемник можно отдельно отключить, освободив ножку контроллера для других нужд. Передача (соответственно и прием) сообщений осуществляется фиксированными пакетами битов (такой пакет называют кадром). Кадр состоит из старт-бита (с него начинается каждый кадр), битов данных (может быть от 5 до 9 бит), бита проверки четности (проверка правильности передачи данных) и одного или двух стоп-битов (сигнал об окончании кадра).

где:
IDLE — ожидание обмена — должна быть 1 ;
St — Старт-бит — всегда 0 ;
(n) — Биты данных — может быть от 5 до 9 бит;
P — Бит четности;
Sp — Стоп бит — всегда 1.

Если посылка содержит более одного байта, каждый следующий байт передается отдельным кадром. Передача (и прием) данных ведется на определенных фиксированных частотах (измеряется в Бод=бит/сек) от 600 до 128 000 Бод. Условием правильной работы порта есть задание одинаковых параметров, как для приемника, так и для передатчика (скорость, количество бит данных, бит четности, количество стоп битов).

Договоримся о формате кадра (настройках UART) для устройств блога:
Скорость передачи – 9600 (это в пределах килобайта в секунду);
Количество бит данных – 8 (наиболее удобно работать);
Бит четности – Even (производится проверка на четность);
Количество стоп-бит – 1;
В сокращенном варианте это выглядит так:
Baud Rate: 9600, 8 Data, 1 Stop, Even Parity

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

Если нужны дополнительные возможности, то полное описание UART есть в datasheet на микроконтроллер – обращайтесь к нему.

Для того чтобы устройство с блога начало работать с Вашим проектом через интерфейс UART нужно:
1 Подключить устройство блога к соответствующим ножкам микроконтроллера.
2 Настроить приемо-передатчик UART Вашего контроллера. Для этого в соответствующие порта ввода/вывода записать определенные значения.
3 Иметь (написать) процедуры приема/передачи сообщений по UART в Вашей программе.

Теперь рассмотрим подробно каждый пункт:


1 СОЕДИНЕНИЕ УСТРОЙСТВ ПОСРЕДСТВОМ UART.

Тут все просто:
— если планируется и прием и передача — устройства соединяются по двум линиям — TX_устройства с RX_проекта и TX _проекта с RX_устройства (здесь и далее под «устройством» я буду понимать устройство с блога, а под «проектом» — Ваш электронный проект);
— если нужен только прием (например принимаются данные с клавиатуры) — TX_устройства с RX_проекта;
— если нужна только передача (например передаются данные на устройство отображения) — TX _проекта с RX_устройства.


2 НАСТРОЙКА ПРИЕМО-ПЕРЕДАТЧИКА UART.

Как мы договорились выше, формат кадра для наших устройств:
Baud Rate: 9600, 8 Data, 1 Stop, Even Parity
Для работы в с этим форматом кадра нужно в разделе инициализации устройств в Вашей программе, записать соответствующие значения в нужные порта ввода/вывода контроллера. Для этого нужно открыть раздел USART datasheet’а на Ваш микроконтроллер и выбрать/вычислить необходимые значения. Но можно сделать все гораздо проще – использовать автоматические настройщики периферии – CodeWisard’ы.
Возьмем для примера микроконтроллер Attiny2313 (по аналогии можно настроить любой микроконтроллер) и настроим UART в разных языках программирования.

Для начала — Algorithm Builder .
Тут все предельно просто – создаем проект (Файл/Новый ). Выбираем микроконтроллер и частоту задающего генератора в Опции/Опции проекта… (ATtiny2313, внутренний задающий генератор на 8МГц). В панели инструментов жмем кнопочку «S» — настройщик управляющих регистров» выбираем USART и в открывшемся окошке заполняем все как на картинке. Там все подписано и понятно.


Жмем «ОК» . Готово – UART проинициализирован и готов к работе.
Если нужен только приемник или только передатчик ставим только нужную галочку – незадействованную ножку можно использовать как порт ввода-вывода.

Так как в программе будут разрешены прерывания, нужно перед инициализацией USART установить указатель стека на конец памяти («S» /Stack Pointer SP ) и озаглавить вершину блока ключевым словом «Reset ».


В ассемблере. Честно говоря, я не знаю, есть ли в асемблерах для AVR настройщики периферии, но даже если нет, простое решение использовать все тот же Algorithm Builder. В окошке настройки USART, в правой части, прописаны мнемокоманды (Operations), обеспечивающие выбранные характеристики. Перевести их в ассемблерный код не составит труда.

Переводим в ассемблерные команды.

;USART initialization ;Communication Parameters: 8 Data, 1 Stop, Even Parity ;USART Receiver: On ;USART Transmitter: On ;USART Mode: Asynchronous ;USART Baud Rate: 9600 uart_init: LDI R16, $ 00 OUT UBRRH, R16 LDI R16, $ 33 OUT UBRRL, R16 LDI R16, $ 26 OUT UCSRC, R16 LDI R16, $ 00 OUT UCSRA, R16 LDI R16, $ 98 OUT UCSRB, R16

;USART initialization ;Communication Parameters: 8 Data, 1 Stop, Even Parity ;USART Receiver: On ;USART Transmitter: On ;USART Mode: Asynchronous ;USART Baud Rate: 9600 uart_init: LDI R16, $00 OUT UBRRH,R16 LDI R16, $33 OUT UBRRL,R16 LDI R16,$26 OUT UCSRC, R16 LDI R16,$00 OUT UCSRA, R16 LDI R16,$98 OUT UCSRB, R16

CodeVision содержит свой настройщик периферии (CodeWisard), еще похлеще чем у Algorithm Builder’а. Для генерации настроек UART, нажимаем на значок шестеренку (CodeWisardAVR ) на панели инструментов. В открывшемся окошке сначала выбираем вкладку Chip в ней выбираем микроконтроллер и устанавливаем частоту, с которой будет работать задающий генератор. Далее выбираем и заполняем вкладку USART в соответствии с нужными характеристиками (если нужен только приемник или только передатчик ставим соответствующую галочку).

// USART initialization // Communication Parameters: // 8 Data, 1 Stop, Even Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA= 0x00 ; UCSRB= 0x98 ; UCSRC= 0x26 ; UBRRH= 0x00 ; UBRRL= 0x33 ;

// USART initialization // Communication Parameters: // 8 Data, 1 Stop, Even Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x98; UCSRC=0x26; UBRRH=0x00; UBRRL=0x33;

Сохраняем сгенерированный проект (File\Generate, Save and Exit ) — готово. Создан проект со всеми нужными установками для UART. В проекте инициализируется и другая периферия (зачастую не нужная). После создания проекта его можно подкорректировать – удалить все не нужное.


3 СОЗДАНИЕ ПРОЦЕДУР ОБРАБОТКИ СООБЩЕНИЙ UART.

Небольшое отступление.
Работу с UART можно организовать различными способами. Например:
— просто ожидать в теле программы когда придет сообщение, постоянно проверяя бит приема сообщения;
— разрешить прерывание и в теле прерывания обрабатывать сообщение;
— создать буфер куда по прерываниям будут загоняться сообщения, а уже в теле программы, «по свободе», считывать из буфера значения;
— еще куча вариантов – выбор за Вами.
Но , исходя из того, что сообщения от устройств, в большинстве своем, единичные (один байт) и не слишком часты (взять, к примеру, клавиатуру – пару нажатий в секунду, не больше), наилучшим вариантом, в плане экономии памяти и скорости обработки, будет обработка сообщения UART в теле прерывания. Под обработкой я понимаю чтение регистров, проверка на правильность приема и сохранение принятого байта в глобальной переменной (своего рода буфер в один байт). Если предполагаются несложные манипуляции с принятым байтом можно их тоже организовать в теле прерывания.

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

Algorithm Builder.
Прием данных осуществляется в процедуре обработки прерывания по окончании приема байта (кадра). Принятый байт записывается в глобальную переменную FromGCnDevice. В теле программы проверяется значение FromGCnDevice ели оно нулевое ничего не принято.

Если работа с принятым значением несложна можно это сделать прямо в теле обработки прерывания.
Передача данных производиться без использования прерываний и буфера (аппаратно у UART передатчика существует буфер на 2 байта). Это значит, что комфортно будут передаваться только единичные байты (что мы и планируем делать). Если зарядить сразу строку данных, то микроконтроллер будет заниматься только этой строкой.

Ассемблер.
Прием байта осуществляется в прерывании, результат остается в регистре r17 (если нужно сохраните в SRAM).

;Обработка прерывания по окончании приема байта PUSH R16 IN R16, SREG PUSH R16 IN R16, UCSRA ;Читаем статус из UCSRA IN R17, UDR ;Читаем данные из UDR ANDI R16, $ 1C BREQ _END ;Проверяем на ошибки CLR R17 _END: ;в R17 находится принятый байт POP R16 OUT SREG, R16 POP R16 RETI

;Обработка прерывания по окончании приема байта PUSH R16 IN R16,SREG PUSH R16 IN R16,UCSRA ;Читаем статус из UCSRA IN R17,UDR ;Читаем данные из UDR ANDI R16,$1C BREQ _END ;Проверяем на ошибки CLR R17 _END: ;в R17 находится принятый байт POP R16 OUT SREG,R16 POP R16 RETI

Передача байта

LDI R16,значение SBIS UCSRA,UDRE RJMP PC-1 ; ждем готовности принять байт OUT UDR, R16 ; шлем байт


С — в программе CodeVisionAVR .
Тут все просто CodeWizard вместе с инициализацией UART создает и процедуры для приема-передачи. Единственно что можно тут поковырять так это выкинуть буфер для приема (если разрешить прерывания по приему или передаче автоматически создается буфер). Если этот буфер не нужен процедура обработки прерывания приема байта и процедура передачи могут выглядеть так:

// Глобальная переменная - полученные даные от устройства // Эсли FromGCnDevice==0 - ничего не получено char FromGCnDevice; // Обработка прерывания окончания приема байта interrupt [ USART_RXC] void usart_rx_isr(void ) { char status; // Получаем байт статуса и данных status= UCSRA; FromGCnDevice= UDR; // Если произошла ошибка при приеме байта то FromGCnDevice=0 if ((status & amp; (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN) ) != 0 ) FromGCnDevice= 0 ; } // Процедура передачи байта void ToGCnDevice (char c) { // Ждем окончания передачи предідущего байта while ((UCSRA & amp; DATA_REGISTER_EMPTY) == 0 ) ; // Передаем байт UDR= c; }

// Глобальная переменная - полученные даные от устройства // Эсли FromGCnDevice==0 - ничего не получено char FromGCnDevice; // Обработка прерывания окончания приема байта interrupt void usart_rx_isr(void) { char status; // Получаем байт статуса и данных status=UCSRA; FromGCnDevice=UDR; // Если произошла ошибка при приеме байта то FromGCnDevice=0 if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))!=0)FromGCnDevice=0; } // Процедура передачи байта void ToGCnDevice (char c) { // Ждем окончания передачи предідущего байта while ((UCSRA & DATA_REGISTER_EMPTY)==0); // Передаем байт UDR=c; }


Во и все про UART. Этого должно хватить для того чтобы подключить устройство к Вашему проекту. По анологии приведенных примеров легко все можно проделать и для других микроконтроллеров АВР.
Ниже оставляю архивы программ с примерами работы UART для ATtiny2313.
- Пример проекта созданного автоматически CodeWisionsAVR
- Пример программы для работы с UART в Algorithm Builder


P.S. Я слабо знаю С и Asm, поэтому пинать и кидать тапками — разрешается! Мы все учимся.


Инициализируется

(Visited 10 796 times, 2 visits today)

Истерии появилось множество вопросов, как подключить плату к компьютеру. И многие люди даже не понимают, что же такое 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
* Аппаратное управление потоком - нет
* Программное управление потоком - нет

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

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

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


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

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

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

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


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

Итоги

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

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

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

Истерии появилось множество вопросов, как подключить плату к компьютеру. И многие люди даже не понимают, что же такое 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 , RS-232 , COM и т.п. В данном посте я хочу немного прояснить ясность.



UART описывает логику работу , здесь логическая 1-а подразумевается как высокий уровень сигнала , а логический 0-ль, как низкий уровень сигнала . Физически…, что такое низкий и высокий уровень сигнала зависит от технологии на которой построена микросхема TTL , CMOS и т.д.

Т.к. большинство микросхем являются TTL , то, под логической единицей и нулем в UART понимается и +5В , как было сказано ранее. Но для передачи данных на расстояние , т.е. вне платы, использовать такие уровни уже нельзя, из-за плохой помехозащищенности . Поэтому, были разработаны следующие физические уровни UART:

  • RS-232 (он же COM порт);
  • RS-422
  • RS-423 (используется для автоматизации в промышленности);
  • RS-485 (используется для автоматизации в промышленности);
  • IrDA (UART с использованием инфракрасного диапазона световых волн, по другому ИК порт)

RS-232 ранее применялся в домашних компьютерах под именем COM порт и служил для подключения мышек, модемов, принтеров . Можно сказать — это самый распространенный из физических уровней UART . Название строится из словосочетания «Recommended Standard 232 «, стандарт был разработан «Ассоциацией электронной промышленности (EIA) » в далеком 1962 году.

Стандарт со временем развивался:

  • RS-232C (1968 г.);
  • EIA-232D (1987 г.) — с 1986 года EIA вместо RS стала использовать аббревиатуру EIA;
  • TIA/EIA 232-E (1991);
  • ANSI/TIA/EIA-232-F (1997 г.).

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

RS-232 был настолько успешен , что на его основе были созданы идентичные как отечественные так и зарубежные стандарты:

  • (2000 г.);
  • (1993 г.);
  • ГОСТ 18145-81
  • ГОСТ Р 50668-94

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

(если вам все-таки понадобятся оригинальные стандарты, купить их можно можно на сайте TIA (ассоциация телекоммуникационной промышленности США))

В качестве разъема для RS-232 используется 25-и пиновые и 9-и пиновые разъёмы типа D-sub , которые имеют сокращенную запись DB25 и DB9 (иногда называемая CANNON 25 и CANNON 9 ).

Больше прижились разъемы DB9 .

Зачем столько контактов, если для последовательного универсального порта (UART) достаточно два провода данных TX и RX и провод GND?

Дело в том, что, в стандарте RS-232 помимо вышеуказанных применяются еще и сервисные сигналы, наподобие «готовность терминала «, «запрос на отправку «, «готовность приема » и т.п. Сейчас сервисные сигналы далеко не всегда применяются в оборудование, не исключено что они ограничиваются только TX , RX и GND как в «чистом» UART .

Важно заметить что в RS-232 в качестве уровня логической единицы используется диапазон от -3В до -12В , а логический ноль от +3В до +12 .

(изображение заимствованно из «Гук М. Аппаратные интерфейсы ПК»)

От-3В до +3В , считается зоной неопределенности .

Стандарт RS-232 манипулирует двумя типами оборудования

  • DTE — «оборудования ввода данных», это как привило компьютер
  • DCE — «оконечное оборудование линии связи», это как правило модем/мышь/принтер и т.п.

Для DTE используются разъема типа «папа «, для «DCE » разъемы типа «мама «. Если у вас на компьютере есть COM порт, посмотрите… вы увидите разъем с штырями , т.е. «папа».

Зачем я об этом? Дело в том, что для для соединения устройств с COM портом есть прямой и обратный кабель . Что-бы соединить DTE и DCE (например компьютер и модем) необходимо напрямую соединить все ножки и разъемы, это означает что, ножка отвечающая за передачу данных (RxD ) входит в одноименный разъем (RxD ). Такой соединение называют прямое , а кабель прямой или «модемный «.

Бывают случае когда надо соединить два DTE (например два компьютера), тогда используют обратное соединение , называемое «нуль-модемный » кабель. В этом случае с RxD 1-ого компьютера соединяется с TxD 2-ого и TxD 1-ого с RxD 2-ого .

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

Вам будет интересно:

Интерфейс 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-порта



В продолжение темы:
Android

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