реклама на сайте
подробности

 
 
> Обработка ошибок приема данных по последовательному порту
_3m
сообщение Nov 17 2011, 14:05
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Возникла проблемка с последовательным портом в линукс.
Не могу найти описание как организовать проверку ошибок принимаемых данных, таких как TTY_BREAK, TTY_FRAME, TTY_PARITY и TTY_OVERRUN.
Изучение исходников драйвера tty/serial показало что в буфере драйвера имеется два массива - один для принятых данных, второй для флагов, т.е. драйвер хранит внутри пару байт+флаг, кроме того в драйвере имеются счетчики ошибок. Вся эта информация мне необходима в приложении для корректной обработки сбоев протокола связи а как ее получить - никакой вразумительной информации не нашел, гугл выдает слишком много мусора.
Данные бинарные.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sasamy
сообщение Nov 18 2011, 14:08
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(_3m @ Nov 17 2011, 18:05) *
никакой вразумительной информации не нашел, гугл выдает слишком много мусора.


В консоли набрать:

$ man 3 termios
Go to the top of the page
 
+Quote Post
_3m
сообщение Nov 18 2011, 15:37
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(sasamy @ Nov 18 2011, 17:08) *
В консоли набрать:
$ man 3 termios

man termios зачитан до дыр. ответов на интересующие вопросы не найдено.
Для начала простейшая задача:
После открытия порта необходимо определить не находится ли RXD в состоянии break. Если break - ожидать прекращаение break. Состояние Break может быть непрерывным. Физически требуется мониторить один бит из регистра статуса UART.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Nov 18 2011, 17:50
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(_3m @ Nov 18 2011, 19:37) *
Не могу найти описание как организовать проверку ошибок принимаемых данных, таких как TTY_BREAK, TTY_FRAME, TTY_PARITY и TTY_OVERRUN.
......
man termios зачитан до дыр. ответов на интересующие вопросы не найдено.


Ответ на то что вы описали находится буквально в первых строчках мана
Цитата
IGNBRK Ignore BREAK condition on input.

BRKINT If IGNBRK is set, a BREAK is ignored. If it is not set but BRKINT is set, then a BREAK causes the
input and output queues to be flushed, and if the terminal is the controlling terminal of a foreground
process group, it will cause a SIGINT to be sent to this foreground process group. When neither IGNBRK
nor BRKINT are set, a BREAK reads as a null byte ('\0'), except when PARMRK is set, in which case it
reads as the sequence \377 \0 \0.

IGNPAR Ignore framing errors and parity errors.

PARMRK If IGNPAR is not set, prefix a character with a parity error or framing error with \377 \0. If neither
IGNPAR nor PARMRK is set, read a character with a parity error or framing error as \0.



Цитата
После открытия порта необходимо определить не находится ли RXD в состоянии break. Если break - ожидать прекращаение break. Состояние Break может быть непрерывным. Физически требуется мониторить один бит из регистра статуса UART.


Мониторинг регистров - это для ногодрыгательной ОС, в нормальных ОС этим занимаются драйверы, в Linux можно кроме этого сделать
1 mmap регистров контроллера в юзерспейс (man mem, man mmap)
2 использовать UIO.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016