Uart1 на материнской плате что это
В прошлой статье ( Микроконтроллер ATtiny2313. Обзор, программирование, сравнение с другими микроконтроллерами ) я рассказывал о характеристиках микроконтроллера ATtiny2313 . Мы разбирали его прошивку с помощью Arduino UNO и USBasp программатора. В статье я отметил, что данный микроконтроллер, в отличие от ATtiny13/25/45/85 не говоря уже о ATtiny10, обладает аппаратным UART .
Сегодня поговорим что такое UART, как с ним работать на ATtiny2313 и какие это может дать нам преимущества.
Команды ESP8266
Далее показан ответ модуля ESP8266.
Прием данных
Для приема данных используется приёмная линия RxD.
Преимущества и недостатки UART
- Преимущество UART в том, что протокол поддерживает полнодуплексную связь по двум проводам. Кроме того, для передачи данных не требуются внешний таймер. Он поддерживает проверку ошибок с помощью бита четности, а длину данных можно легко изменить.
- Основным недостатком является то, что он не поддерживает конфигурацию с несколькими ведомыми или несколькими ведущими устройствами. И размер пакета данных ограничен 9 битами. UART не подходит для сложной последовательной связи при высоком энергопотреблении.
Формат протокола UART
Начинается связь со стартовым битом «0». Стартовый бит инициирует передачу последовательных данных, а стоповый бит завершает транзакцию данных.
Он также имеет бит четности (четный или нечетный). Бит четности представлен как «0» (четное количество единиц), а бит нечетной четности представлен как «1» (нечетное количество).
Почему используют UART
Для быстрой связи используются такие протоколы, как SPI (последовательный периферийный интерфейс) и USB (универсальная последовательная шина). Но когда высокоскоростная передача данных не требуется, применяют протокол UART. Это дешевое устройство связи с одним передатчиком и приемником. Тут требуется лишь один провод для передачи данных и один для приема. О конвертере USB-ART прочитайте по ссылке.
Его можно подключить к персональному компьютеру с помощью преобразователя RS232-TTL или USB-TTL. Сходство между RS232 и UART заключается в том, что им обоим не нужен таймер для передачи и приема данных. Кадр UART состоит из 1 стартового бита, 1 или 2 стоповых битов и бита четности для последовательной передачи данных.
Области применения протокола
Последовательный порт отладки использует драйвер UART для печати данных, поступающих извне. Можем использовать этот протокол для отправки и получения команд на встроенные устройства и от них. Также выполняется связь в GPS, модеме GSM / GPRS, чипах Wi-Fi и других модулях работающих с UART. Используется в доступе к мэйнфрейму для подключения разных компьютеров.
Форум по обсуждению материала UART ПРОТОКОЛ: ОПИСАНИЕ РАБОТЫ
Обзор китайского устройства для электролиза воды - фото, видео, описание работы.
Самодельный функциональный генератор сигналов 0,1 Гц - 100 кГц на микросхеме ICL8038.
Схема с полевым транзистором контроллера вентилятора высокой мощности на 12 В.
Что такое изолятор и чем он отличается от токопроводящего материала. Занимательная теория радиоэлектроники.
Ремонт любой сложной электронной техники, в настоящее время можно условно разделить на два варианта: либо программный ремонт, “софтовый”, либо ремонт аппаратный, на уровне “железа”. Если первый подразумевает собой просто настройку аппарата, которую способен выполнить любой пользователь знакомый с техникой, в случае если по каким-либо причинам его настройки сбились в процессе эксплуатации.
Ремонт аппаратный - это чаще всего пайка, замена определенных радиодеталей которые вышли из строя по различным причинам. Будь то перегрев, например из-за набившейся пыли в корпусе устройства, и как следствие худшая теплоотдача, или же попадание влаги и в результате короткое замыкание. Либо то-же самое, любимое всеми мастерами КЗ устроенное на плате поселившимися насекомыми в корпусе устройства), а следы их деятельности, на платах, встречаются нередко.
Прошиваем с помощью клипсы
Но существует и третий вид ремонта, обычно применительно к цифровой технике, в котором эти два вида ремонта бывают совмещены - это перепрошивка устройства. И если смартфон или планшет мы можем перепрошить просто подключив его к компьютеру по USB кабелю, то например, с роутером, материнской платой или видеокартой такой способ не пройдет. Все они содержат в своем составе Flash память, специальную микросхему, обычно 24 или 25 серии, в которой и хранится наша прошивка.
Микросхема памяти 25 серия
С материнскими платами и видеокартами обычно все просто - нужен программатор Flash и EEPROM памяти, например простой и дешевый CH341A о котором и пойдет речь, как одном из вариантов для решения нашей проблемы. Также для прошивания памяти без выпаивания будет нужна специальная клипса, для прошивания микросхем в корпусе SO-8 или SO-16. У меня есть обе клипсы в моей домашней мастерской.
Клипса для прошивания SO-8
Первая из них, для микросхем в корпусе SO-8, обычно бывает нужна во много раз чаще, чем вторая, для микросхем в корпусе SO-16. Которая пригодилась мне всего один раз для перепрошивки роутера Zyxel, они же, к слову сказать, так как считают себя известным брендом, оригинальничают и ставят иногда микросхемы в подобных корпусах SO-16, и хорошо еще если не микросхемы 29 серии, кто в теме - тот сразу поймет.
Разъем клипсы SO-16
Дело в том, что для того чтобы прошить микросхему 29 серии, нам необходим намного более дорогой программатор - MiniPro TL866A, который у меня также есть, но нет ни переходника с корпуса Dip на данный корпус, который имеет очень частое расположение ножек, и по сравнению с пайкой которого паять микросхему в SMD корпусе, те же SO-8 или SO-16 - детская забава. Так вот, мне на ремонт достался как раз роутер Zyxel с микросхемой 29 серии. В первый раз когда я ремонтировал предыдущий роутер Zyxel, микросхема была последовательной памяти, 25 серия, пусть и в корпусе SO-16. Тогда, как вы понимаете, выполнить ремонт было в разы проще.
Микросхема памяти 29 серии
Так как же все-таки мы можем восстановить роутер, если нам “повезло” и у нас стоит именно такая микросхема 29 серии? Производители роутеров, в данном случае, предусматривают аварийное перепрошивание через TFTP сервер. Но проблема в том, что иногда у нас бывает затерт загрузочный раздел в памяти микросхемы, который называется U-Boot. В таком случае вам подойдет вариант прошивки памяти роутера по определенным адресам, которые вы должны будете найти самостоятельно на специализированных форумах по перепрошивке роутеров. Но обычно все бывает намного проще - прошивка сбилась, данные необходимые для работы роутера в штатном режиме потеряны, но загрузочная область и калибровочная область целы. В Таком случае будет нужен простой и дешевый адаптер USB-TTL, стоимость которого на Али экспресс составляет всего порядка 40 рублей.
Также подойдет адаптер на микросхеме CH340A, который используется для заливки скетчей в плату Ардуино Pro mini, которая не имеет распаянного на плате загрузчика CH340A. Так-же подойдут адаптеры на базе pl2303, либо программатор Flash и EEPROM памяти CH341A, про который уже писал выше, и который может после перестановки перемычки работать в режиме USB-UART адаптера.
Программатор Flash и EEPROM памяти + USB-TTL
В крайнем случае можно будет воспользоваться кабелем для прошивания от старого мобильного телефона, также содержащим конвертер USB-COM, только нужно будет обязательно согласовать уровни по питанию. Питание с адаптера необходимо брать строго 3.3 вольта, никаких 5 вольт, которые он может выдавать, с определенного пина. Итак, допустим у нас есть этот адаптер, (вернее любой из перечисленных выше), мы установили для него драйвер, зашли в диспетчер устройств в Windows и определили, какому номеру СОМ порта соответствует наш адаптер. А данный адаптер это и есть не что иное, как виртуальный СОМ порт в вашей системе.
Ищем номер СОМ порта
Затем нам нужна какая-либо программа - терминал, в которой с помощью консольных команд, мы и будем восстанавливать наш роутер перепрошивая его. Но перепрошивать роутер мы будем не через данный адаптер, адаптер используется только для управления процессом прошивки. Как же в данном случае мы прошьем роутер? Существуют, конечно, варианты прошивки роутера через его процессор ARM по интерфейсу JTAG, и у меня есть и этот программатор, приобретенный на Али экспресс - это программатор Wiggler, подключаемый по LPT интерфейсу, но попробовав разобраться с ним решил, что способ перепрошивки с помощью TFTP сервера намного проще.
Программатор JTAG Wiggler
Разберем подробнее данный, более простой вариант, для которого JTAG программатор не нужен, это перепрошивка, как уже писал выше, через TFTP сервер. Для этого нам потребуется, подключить наш адаптер USB–UART к 4 пинам на плате роутера. Правда иногда бывает так, что производитель контактные площадки и дорожки развел, а сами пины не впаял. В таком случае можно самостоятельно впаять гребенку состоящую из 4 пинов, приобретенную в радиомагазине либо выпаянную с донорской материнской платы или какого другого устройства.
Эти пины в принципе можно даже не впаивать если нет возможности, а просто аккуратно подпаяться к пятакам на плате, контактным площадкам, куда должны были быть впаяны эти пины. Для этой цели очень удобен тонкий провод МГТФ. Итак, мы подключили адаптер к компьютеру, установили драйвер, обеспечили необходимое нам надежное соединение с этими 3 из 4 пинов на плате.
Джамперы Ардуино для адаптера
Для соединения с гребенкой удобно использовать джамперы, перемычки, используемые для подключения плат Ардуино к шилдам. Каким же образом, нам нужно соединить данные 3 провода? И почему всего три, если контактов четыре? Питание на роутеры не рекомендуют подавать от адаптера, питание должно приходить от собственного блока питания. Поэтому плюс питания лучше отсоединить, даже если вы используете как и положено напряжение 3.3 вольта.
Соединение адаптера и роутера - схема
Земли устройств, соединяемых между собой при перепрошивании, нужно объединять, поэтому землю, пин GND, подсоединить нужно будет обязательно. А вот оставшиеся два пина, RX и TX, нужно подсоединить “перекрестив” их между собой, то есть RX соединить с TX, а TX, с RX. Итак, мы подключили все правильно, затем нам нужно правильно настроить терминал, я предпочитаю пользоваться Putty, для того чтобы иметь возможность управлять нашим роутером через консоль, и соответственно залить в него новую прошивку.
Значит мы выбираем в настройках Putty порт Serial, последовательный порт, или СОМ порт, затем устанавливаем нужный номер СОМ порта, который мы предварительно посмотрели в диспетчере устройств. После этого нужно настроить скорость СОМ порта, обычно это 57600, реже 115200 бод. И наконец, убедившись еще раз, что все соединено правильно, ничего на плате не “коротит”, не будет замкнуто, в процессе перепрошивки, мы войдя заранее в настроенную консоль и подаем питания на роутер от родного блока питания.
Кракозябры в терминале
Если у вас на экране, побежали “кракозябры”, значит вы неправильно настроили скорость СОМ порта и нужно либо почитать какая скорость должна быть установлена для вашей модели роутера, либо подобрать ее экспериментально до пропадания “кракозябров” и появления обычного текста. Затем нужно будет нажать, сразу после включения питания роутера, поймав нужный момент, что бывает не так просто, определенную комбинацию клавиш, либо tpl, для роутеров TP-Link, либо цифры 4, вход в консоль, либо цифру 2, для роутеров Zyxel, запуск перепрошивки с TFTP сервера.
Интерфейс TFTP сервера
Сам сервер должен быть запущен от имени администратора в сетевых подключениях, там должен быть указан ip адрес сервера, который подскажет либо консоль, либо можете самостоятельно найти в интернете. В TFTP сервере нужно будет указать ip адрес клиента и папку, в которой находится наша прошивка.
Меняем настройки сетевого подключения
Сама прошивка должна быть обязательно без Boota, то есть когда мы шьем прошивку прицепившись клипсой, через программатор 25 серии SPI, нам необходим Фуллфлеш, или иначе говоря прошивка с загрузчиком, в данном случае прошивка должна быть стандартная, без загрузчика, какую обычно предоставляет производитель, на своем сайте. Имя файла прошивки лучше сделать попроще, например 123.bin, его будет нужно ввести в консоли, при запуске процесса перепрошивания.
Затем будет нужно согласиться и подтвердить, что вы согласны с перепрошивкой. Если вы все сделали правильно, в консоли пойдет процесс прошивания, после того как он закончится вам нужно будет лишь перезагрузить роутер и если прошивка была строго от соответствующей модели и ревизии железа, у вас все обязательно получится.
Объяснение процесса прошивания получилось конечно объемное, но сам процесс для человека выполнившего его хотя бы пару раз, становится довольно простым делом. А учитывая, что роутеры это техника, которая долго не живет, особенно в период, когда проходят грозы, в мае - июне, думаю данная статья будет полезна новичкам желающим сэкономить средства на покупке нового роутера. Всем удачных ремонтов! Специально для сайта Радиосхемы - AKV.
Форум по обсуждению материала КОНВЕРТЕР USB-UART: ПЕРЕПРОШИВКА АДАПТЕРОМ
Самодельный функциональный генератор сигналов 0,1 Гц - 100 кГц на микросхеме ICL8038.
Приводятся основные сведения о планарных предохранителях, включая их технические характеристики и применение.
Схема с полевым транзистором контроллера вентилятора высокой мощности на 12 В.
Про использование технологии беспроводного питания различных устройств.
Последовательное преобразование в параллельное
Шаг 1: Возьмем 4 триггера. Количество триггеров совпадает с количеством передаваемых битов.
Шаг 2: Сначала отключим параллельную шину. Не включаем пока не будут загружены все биты. Сохраним данные на входе первого триггера. Теперь установим высокий уровень тактовой частоты, это сдвинет младший бит на вход второго триггера и выход первого. Точно так же сдвинем все биты один за другим, сделав тактовый импульс высоким. Преобразователь находится в состоянии удержания до тех пор, пока все биты не будут переданы на выход.
Шаг 3: Теперь каждый триггер содержит один бит последовательных данных. Пока все биты передаются на выход триггера, активируем шину. Это заставит конвертер отправлять все биты за раз.
Что такое UART?
Как следует из названия UART – это Универсальный асинхронный приёмопередатчик (Universal Asynchronous Transmitter Receiver) . Т.е. это интерфейс, который позволяет соединенным друг с другом устройствам обмениваться информацией.
Обмен происходит по двум линиям связи. Одна для приема информации ( RX ), вторая для передачи информации ( TX ). Подключать нужно RX одного устройства к TX другого и RX второго к TX первого. Важно, чтобы оба связанных устройства имели общую землю.
В данном случае Скорость передачи данных измеряется в битах в секунду или сокращенно БОД. Т.е. то, что мы видим в мониторе порта 9600 и остальные значения бод – это и есть число передаваемых бит за секунду.
Но так как каждый передаваемый байт помимо бит данных обязательно содержит еще стартовый бит, стоп бит и, иногда биты четности, то чтобы узнать сколько байт мы передадим за секунду установленную скорость нужно делить не на 8, а минимум на 10.
Важным условием является то, что и приемник и передатчик должны быть настроены на одинаковую скорость работы, и эта скорость должна сохраняться постоянной во время всего сеанса передачи данных. Иначе данные либо перестанут передаваться, либо будут передаваться с ошибкой.
Т.е. в случае работы в среде Arduino IDE скорость в Мониторе порта должна быть такая же, как и при инициализации библиотеки Serial. Т.е. в данном случае 9600 бод. Именно эту скорость мы и возьмем за основу в дальнейшем.
Аппаратный и программный UART
Существует как аппаратный так и программный UART. Т.е. в том случае, если у микроконтроллера нет аппаратного UART (как например у ATtiny13/25/45/85), либо мы не хотим занимать аппаратный UART и организовать еще один канал обмена данных с устройством, подключается программный UART.
Подключение программного UART осуществляется через стандартную для Arduino IDE библиотеку SoftwareSerial . Программном UART я рассказывал в статье ( ATtiny85 и монитор порта в Arduino IDE ).
Но в данной статье мы будем обсуждать аппаратный UART . Он обладает рядом преимуществ перед программным:
1. Не тратится флэш-память микроконтроллера .
Библиотека, организующая программный UART SoftwareSerial , занимает около 800 байт, что довольно много, особенно если речь идет о микроконтроллерах серии ATtiny.
2. Не тратятся ресурсы микроконтроллера
Здесь стоит уточнить, что не тратятся те ресурсы, которые мы рассчитываем задействовать в своих скетчах. Т.е. непосредственно время выполнения скетча не будет тратится на отправку/прием данных. Данные будут поступать и отправляться в фоновом режиме. Поступающие байты данных сохраняться в буфере, пока мы их оттуда не заберем, либо их не вытеснят оттуда новые данные.
3. Есть возможность обновления прошивки через USB-TTL преобразователь .
Подробнее о USB-TTL преобразователе я расскажу в статье об Arduino Pro Mini.
После Vogue истерии появилось множество вопросов, как подключить плату к компьютеру. И многие люди даже не понимают, что же такое UART. И я решил рассказать здесь какой это мощный инструмент.
Роутер превращается в компьютер, если к нему по UART подключить клавиатуру и дисплей
От телеграфа к COM-порту
Протокол UART (Universal asynchronous receiver/transmitter) или, по-русски, УАПП (универсальный асинхронный приемопередатчик) — старейший и самый распространенный на сегодняшний день физический протокол передачи данных. Наиболее известен из семейства UART протокол RS-232 (в народе – COM-порт, тот самый который стоит у тебя в компе). Это, наверное, самый древний компьютерный интерфейс. Он дожил до наших дней и не потерял своей актуальности.
В 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 присутствует во многих устройствах, в которых стоит какой-либо процессор или контроллер. Я даже больше скажу: если там стоит контроллер, то юарт есть стопудово (только он не всегда может использоваться). Как правило, по этому интерфейсу идет наладка и проверка работоспособности девайса. Зачастую производитель умалчивает о наличии этого интерфейса в изделии, но найти его несложно: достаточно скачать мануал на процессор и, где находится юарт, ты будешь знать. После того, как ты получишь физический доступ к железяке по нашему интерфейсу, можно его настроить на свое усмотрение или даже заставить работать, так как надо тебе, а не как задумал производитель. В общем, – выжать максимум возможностей из скромного девайса. Знание этого протокола дает также возможность подслушать, что же творится в линиях обмена между различными процессорами, так как часто производители организуют целые юарт-сети в своем устройстве. В общем, применений много, главное – интуитивно понимать, как это делать.
Апдейтим роутер
Собираем преобразователь
Чтобы подключить роутер к компу, необходимо сопрячь интерфейсы 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 «Главный инструмент фрикера».
Сейчас немного научившись программировать под наш микроконтроллер, попробуем связать его с внешним миром. Аппаратные интерфейсные модули STM32 поддерживают много много различных внешних интерфейсов. Начнем с самого часто используемого интерфейса UART. Что это за интерфейс можно прочитать здесь и здесь.
Попробуем подключить наш МК к компьютеру посредством UART. Для этого я использую простой USB — UART TTL (3.3V) (не забываем что у нашего МК уровни — 3.3 V ) конвертер на базе микросхемы PL2303.
В STM32 имеется 3 UART интерфейса. Перед тем как его использовать необходимо сконфигурировать наш последовательный приемопередатчик в МК. Для этого используем команду:
Эта команда запускает наш UART на скорости baud_rate (например 9600 или 19200 kbs) со стандартными параметрами (8 бит данных, без аппаратного контроля четности.)
Если нужно запустить UART в каком-то нестандартном режиме, то используем:
- baud_rate — скорость порта;
- data_bits — количество бит данных, возможно использовать структуры _UART_5_BIT_DATA, _UART_6_BIT_DATA, _UART_7_BIT_DATA, _UART_8_BIT_DATA;
- parity — контроль четности (_UART_NOPARITY, _UART_EVENPARITY, _UART_ODDPARITY) соответственно без контроля четности, контроль по четности, контроль по нечетности;
- stop_bits — количество стоп бит (_UART_ONE_STOPBIT, _UART_TWO_STOPBITS) — 1 или 2 стоп-бита соответственно;
или для массива данных (не важно текст или набор значений) передаем функции:
используя указатель на маcсив.
Напишем простую программу:
Подключаем RX STM32 к TX конвертера и ТX STM32 к RX конвертера и вставляем его в USB порт нашего компьютера. Открываем терминальную программу (Я использую PuTTY), выбираем режим SERIAL, скорость порта, например, 19200 kbs и COM порт который появился при подключении нашего USB-TTL конвертера (можно посмотреть в диспетчере устройств в ветке «Порты COM и LPT») и нажимаем «OPEN». Видим наш текст в окне терминала.
Передавая последовательно несколько байт данных, необходимо контролировать закончилась ли передача предыдущего. У каждого UART есть свой статусный регистр.
USART1_SR. За окончание передачи отвечает бит USART1_SRbits.TC Функция UARTx_Write_Text (char * UART_text) сама контролирует, перед передачей следующего, завершение передачи предыдущего байта.
Для чтения данных с UART микроконтроллера используется функция:
Чтобы знать что в буфере нашего UARTа есть принятый байт используем функцию:
возвращающую 1 если принятый байт есть в буфере и 0 если там его нет. В данном случае нам необходимо постоянно контролировать принял ли что-либо UART нашего контроллера. Давайте попробуем при приеме, например, буквы «А» (ASCII код 65) зажечь светодиод на плате:
Чтобы постоянно не занимать МК опросом состояния регистра UART можно (и нужно) использовать прерывание. При приеме очередного байта вызовется аппаратное прерывание от UART, в котором мы можем обработать данные, принятые поп последовательному интерфейсу. Для включения прерывания по событию «RX UART» нам нужно записать в бит RXNEIE регистра CR1 используемого модуля UART логическую 1.
как и в случае с таймером, при возникновении прерывания вызывается подпрограмма:
При помощи UART можно связывать наш МК не только с компьютером, но и с многими периферийными устройствами. Для примера рассмотрим широкодоступный GSM модуль SIM800L. Мне достался данный модуль уже распаянный на небольшой плате. Такой недорого можно заказать в Китае. На штырьки этой платы выведены все необходимые для работы с модулем сигналы, к тому же плата имеет держатель под СИМ карту.
Единственное что не удобно, это необходимость для питания данной платы напряжения от 3,7 до 4,2 В. Так что придется или подключать внешнюю литиевую батарею, или городить преобразовать с выходным напряжением 4,1 В. Учитывая широкое распостранение регулируемых DC-DC это, думаю, не составит особой проблемы.
Подключим наш модуль у МК, не забывая что RX модуля идет на TX МК и наоборот. Для Maple mini модуль подключаем RX к 26 пину (PA9 / UART1TX), TX к 25 (PA10 / UART1RX).
Для общения с модулем используются, так званые, AT команды. Это набор терминальных команд, которые понимает модем и выполняет в ответ на них определенные действия. С командами нашего модуля можно ознакомится в даташите, к тому же есть неплохая статья где неплохо расписана работа с данным модулем.
Мы будем использовать 2 UART микроконтроллера, UART1 для связи МК -GSM и UART3 для связи МК — терминал компьютера.
Иннициализируем наши UARTы
Наша программа потребует относительно большого количества функций, поэтому вынесем их в отдельный с-файл. Для этого нажмем Ctrl+N в Microc, создадим в проекте еще один файл, например «GSM_SIM800L.с». Для того чтоб наш компилятор понял, что часть функций нужно искать в другом файле, допишем в начале основного с-файла строку (аналогично можно и подключать библиотеки.).
Для начала, в файле «GSM_SIM800L.с» напишем функцию передающую модулю АТ команду и принимающую от него ответ.
В MicroC строка это массив символов char который заканчивается значением 00 (NULL) означающем конец строки. Строка как аргумент функции задается указателем на тип char (например char *nasha_stroka). MicroC поддерживает функции стандартной Си — шной библиотеки С_String.h. Например выше использованна функция
эта функция ищет подстроку, заданную указателем *s2 в строке*s1. Функция вернет указатель на найденную подстроку *s2. (фактически вернет строку от начала *s2 до конца (NULL символа) строки *s1). Если подстрока *s2 не найдена то функция вернет NULL . По умолчанию в С передача массива по его имени это указатель на начало массива. Если нужно передать массив c определенного элемента, то используем (&array_name[ind]).
Выполним несколько команд, необходимых для конфигурации модуля. Для простоты не будем контролировать ответы модуля, хотя несложно при выполнении каждой команды проверять статус на равенство 1;
- «ATE0\r» — Отключим эхо (повтор на выход UARTa нашей команды)
- «AT+GMM \r» — Вернет название модуля
- «AT+CMGD=1,4\r» — Удаляем все СМС, сохраненные в нашем модуле
- «AT+CMGF=1 \r» — Включаем для СМС режим ASCII, иначе нам сложнее будет их читать в символах Юникода
- «AT+DDET=1» — Включаем распознание модулем DTMF команд
Напишем еще одну функцию которая вернет ответ модуля (а не просто статус запроса, при чем максимально в нужном нам виде. В даташите к модулю описаны ответы на АТ команды, используя регулярные выражения о особенности ответа практически всегда нужную нам часть строки можно ограничить с 2 сторон заранее известными символами).
Например «AT+GMM \r\n» вернет название модуля в виде "\r\n SIM_800L \r\n\r\nOK\r\n". «Откусим» начальные "\r\n" и конец "\r\n\r\nOK\r\n"
Контролируя во цикле программы значение переменной callnow можно узнать о входящем звонке. Поднять трубку мы можем при помощи команды «ATA\r», сбросить вызов - «ATH0\r».
Для отправки СМС используется АТ команда «AT+CMGS=»+380XXXXXXXX\r". Эта команда в ответ выдает символ "\r\n>" — приглашение к вводу. Можно ловить это приглашение в ответе модуля, я же просто даю задержку в 100 мс. и отправляю в UART текст смс который должен окончится символом с ASCII кодом 26
В статье описана только малая часть возможностей как GSM модуля так и UART интерфейса МК STM32. Тем не менее, я надеюсь, что изложенная выше информация будет полезна для понимания работы с последовательным интерфейсом реализованном в микроконтроллере.
В следующей статье я расскажу что такое шина I2C, как работать с ней и как подключить LCD индикатор на основе контроллера HD44780 к STM32 по параллельной шине и через I2C расширитель линий ввода/вывода.
UART (Universal Asynchronous Transmitter Receiver) это наиболее распространенный протокол, используемый для полнодуплексной последовательной связи. Устройство отправляет и получает данные из одной системы в другую. В этом мануале мы подробно изучим основы связи и работу протокола UART, подробное описание интерфейса и распиновку разъёмов..
Пример интерфейса UART
Этот пример демонстрирует взаимодействие ESP8266 UART с MAX232. Микросхема MAX232 питается от источника 5 В, и включает в себя генератор емкостного напряжения для управления напряжением 232 уровня. Она поставляется с двумя передатчиками, также называемыми драйвером (Tin, Tout) и приемниками (Rin и Rout).
Здесь использовался ESP8266 (32-битный микроконтроллер) со встроенным UART. Связь может осуществляться с ESP8266 с использованием AT-команд через преобразователь уровня RS232 в TTL (MAX232). На схеме показано подключение ESP8266 к компьютеру.
Запрашивая действительные AT-команды через ПК, микросхема Wi-Fi ответит подтверждением. Вот шаги для реализации последовательной связи с ПК.
- Подключить передатчик (TX) ESP8266 к приемнику (RX) преобразователя уровня RS232 в TTL (MAX232) и приемника ПК.
- Подключить приемник (RX) ESP8266 к TX ПК и RX преобразователя TTL.
Как работает UART
Передатчик и приемник используют стартовый бит, стоповый бит и параметры синхронизации для взаимодействия друг с другом. Исходные данные находятся в параллельной форме. Например есть 4-х битные данные, и чтобы преобразовать их в последовательную форму нужен преобразователь из параллельного в последовательный. Обычно для проектирования преобразователей используются D-триггеры.
D-триггер, также известный как триггер данных, сдвигает один бит со стороны входа на сторону выхода только тогда, когда таймер изменяет переход из высокого состояния в низкое или из низкого состояния в высокое. Точно так же, если надо передать 4 бита данных, понадобится 4 триггера.
Теперь спроектируем преобразователь из параллельного в последовательный и из последовательного в параллельный.
RS232 и UART
Логические уровни представляют собой уровни рабочего напряжения, которые устройство может выдержать для работы в безопасной зоне. Вот уровни напряжения для RS232 и TTL:
Логика TTL / CMOS
UART работает по TTL логике.
Первоначально последовательная линия находится в состоянии ожидания, обычно называемом статусом отметки (логическая 1). Теперь передача данных начинается со стартового бита (логический 0). Кроме того, по последовательной линии один за другим отправляются 8 бит данных, причем сначала младший бит LSB (Least significant bit - младший значащий бит). После завершения всей передачи идёт стоповый бит (логическая 1).
UART и USART
USART - это основная форма UART. Технически это не одно и то же, но определение для них одинаково. Это периферийные устройства микроконтроллера, которые преобразуют параллельные данные в последовательные биты и наоборот.
UART | USART |
---|---|
Тайминги генерируются внутри микроконтроллера. | Отправляющее устройство сгенерирует тайминг. |
Скорость передачи данных низкая. | Скорость передачи данных выше из-за внешних таймингов. |
Автономный протокол | Поддерживает несколько протоколов, таких как LIN, RS-485, IrDA, смарт-карта и т. д. |
Перед передачей необходимо знать скорость передачи. | Нет необходимости знать скорость передачи заранее. |
Подходит для низкоскоростной связи | Подходит для высокоскоростной связи. |
Сниженный энергетический след. | Обеспечивает последовательную связь при высоком энергопотреблении |
Основное различие между UART и USART заключается в том, что UART поддерживает только асинхронную связь, тогда как USART поддерживает как синхронную, так и асинхронную. Вот сравнение между USART и UART:
Передача данных
Передача данных осуществляется по одной линии передачи (TxD). Здесь «0» рассматривается как пробел, а «1» - как состояние отметки.
При передаче всегда сначала передается LSB (Least Significant Bit - младший значащий бит).
Блок-схема UART
UART состоит из следующих основных компонентов: передатчик и приемник. Передатчик состоит из регистра удержания передачи, регистра сдвига передачи и логики управления. Точно так же приемник состоит из регистра удержания приема, регистра сдвига приемника и логики управления. Обычно и передатчик, и приемник снабжены генератором скорости передачи данных.
Генератор скорости передачи данных формирует скорость, с которой передатчик и приемник должны отправлять и получать данные. Регистр удержания передачи содержит передаваемый байт данных. Регистр сдвига передачи и регистр сдвига приемника сдвигают биты влево или вправо, пока байт данных не будет отправлен или получен.
В дополнение к этому, предусмотрена логика управления чтением или записью, указывающая когда читать и записывать. Генератор скорости передачи данных формирует скорости в диапазоне от 110 бит / с до 230400. В большинстве случаев микроконтроллеры предлагают более высокие скорости передачи, такие как 115200 и 57600 бит / с, но такие устройства как GPS и GSM, используют более низкую скорость в 4800 и 9600 бод.
Что такое UART
UART означает универсальный асинхронный приемник-передатчик. Это периферийное оборудование, которое находится внутри микроконтроллера. Функция UART заключается в преобразовании входящих и исходящих данных в последовательный двоичный поток. Восьмибитные последовательные данные, полученные от периферийного устройства, преобразуются в параллельную форму с использованием последовательного преобразования в параллельное, а параллельные данные, полученные от ЦП, преобразуются с помощью преобразования из последовательного в параллельный. Эти данные представлены в модулирующей форме и передаются с определенной скоростью передачи.
Параллельное преобразование в последовательное
Шаг 1: Возьмем 4 триггера. Количество триггеров эквивалентно количеству передаваемых битов. Точно так же поставим мультиплексоры перед каждым триггером, но исключая первый. Установлен мультиплексор для объединения данных и преобразования их в последовательные биты. Он имеет два входа: один параллельный бит данных, а другой - от предыдущего триггера.
Шаг 2: Теперь загружаем данные за раз в D-триггеры. Он будет извлекать параллельные данные и перемещать последний бит последнего триггера - четвёртый, затем третий бит, второй и, наконец, первый бит. Теперь для преобразования параллельных данных в последовательную форму используется другой преобразователь.
Читайте также: