Я продолжаю получать сообщение об ошибке при отправке AT-команд с помощью USB-модема в Ubuntu

Я подключил USB-модем и GSM-карту в надежде связаться с ним. Я установил minicom и atinout и использовал эту команду в minicom:

AT+CUSD=1,"*137#",15 
ERROR

и на atinout я также сделал:

$ atinout - /dev/ttyUSB3 - < <(echo "AT+CUSD=1,\"*137#\",15")
ERROR

Примечания:

  • используя графический интерфейс менеджера модема, команды USSD и AT работают хорошо
  • и на atinout он работал несколько дней назад, а затем отказался от рабочей аппаратной версии:

    Производитель: TCT Mobile International Limited Model: HSPA Data Card Revision: IX1B5400XX


person akram dahab    schedule 10.02.2016    source источник
comment
Пожалуйста, скопируйте и вставьте вывод вместо публикации скриншотов   -  person Andrea Corbellini    schedule 10.02.2016
comment
EOF действительно не является командой. Почему вы думаете, что можете запустить его как один?   -  person Charles Duffy    schedule 10.02.2016
comment
во всяком случае, это вопрос не о Linux или даже об общем наборе AT-команд, а о том, поддерживает ли конкретное устройство конкретное расширение для этого набора команд, а вы даже не назвали аппаратное обеспечение.   -  person Charles Duffy    schedule 10.02.2016
comment
... и, как говорит Андреа, скриншоты здесь не приветствуются, за исключением случаев, когда нет другого способа точно представить контент. Они не доступны для поиска, они недоступны для людей с ограниченными возможностями и т. д.   -  person Charles Duffy    schedule 10.02.2016
comment
хорошо, я отредактировал вопрос, чтобы он соответствовал тому, что здесь запрошено, надеюсь   -  person akram dahab    schedule 11.02.2016
comment
вывод был Error , я упомянул аппаратную версию выше, и я не думаю, что это связано с аппаратным обеспечением, потому что тот же код работал всего два дня назад, а теперь выдает ошибку.   -  person akram dahab    schedule 11.02.2016
comment
вопрос не о linux, но сайт не позволил мне пометить minicom и atinout, так как моя репутация недостаточно велика для этого   -  person akram dahab    schedule 11.02.2016
comment
Ааа - то, что он работает из графического интерфейса, является важной информацией (отсутствующей в вашем исходном вопросе)! Я бы предложил использовать strace или sysdig, чтобы выяснить, что именно этот графический интерфейс делает по-другому.   -  person Charles Duffy    schedule 11.02.2016


Ответы (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 -
person Robert Calhoun    schedule 24.05.2016