- Scott Hanselman
- Connect to a device over Serial COM Port on Windows 10 with WSL1 TTY devices with Windows Terminal and minicom
- Setup WSL1
- Get Minicom on your WSL1 distro
- Ensure dialout permissions to talk to the COM port
- Make a nice menu
- About Scott
- UART, COM-порт, RS-232 что это и как они связаны?
- Классификация протоколов
- Параллельный протокол передачи данных (параллельная шина данных)
- Что такое UART
- Интерфейс RS-232
- Электрический принцип работы RS-232
- Преобразование UART в RS-232
- Физическая реализация
- Какие еще есть стандарты?
- Что за названия serial port, communications port, COM-порт и так далее?
- Выводы
Scott Hanselman
Connect to a device over Serial COM Port on Windows 10 with WSL1 TTY devices with Windows Terminal and minicom
I hope that this blog post is found and helps someone. I wasn’t sure what to title it. Hope Google Juice got you here!
Read this whole post, there’s a lot initially but there’s really just two or three small pieces. It’ll be worth it because you’ll be able to have a nice one click menu and drop directly into a serial port terminal on Windows in the Windows Terminal
Often when you’re doing embedded systems development you’ll want to monitor or talk to the COM/Serial Port just like you SSH into remote system. Folks ask questions like «How to connect to a serial port as simple as using SSH?»
On Linux you’ll use things like «screen /dev/ttyS0» for COM0. With Windows, however, the historical guidance has always been to use Putty. It’ll work but it’s somewhat old, quirky, and it doesn’t integrate well with the Windows Terminal and a more modern workflow.
Say I have a small embedded microcontroller device that talks over a COM Port (usually via a USB->COM bridge) like an Arduino.
Let’s assume this device talks to the COM port as if it were a terminal and it’s outputting stuff I want to see. I’ll use this great little CLI example app for Arduino from Mads Aasvik to simulate such a device.
Here’s what it looks like under Arduino’s Serial Monitor, for example. This is a Windows app doing serial communication with its own interface wrapping around it. I want to do this at a command line, and bonus points if it’s in Windows Terminal.
Setup WSL1
If you have Windows 10 you can the Windows Subsystem for Linux quickly with this command at a Admin prompt:
Then go to the Windows Store and get any small Linux. Ubuntu or Kali will do for our purposes. Run it and set your user and password. (I tried Alpine but it still has issues with screen and /dev/null/utmp)
NOTE: If you are using WSL2 and have set it as default, run wsl —list -v and ensure that your new distro is using WSL1 as only WSL1 will let us talk to the COM Ports. You can change it to WSL1 with «wsl —set-version DISTRONAME 1» from any command prompt.
To test this out now, run your new distro from any command line prompt like this. Add the «screen» app with sudo apt update » and » sudo app install screen «.
You can see here that my Arduino serial device is on COM4. On Linux that device is /dev/ttyS4
That means that I should be able to talk it from any WSL1 Linux Distro on Windows like » screen /dev/ttyS4 9600 » where 9600 is the speed/baud rate.
Get Minicom on your WSL1 distro
Screen is somewhat persnickety for Serial Port work so try Minicom. Minicom is a nice little text com program. Install with apt install minicom and run for the first time with «sudo minicom -s» to set your default. Note I’ve change the default port from /dev/modem to /dev/ttyS4 and the speed, in my case, to 9600.
Then I hit enter and save settings as the dft (default) in minicom. You can also turn on Local Echo with «Ctrl-A E» and toggle it if needed. Now I can talk to my Arudino with minicom.
Ensure dialout permissions to talk to the COM port
NOTE: If you get «cannon open /dev/ttyS4: Permission denied, you may need to add your user to the dialout group. This way we don’t need to sudo and get no prompt when running minicom!
I can now run minicom on my configured COM port 4 (/dev/ttyS4) with wsl -d DISTRONAME minicom without sudo .
Here I’m talking to that Arduino program. This embedded app doesn’t need to me hit enter after I type, so remember your own embedded devices will vary.
Make a nice menu
Bonus points, now I’ll add a menu item for Minicom by changing my Windows Terminal settings AND I’ll get more points for adding a nice serial port icon!
I hit settings and add a new profile like this at the top under profiles in the «list.» Again, your distro name will be different.
- Use a WSL1 distro
- Install minicom, run with minicom -s once to make settings
- Make sure you are using the right /dev/ttyS0 device for your situation
- Ensure your flow control, baud, etc are all correct in minicom
- Add your user to the dialout group so you don’t have to sudo minicom
- Make a menu item in Windows Terminal
- or run minicom manually in your WSL1 instance whenever you like
Hope this helps!
Sponsor: Suffering from a lack of clarity around software bugs? Give your customers the experience they deserve and expect with error monitoring from Raygun.com. Installs in minutes, try it today!
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
UART, COM-порт, RS-232 что это и как они связаны?
UART, serial port, communications port, COM-порт, интерфейс стандарта RS-232 что это и почему так много названий?
Употребляя в своих статьях названия и определения: последовательный порт, serial port, communications port, COM-порт, интерфейс стандарта RS-232 я не был до конца уверен, что употребляю их в правильном контексте. Давайте разберёмся что, зачем, как и почему.
Прежде чем перейти к последовательному порту, чуть-чуть общей теории.
Классификация протоколов
А какие протоколы бывают?
По порядку передачи данных протоколы (шины данных) делятся на:
О последовательных шинах речь пойдет ниже, но пару слов нужно сказать о параллельном соединении
Параллельный протокол передачи данных (параллельная шина данных)
Передача нескольких сигналов с данными одновременно по нескольким параллельным каналам.
В последнее время предпочтение отдается последовательному соединению вместо параллельного, так как экономически более выгодно организовать передачу данных по одному (двум) проводам чем по нескольким параллельным, это касается и электрической разводки платы и внутренней разводки чипа, и соединение периферийных устройств. Но параллельное соединение из физического мира ушло в «мир эфира» в радиосвязь, вот там очень выгодно устанавливать и осуществлять параллельную передачу данных.
Примеры чаще всего это устаревшие шины такие как: принтерный порт (IEEE 1284/Centronics), ISA, ATA (IDE), SCSI , PCI, FSB (Front Side Bus)
По времени передачи и приему информации связь делится:
- Симплексная связь — только передача или прием данных.
- Полудуплексная связь прием и передача разнесены во времени. Сначала прием, а затем передача или наоборот.
- Дуплекс — одновременно прием и передача.
Перейдем сразу к последовательному протоколу, он делится на:
Асинхронный протокол — данные передаются без внешнего тактирующего устройства. Данные можно передавать по двум проводам прием/передача. Но нужны дополнительные усилия для синхронизации (пример UART, RS-232, 1-Wire)
Синхронный протокол — данные синхронизированы с тактирующим устройством (примеры SPI и I2C)
И у меня вопрос к читателям, а протокол USB какой синхронный или асинхронный?
Universal Asynchronous Receiver-Transmitter (UART), Универсальный асинхронный приёмопередатчик (УАПП)
История его начинается в 19 веке, тогда возникает необходимость передавать и кодировать телеграфные сообщения. Для передачи телеграфных сообщений Жан Морис Эмиль Бодо изобретает свой код для телеграфа он был 5- битным — отсюда код Бодо и скорость в БОДах, это был золотой «стимпанковский» 1870 год. Проходит всего ничего, 90 лет и к 60-м годам прошлого века появились компьютеры и кодировка ASCII сначала семи битная. А в начале 60-х появляется 8-битная ASCII. В 1970х годах цветет и пахнет микроэлектроника, начинается бум микросхем появляется микросхема UART WD1402A (1971г), а затем 8250. В 90-е был удалось прикрутить буфер (FIFO) к UART и скорость и удобство пользование интерфейсом возрастают.
В 60-70годах в нашей стране не принято пользоваться англоязычными терминами поэтому UART получает свое, русское название — УАПП (Универсальный асинхронный приёмопередатчик) как и все остальные названия, например НГМД и так далее. Хорошее время было, все кратко и понятно, например скажешь УВК-1 и сразу всем все понятно, разговор идет о устройстве ввода координатном или о мышке.
Что такое UART
UART это физическая реализация интерфейса в виде логической схемы (микросхемы) которая обеспечивает прием и передачу информация в последовательном виде, в пределах одного чипа или одного устройства, на короткие дистанции. Он непригоден для приема, передачи данных на «длинные дистанции». Причем понятие длинные и короткие взяты в кавычки и это не зря. Так как все в мире относительно и в данном случае то же, но попробуем разобраться, что за такие «длинные и короткие дистанции». Когда микроконтроллеры и другие низкоуровневые ИС взаимодействуют между собой по последовательному протоколу, они делают это на уровне TTL (транзисторно-транзисторная логика). Последовательные сигналы TTL живут между диапазоном напряжения питания микроконтроллера — обычно от 0 до 5.0 вольт (так было раньше, это уже классика) ну или до 3,3 вольт (так сейчас или еще меньше до 1,8 и 1,6 вольт КМОП) Сигнал такого диапазона да еще и не защищенный передать далеко не получится иногда проблемы возникают тут сразу же, при передачи от одной микросхемы до другой, вспомним микросхемы серии К(К155, К1533, К153) из недостатков которых: высокие требования к напряжению питания, отклонение не более 0,5 В, низкая помехоустойчивость, высокие требование в правильной разводки шины земли. Так вот передать далеко эти сигналы не получится, а что делать? Самое простое тупо усилить — поднять напряжение питания так родился интерфейс RS-232
Интерфейс RS-232
(Recommended Standard 232, рекомендованный стандарт RS-232, EIA232)
Это стандарт физического уровня, надстройка над UART для приема передачи данных другим устройствам, т. е. на «длинные дистанции
В далекие годы 60 годы прошлого века (1962 год) особо не стали заворачивается с обработками сигнала, да и мощностей подходящих не было, а потом, видимо, вспомнили телеграф.
Первый трансатлантический кабель обладал очень низкой скоростью передачи 103 слова за 16 часов, а все из за того, что на огромной дистанции (чудовищная ёмкость и сопротивление длиннющего кабеля) сигналы просто «размазывало» по длинному кабелю. Для повышения скорости увеличивали напряжение и в конце концов дошли до 2000 вольт после чего кабель благополучно сгорел.
Вот и тут просто взяли да повысили напряжение логического сигнала, но на самом деле не совсем просто, а вот так, см. инже
Электрический принцип работы RS-232
Логический нуль RS-232 лежит в пределе от +3 до +12 вольт, а единица от -3 до -12, соответственно. Между -3 и +3 вольт зона ничего, не нуля и не единицы, зона неопределённости. Т. е. разработчики стандарта инвертировали сигнал, сделали отрицательное напряжение для единицы и повысили и понизили напряжение до -12, +12вольт (на самом деле до -15, +15 вольт, а иногда и до 25 вольт) Пишут даже, что в блоке питания компьютера именно поэтому и появилась -12 вольт. Хорошо же они поработали над стандартом для которого пришлось модифицировать и блок питания, сейчас бы такая фишка не прошла, хотя.
Максимальная длинна кабеля по стандарту 20 метров, но нормально прием идет до 15 метров на скорости 19200 бод, но можно передать и на 900 метров снижая скорость (помните трансатлантический кабель) до 2400бод. А вообще максимальная скорость передачи составляет 115 200 бод
Это единица измерения скорости передачи символов (символьной скорости) или скорости модуляции в символах в секунду или импульсах в секунду.
С этими БОДами сплошная путаница, обратите внимание на определение, сколько ИЛИ, давайте разбираться.
Сначала БОД придумали для того чтобы определить сколько символов, букв можно передать за секунду по телетайпу, а кодировка тогда была 5 битная. Кодировка двоичная, импульс — единица, нет импульса — нолик. Все логично и понятно.
Импульсах в секунду
Потом по линиям связи стали общаться не только люди, но и машины и передавать не только символы — буквы, но и служебные биты например синхронизации, к чему их отнести к какой букве? А канал то они то же занимают. И вот тут и началась путаница, передавался не только символ, но и служебная информация. Как считать?
Квадратурная амплитудная модуляция (КАМд)
Но потом все еще больше запуталось, потому как в одном импульсе с помощью, например квадратурной амплитудной модуляции (КАМд), можно зашифровать не один бит, а например до 16 бит.
В общем все в конце концов вообще перепуталось!
Иногда в бодах выражают полную ёмкость канала.
Полная ёмкость канала = служебная информация в бит/c + эффективная информация в бит/c.
Преобразование UART в RS-232
Самый известный преобразователь интерфейса – это микросхема, разработанная фирмой MAXIM, которая и получила от нее часть своего названия (MAX 232). Эта микросхема из 5 вольт генерирует отрицательное напряжение, чтобы сопрягать 5-вольтовый UART с RS-232.
MAX 3232 это MAX 232, но работает в диапазоне напряжений питания от 3 до 5.5 вольт
Физическая реализация
Разъем представлен Д-образными разъёмами 9- и 25-контактные, (DB-9 и DB-25), были и другие, но вымерли как динозавры, нужно сказать что и DB-25 то же практически вымер, остался только DB-9 и он то же вымирает, но остается в промышленном оборудовании. В бытовом использовании, да и в промышленном кстати то же все эти порты успешно вытесняются интерфейсом USB.
Какие еще есть стандарты?
Самые распространённые это:
- RS-485 стандарт автоматизации промышленных сетей
- LIN интерфейс (K-Line.) это автомобильная сеть
Что за названия serial port, communications port, COM-порт и так далее?
А это все сленговые названия интерфейса RS-232
Последовательный порт или по английскому serial port, Сommunications port или сокращенно COM-порт, или интерфейс связи, а в то время особенно других то и не было. Все это синонимы интерфейса RS-232
Название COM — порт идет еще и с DOS, так там обозначался п оследовательный порт.
USB (Universal Serial Bus — «универсальная последовательная шина») — последовательный интерфейс для подключения периферийных устройств. Появился в 1995 года, спустя 33 года после RS-232
Для этой шины так же есть преобразователи которые преобразуют сигналы логических уровней TTL в USB и обратно.
Преобразователь UART-USB на базе микросхем:
Но самые распространённые:
CH340 используется очень широко, например в конверторах о них в статьях:
Выводы
Правильно употреблять выражение преобразователь (конвертер, адаптер) UART-USB. Так как термины: serial port, communications port, COM-порт, последовательный порт больше относятся к интерфейсу стандарта RS-232 и являются синонимами.
Вот такая схема демонстрирует выше написанное.
Конвертеры UART — USB
Подписывайтесь на наш канал TehnoZet-2 , будет интересно! Мы только развиваемся! Понравилась статья, хотите продолжения — ставьте лайк, жмите палец вверх!