Я получаю сообщение об ошибке при отправке AT-команд с помощью USB-модема в Ubuntu
Я подключил USB-модем и GSM-карту, надеясь связаться с ней. Я установил minicom и atinout и использовал эту команду в minicom:
AT+CUSD=1,"*137#",15
ERROR
и на том же самом я сделал:
$ atinout - /dev/ttyUSB3 - < <(echo "AT+CUSD=1,\"*137#\",15")
ERROR
заметки:
- с помощью GUI менеджера модема команды USSD и AT работают хорошо
и на atinout он работал несколько дней назад, а затем отказался от работающей аппаратной версии:
Производитель: TCT Mobile International Limited
Model: HSPA Data Card
Revision: IX1B5400XX
1 ответ
Если устройство работает в некоторых эмуляторах терминала, но не в других, то, вероятно, терминал настроен неправильно ("неправильно" означает "отличается от того, как настроено устройство на другой стороне соединения"; правильных или неправильных нет).
Обычно проблема заключается в скорости передачи в бодах, локальном эхо или LF или CRLF. Вы можете настроить, как linux обрабатывает tty-устройство с помощью stty
(или же setserial
).
Пример:
Здесь я использую atinout
поговорить с портом Telit DE910 "AUX" через UART.
$ echo 'AT+CREG?' | atinout - /dev/ttyO1 -
AT+CREG?
+CREG: 1,1
OK
Все идет нормально. Но этот модем поддерживает несколько физических интерфейсов для каждого логического интерфейса, и с моим устройством логический порт "AUX" также доступен через /dev/ttyUSB2
, В общем люблю пользоваться /dev/ttyUSBn
потому что, по крайней мере, некоторые из смешного числа опций, которые могут быть установлены stty
исправлены. Но в этом случае значения по умолчанию не достаточно хороши для atinout
даже при том, что мы выдаем ту же команду на тот же логический порт:
$ echo 'AT+CREG?' | atinout - /dev/ttyUSB2 -
AT+CREG?
+CREG: 1,1
OK
AT+CREG
ERROR
^C
В этом случае дополнительные CRLF - это раздача и настройка терминала с stty raw
исправляет это. (В моем случае -icrnl
была единственной частью raw
на самом деле нужно.)
$ stty -F /dev/ttyUSB2 raw
$ echo 'AT+CREG?' | atinout - /dev/ttyUSB2 -
AT+CREG?
+CREG: 1,1
OK
Проблема с использованием stty
Вы изменили устройство для всех остальных. Вы можете использовать stty для сохранения начальной конфигурации, чтобы вы могли восстановить ее, когда закончите.
$ OLDSETTINGS=$(stty -g -F /dev/ttyUSB2)
$ stty -F /dev/ttyUSB2 -igncr -icrnl -ixon -ixoff
$ stty -F /dev/ttyUSB2 "$OLDSETTINGS"
Наконец я рекомендую использовать timeout
с atinout
чтобы избежать зависания, когда модем не отвечает так atinout
ожидает.
$ echo 'AT+CREG?' | timeout -t5 atinout - /dev/ttyUSB2 -