UART SW и управление потоком HW, Linux - PullRequest
0 голосов
/ 08 апреля 2019

В настоящее время я тестирую управление потоком между двумя портами UART RS485 (просто подключите Rx и RX, Tx и Tx, DTS / CTS не подключен).

Установка флага (между получением и установкой атрибута)

  • Управление потоком HW:

tty.c_cflag | = CRTSCTS; // RTS / CTS tty.c_iflag & = ~ (IXOFF | IXON | IXANY);

  • SW Flow control:

tty.c_cflag & = ~ CRTSCTS; tty.c_iflag | = (IXOFF | IXON | IXANY);

Я предполагаю, что, если я установлю UART1 и UART2, это аппаратное управление потоком и высокая скорость передачи (например, 460800 бит / с) или запись в UART1 с более высокой скоростью передачи, чтение () из UART2 с более низкой скоростью передачи, FIFO (в настоящее время 64 байта) будет переполнен так же, как ядро ​​отправляет некоторые уведомления.

Но на самом деле, всегда пишут () и читают () успешно. Может ли кто-нибудь поделиться мной предложением, как наблюдать переполнение буфера?

Извините, если у меня небольшой вопрос, потому что я новичок в Linux.

Большое спасибо.

1 Ответ

0 голосов
/ 08 апреля 2019

В стандарте RS485 не должно быть аппаратного управления потоком.
Поскольку API используется совместно со стандартом RS232C, его можно вызывать, но он не будет работать эффективно.

Кроме того, 64-байтовый FIFO, который вы написали, представляет собой аппаратный буфер (интерфейсный чип), а драйвер устройства также имеет программный буфер. Буферы часто существуют в килобайтах.

Неудивительно, что даже при высокой скорости передача и прием коротких данных заканчиваются нормально.

Выполнение суждений, таких как переполнение, путем проверки формата полученных данных и проверки баланса и последовательности команд и ответов.

...