Подтвердить что ты не робот

Запись в последовательный порт из командной строки linux

Из окон я могу общаться с устройством последовательного порта, используя следующие команды:

mode com1: baud=9600 data=8 parity=n stop=1
copy con com1
alt+18alt+2ctrl+z

Устройство запускает запрошенную операцию.

Когда я пытаюсь выполнить ту же операцию из автономного окна debian или из экземпляра виртуального бокса debian той же машины Windows, мне пока не повезло.

Здесь эквивалентные команды linux (по крайней мере, я так думаю)

stty -F /dev/ttyS0 speed 9600 cs8 -cstopb -parenb
echo '\x12\x02' > /dev/ttyS0

Ничего не происходит.

Может ли кто-нибудь направить меня в правильном направлении?

4b9b3361

Ответ 1

echo '\x12\x02'

не будет интерпретироваться и буквально будет писать строку \x12\x02 (и добавить новую строку) к указанному последовательному порту. Вместо этого используйте

echo -n ^R^B

которую вы можете построить в командной строке, набрав Ctrl V Ctrl R и Ctrl V Ctrl B. Или проще использовать редактор для ввода в файл script.

Команда stty должна работать, если другая программа не вмешивается. Общим виновником является gpsd, который ищет подключенные устройства GPS.

Ответ 2

Если вы хотите использовать шестнадцатеричные коды, вы должны добавить опцию -e, чтобы включить интерпретацию обратных следов с помощью эха (но результат будет таким же, как с echo Ctrl R Ctrl B). И, как сказал wallyk, вы, вероятно, захотите добавить -n, чтобы предотвратить вывод новой строки:

echo -en '\x12\x02' > /dev/ttyS0

Также убедитесь, что /dev/ttyS0 - это нужный вам порт.

Ответ 3

SCREEN:

ПРИМЕЧАНИЕ: на самом деле экран не может отправлять шестнадцатеричные данные, насколько я знаю. Для этого используйте echo или printf

Я использовал предложения в этом сообщении, чтобы писать в последовательный порт, а затем использовать информацию из другого сообщения для чтения из порта со смешанными результатами. Я обнаружил, что использование экрана - это "более легкое" решение, так как оно открывает сеанс терминала непосредственно с этим портом. (Я ставлю проще в кавычках, потому что экран имеет действительно странный интерфейс, IMO, и для его выяснения еще немного читаем.)

Вы можете отправить эту команду, чтобы открыть сеанс экрана, затем все, что вы набираете, будет отправлено на порт, а ниже будут напечатаны возвращаемые значения:

screen /dev/ttyS0 19200,cs8

(Измените приведенное выше, чтобы оно соответствовало вашим потребностям в скорости, четности, стоповых битах и ​​т.д.). Я понимаю, что экран не является "командной линией Linux", поскольку сообщение специально запрашивает, но я думаю, что это в том же духе. Кроме того, вам не нужно каждый раз вводить эхо и кавычки.

ECHO:

Следуйте за преторианским дроидом. ОДНАКО, это не сработало для меня, пока я также не использовал команду cat (cat < /dev/ttyS0), пока я отправлял команду эха.

PRINTF:

Я обнаружил, что можно использовать команду printf '% x':

c="\x"$(printf '%x' 0x12)
printf $c >> $SERIAL_COMM_PORT

Опять же, для printf запустите cat < /dev/ttyS0 перед отправкой команды.