У меня есть адаптер USB к последовательному порту , основанный на чипе CH340G . Он подключен к устройству, которое периодически отправляет строку со скоростью 9600 бод. Тем не менее, я, кажется, могу получать данные независимо от того, как я настраиваю UART с помощью stty (версия 8.13):

# stty -F /dev/ttyUSB0 9600  
# stty -F /dev/ttyUSB0     
speed 9600 baud; line = 0;
kill = ^H; min = 100; time = 2;
-icrnl -imaxbel
-opost -onlcr
-isig -icanon -echo
# stdbuf -i0 -o0 cat /dev/ttyUSB0
data data data
^C
# stty -F /dev/ttyUSB0 115200
# stty -F /dev/ttyUSB0       
speed 115200 baud; line = 0;
kill = ^H; min = 100; time = 2;
-icrnl -imaxbel
-opost -onlcr
-isig -icanon -echo
# stdbuf -i0 -o0 cat /dev/ttyUSB0         
data data data
^C

Я полагаю, что-то не так с stty , так как screen работает, как ожидалось. screen /dev/ttyUSB0 9600 показывает данные, а screen /dev/ttyUSB0 115200 не выводит.

Что-то мне не хватает в попытке настроить скорость UART с помощью stty?

1 ответ1

2

Я полагаю, что-то не так с stty ...
...
Что-то мне не хватает в попытке настроить скорость UART с помощью stty?

Да, ваш тест некорректен, так что вы не обнаружите, что скорость передачи была изменена.

Некоторые (возможно, неясные) факты:

  • Последовательный порт может вообще не принимать данные, когда данные отправляются со скоростью передачи данных, значительно меньшей по сравнению с его конфигурацией (например, отправляются со скоростью 9600 бод и получают со скоростью 115200 бод).
  • Команда cat имеет причуду, которая может привести к тому, что она не сбрасывает буферы stdio, если не встретит символ завершения строки. IOW последовательные команды cat могут отображать те же данные, когда не было завершения строки. Принятый ответ на этот вопрос намекает на этот вопрос.

Ваш конкретный выбор и последовательность команд оболочки работают вместе, чтобы помочь вам сделать неверный вывод.

# stty -F /dev /ttyUSB0 9600
# stty -F /dev /ttyUSB0
# cat /dev /ttyUSB0
данные данные данные
^ C

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

# stty -F /dev /ttyUSB0 115200
# stty -F /dev /ttyUSB0
# cat /dev /ttyUSB0
данные данные данные
^ C

После перенастройки с гораздо более высокой скоростью передачи данных последовательный порт, вероятно, перестает обнаруживать допустимые кадры, и новые данные не принимаются.
Когда вы запускаете другую команду cat , вы видите отображение тех же данных, которые были получены ранее (то есть до изменения скорости передачи).


добавление

Вы должны быть в состоянии, по крайней мере, убедить себя, что команда stty не нарушена и действительно изменяет скорость передачи данных, как и ожидалось.
Или:

О. Вместо того, чтобы переключаться на очень быструю скорость передачи (которая не может обнаружить кадрирование), переключитесь на умеренную скорость 38400 бод или более медленную скорость 4800 бод, каждая из которых должна вызывать прием / отображение мусорных символов (вместо действительных данных или ничего).

Или же

Б. Поменяйте местами порядок скорости передачи. Сбросьте системы и используйте stty для первоначальной настройки быстрой недопустимой скорости передачи данных, чтобы вызвать либо прием / отображение мусорных символов, либо ничего.
Затем используйте stty для настройки правильной скорости передачи и начните получать данные, как и ожидалось.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .