Таким образом, у меня есть стандартный последовательный порт RS232, который возвращается к себе, просто проводя провод от Tx до Rx. Я тестирую петлю, запустив ее echo
и cat
в двух отдельных терминалах:
cat /dev/ttyS1
echo "hi" > /dev/ttyS1
Моя проблема с выходом. Я ожидал бы увидеть, как один "привет" вернется на терминале с работающей кошкой, но вместо этого я получу это:
hi
[2 newlines]
hi
[4 newlines]
hi
[8 newlines]
hi
[16 newlines]
hi
[32 newlines]
hi
... и так до тех пор, пока я ctrl+ c cat
.
После прерывания cat, если я запустлю его снова, он не выдаст «привет», пока я не запустил эхо во второй раз.
Это нормально? Есть идеи, почему я вижу это поведение?
Изменить : под новой строкой я имею в виду ASCII 0x0A
. В этом выводе нет возврата каретки.
cat
serial-port
echo
Кристина
источник
источник
tip /dev/ttyS1
(~.
для выхода) и попытаетесь ввести данные там? Он должен отображаться в вашем терминале, когда провод подключен, поскольку он получает то, что он передал.Ответы:
Благодаря второму комментарию Брюса я смог самостоятельно разобраться в проблеме.
После запуска
stty -a -F /dev/ttyS1
я обнаружил, что для решения этой проблемы есть 3 варианта: «echo», «onlcr» и «icrnl».Поскольку этот последовательный порт возвращается к себе, вот что произошло после запуска
echo "hi" > /dev/ttyS1
:echo
умолчанию команда добавляет новую строку в конец сообщения, поэтому в / dev / ttyS1 отправляется «hi» + LFИ так далее...
Чтобы решить эту проблему, я выполнил следующую команду:
Отключение «echo» предотвращает бесконечный цикл сообщений, а отключение «onlcr» не позволяет последовательному устройству преобразовывать LF в CRLF на выходе. Теперь
cat
получает один "привет" (с одной новой строкой!) За каждый раз, когда я бегуecho
.CR = возврат каретки (ASCII 0x0D); LF = перевод строки или перевод строки (ASCII 0x0A)
источник
-icrnl
сделал трюк для меня.У меня была похожая проблема с объединением файлов в последовательный tty для тестирования. В дополнение к принятому ответу:
Если вы тестируете последовательный вывод, выполняя что-то вроде:,
cat somefile.txt > /dev/ttyS0
он будет иметь большое количество неожиданных байтовых данных, если вы будете проверять точные байтовые значения.С
stty
делает простойstty raw -F /dev/ttyS0
остановятся терминал из вставки / замены символов (например ,[...] 0x0A [...]
->[...] 0x0D 0x0A [...]
).raw
Флаг изменяет режимы терминала так , не выполняется вход и выход обработки.источник
stty raw
отключит эхо по умолчанию. Возможно, вам нужно сделатьstty raw -echo
.