Работа с СОМ-портом на Си в linux

Каждый, кто постоянно занимается электроникой и программирует встраиваемые устройства, неизбежно сталкивается с необходимостью работы с СОМ-портом под линуксом. Чаще всего появляется задача сопрячь какой-то датчик, либо удалённое устройство с одноплатником. Да, что греха таить, сейчас в 2020 году UART, наверное, самый распространённый интерфейс для обмена данными, несмотря на всю его архаичность.
Поэтому умение работать с СОМ-портами в linux особенно важно. И вот, казалось бы, UART, древнейший интерфейс, всё должно быть известно и понятно, и даже опытные программисты ломают зубы, работая с ним в линуксе. Особенный цирк с конями начинается при работе с передачей сырых данных по RS-485. Не знаю ни одного программиста, который бы не хватил горя при разработке ПО для таких решений. Самое забавное, что с более новомодным i2c работать в линуксе куда проще и понятнее, чем с ортодоксальным UART. Чтобы не было путаницы дальше, всё семейство UART (RS-232, RS-485, UART 5V, UART 3,3 и т.д.) по тексту я буду называть COM-порт или UART. Мы говорим в статье не о физическом интерфейсе, а о программной стороне вопроса.
В этой статье я хочу показать, как писать свои программы, работающие с UART в ОС Linux. И неважно на каком языке вы пишете программу для работы с UART (python, c, c++, bash, php, perl и т.д.), принцип работы и грабли будут одни и те же, так как всё равно всё упирается в системные вызовы к ядру. А не понимание того, что там происходит и приводит к различным трудноуловимым багам.


Телетайп, на который БЭВМ могли выводить и получать данные. Фото взято здесь

Исторически сложилось, что СОМ-порт в UNIX использовался как терминал. То есть, как устройство для отображения и получения информации работы с ЭВМ. Отсюда идёт всё базовое наследие работы UART.

Читать дальше

Modbus модуль дискретных входов выходов


Модуль для дискретных входов выходов в корпус Gainta D6MG-практически законченный проект схема, плата, исходники, прошивка, все работает.

Читать дальше
  • +4
  • 02 февраля 2017, 17:43
  • GYUR22
  • 1

Еще один развязанный USB-RS485 адаптер

Здравствуйте. Сегодня решил поделиться с сообществом небольшой самоделкой. Это гальванически развязанный преобразователь USB-RS485 на FT232 и среднескоростных оптопарах. Особенностью будет то, что при создании девайса я допустил несколько оплошностей и я о них расскажу.


Читать дальше
  • +3
  • 06 марта 2016, 20:55
  • XOR
  • 2

MAX13487 part2

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

Читать дальше

Modbus RTU для Чайников

Modbus — протокол, работающий по принципу «клиент-сервер».
Широко применяется в промышленности.
Modbus может использоваться для передачи данных через последовательные линии связи RS-485, RS-422, RS-232, а также сети TCP/IP.
В этой статье рассмотрим на примере линии RS-485.

И так, в основе интерфейса RS-485 лежит принцип дифференциальной (балансной) передачи данных. Суть его заключается в передаче одного сигнала по двум проводам. Причем по одному проводу (условно A) идет оригинальный сигнал, а по другому (условно B) — его инверсная копия. Другими словами, если на одном проводе «1», то на другом «0» и наоборот. Таким образом, между двумя проводами витой пары всегда есть разность потенциалов: при «1» она положительна, при «0» — отрицательна.


Читать дальше

Преобразователь интерфейсов (переходник) USB<=>RS485 (ПИ-5)

Смотри также: Преобразователь интерфейсов (переходник) USB-RS485 с гальванической развязкой (ПИ-5б)

Продолжаю цикл заметок «Проекты-малыши»

Решил поделиться с общественностью одной из возможных реализаций преобразователя USB<=>RS485 на базе микросхемы FT232RL:





Читать дальше

mini2440 RS-485 linux

Добрый день всем, мне необходимо использовать программное управление потоком RS485 в linux с помощью gpio, с самим gpio я разобрался, все проблема с включением кода управления ttys в ядро, в нем я нашел файлик /drivers/serial/serial_core.c, в нем функцию uart_write:


Читать дальше

Smart Home Protocol

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



Читать дальше
  • -1
  • 17 февраля 2012, 20:59
  • RomiX

MAX13487/13488 выкинем лишнее из RS-485!

Мне пришли сэмплы от MAXIM драйвера RS-485 — MAX13487 и MAX13488. Казалось бы чего нового они могли учудить? Ответ прост Auto Direction Control…


Читать дальше