JavaScript fwdays conf: Node.js, Performance, Tests, Nuxt.js, DevTools, GraphQL | March 14
×Закрыть

Настройка uart в linux

Всем привет, балуюсь с orange pi и стала задача к нему что нибудь подцепить интересное. Так как я недавно решил понемногу питон осваивать решено было что апельсина буду мучать питоном. Скачал OPI gpio, поставил, ну что то там не заладилось делал все по инструкциям и советам из форумов но оно не в какую в конечном итоге не работало. плюнул я на это дело почитал как через файловый интерфейс с портами работать и вуаля теперь можно моргать светодиодом))) но одним светодиодом радоватся будешь недолго. В общем суть такова, с gpio на уровне вход/выход я немного разобрался как работать через файловый интерфейс, синхронные протоколы такие как i2c и spi можно сделать софтовые мне оно даже лучше, не привыязываешся жестко к распиновке девайса, а вот с uart такой финт ушами не прокатит. пробовал pySerial качать но он чего то только под 2.х питон ставится, под 3.х не хочет.
В общем интересует можно ли используя файловый интерфейс настроить и задействовать uart? если да то как? тогда можно будет забить на всякие wiringpi и на случай восстания машин или зомби апокалипсиса или очередных тараканов в голове не завися от возможности скачать и установить либу задействовать основную переферию одноплатника

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Все таки pySerial установил. неправильно задавал версию питона. Всем спасибо за помощь. будет чуток больше времени загляну что под капотом.
Не знаю что раньше было, а сейчас в uart по крайней мере в моем оранже и во всяких мегах и армах 2 информационных контакта(rx/tx) .
синхроным можно наверное назвать usart но не uart. Если тактовой линии сихронизации нет, то он не как не может быть синхронным, это своего рода сигнал о том что мы сформировали данные и они готовы для прочтения

Не знаю что раньше было, а сейчас в uart по крайней мере в моем оранже и во всяких мегах и армах 2 информационных контакта(rx/tx) .

Ну тогда точно выключить все flow control, поставить raw mode и работать на уровне байтиков.

Если тактовой линии сихронизации нет, то он не как не может быть синхронным

В современной терминологии, синхронному интерфейсу линия синхронизации не обязательна:

> Synchronous serial communication describes a serial communication protocol in which «data is sent in a continuous stream at constant rate.»
> Synchronous communication requires that the clocks in the transmitting and receiving devices are synchronized — running at the same rate — so the receiver can sample the signal at the same time intervals used by the transmitter. No start or stop bits are required. For this reason «synchronous communication permits more information to be passed over a circuit per unit time» than asynchronous serial communication.

Тут про «same rate» явный недочёт — надо было обязательно сказать что требуется и same phase (и фаза синхронизируется отдельными средствами); без этого формально RS-232 (без AT-detection) тоже не выделялся бы. Но в остальном описание справедливо. Никто не использует отдельную линию синхронизации, например, при передаче даже «старого доброго» G.703 (который основа транспорта для Frame Relay и ещё нескольких менее известных) на дальние расстояния — там идёт только сигнал одного потока данных в каждую сторону, и тем более это касается более производительных транспортов вроде STM-${n}, OC-${n}, где n соответствует ширине в базовых элементах. Для битовой синхронизации во времена G.703 использовали кодирование типа Manchester. Потом и это устранили — посмотрите, например, в 4B/5B про синхронизационные последовательности и обеспечение необходимой частоты переходов между битами. На STM, PCI-E используются ещё более продвинутые (по доле полезной нагрузке) методы.
А ещё есть для них всех оптический транспорт, где тоже никто не гонит синхросигнал по отдельной лямбде :)

Так что тут то, чему вас учили в вузе (скорее всего подобные мнения именно оттуда) — безнадёжно устарело. Я не удивляюсь — смотрю на то, чему учат нынешних студентов, и вижу дикую смесь из рудиментов давности от 20 до 40 лет — но надо из этого когда-нибудь вылазить :)

Так что тут то, чему вас учили в вузе (скорее всего подобные мнения именно оттуда) — безнадёжно устарело. Я не удивляюсь — смотрю на то, чему учат нынешних студентов, и вижу дикую смесь из рудиментов давности от 20 до 40 лет — но надо из этого когда-нибудь вылазить :)

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

В общем интересует можно ли используя файловый интерфейс настроить и задействовать uart? если да то как?

открываешь соответствующий /dev/ttySxx и читаешь-пишешь

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

Вдогонку:
1. Могут быть и другие суффиксы, например /dev/ttyusb0, или /dev/ttyACM1... (см. пример рассказа о различии; пишут, что ACM типично для Arduino... не пробовал).
2. Если на устройстве заранее не выставлено CLOCAL, открытие без O_NONBLOCK заблокирует. Открывать c O_NONBLOCK в open(), поднимать флаг CLOCAL через tcsetattr() и дальше уже работать как нормально.
Возможно, на Pi это не нужно, не пробовал, но в среднем по больнице это надо учитывать.

А чем твой UART программно от i2c отличается? И кто тебе таки сказал, что он асинхронный? Он переменной скорости, но он синхронный.

Как догадываешься, это не файловый интерфейс, а потоковый. С обработкой событий. И всё что тебе надо — найти ПРИМЕРЫ, а не RTFM. Если не найдёшь на Питоне, поищи готовое на С, подними отдельный процесс и общайся с процесом по сокету.

А чем твой UART программно от i2c отличается? И кто тебе таки сказал, что он асинхронный? Он переменной скорости, но он синхронный.

Universal Asynchronous Receiver-Transmitter

Он переменной скорости, но он синхронный.

Смешно :)
8250 уже не имел синхронного режима в принципе (я уж молчу, что «синхронный» в 8251 это некая особая сущность — это не SDLC-like, не 4B/5B и не что-то похожее). Современные тем более такого не умеют.

найти ПРИМЕРЫ, а не RTFM

НЕТ. Примеры не помогут, если не понимать, как и для чего выставляются 75 опций termios (вот специально пересчитал по выводу `stty -a`) и какие из них можно не трогать, а для каких надо посреди ночи назубок помнить, что они делают.
Так что применять их только одновременно.

ак и для чего выставляются 75 опций termios (вот специально пересчитал по выводу `stty -a`) и какие из них можно не трогать, а для каких надо посреди ночи назубок помнить, что они делают.

Там самое тяжелое — это flow control, автоматический, его отсутствие, ручной, фактически под каждое устройство приходилось писать свой высокоуровневый драйвер для передачи данных по линии. Но как правило в современном эбдедеде используют минималистический подход «три проводка» на UART, поэтому половина опций нафиг не нужна %)

Ну если три провода, то да :) raw mode, FC off и поехали...
до первого столба, а они где-то обязательно выбегут на дорогу...

Подписаться на комментарии