Как отправить AT-команды на модем в Linux?

13

В Linux (Ubuntu) я пытаюсь отправить AT-команды модему по адресу /dev/ttyACM0. Я пытался сделать это так:

sudo socat - /dev/ttyACM0

но при наборе чего-либо я просто получаю строку, повторяющую эту команду (я ожидаю OK).

Когда я делаю

sudo minicom modem1

это похоже на работу. Я печатаю ATи получаю OK. Я набираю немного дерьма, я получаю ERROR.

Похоже, что modem1для minicom как-то настроено использование модема на /dev/ttyACM0.

Как я могу использовать socat для отправки AT-команд? Нужно ли что-то настраивать? Может быть, я могу использовать конфигурации для modem1Minicom (я не знаю, как найти / увидеть эту конфигурацию)?

Дополнительная информация

Является ли данная socatкоманда правильной? Должен ли я играть с некоторыми вариантами? С -vопцией я вижу следующее:

AT
> 2013/10/23 17:10:28.917413  length=3 from=0 to=2
AT
< 2013/10/23 17:10:28.921598  length=3 from=0 to=2
AT
AT
ksjdhfjdgfhjkdfh
> 2013/10/23 17:10:30.244923  length=17 from=3 to=19
ksjdhfjdgfhjkdfh
< 2013/10/23 17:10:30.251383  length=29 from=3 to=31
ksjdhfjdgfhjk\b \bd\b \bf\b \bh\b \b
ksjdhfjdgfhj 

Само устройство найдено со следующим выводом dmesg:

[5983726.808063] usb 2-1: USB disconnect, device number 3
[5983730.800021] usb 2-1: new full-speed USB device number 4 using uhci_hcd
[5983730.920014] usb 2-1: device descriptor read/64, error -71
[5983733.629524] usb 2-1: New USB device found, idVendor=0572, idProduct=1329
[5983733.629533] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[5983733.629539] usb 2-1: Product: USB Modem
[5983733.629544] usb 2-1: Manufacturer: Conexant
[5983733.629549] usb 2-1: SerialNumber: 24680246
[5983733.632673] cdc_acm 2-1:1.0: ttyACM0: USB ACM device

И tty настроен следующим образом:

speed 57600 baud; line = 0;
eof = ^A; min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -echo -echoe
Alex
источник
возможно вы можете заставить его работать, играя с этими опциями TERMIOS , но я никогда не проверял.
Алекс
Поиск по этому веб-сайту в поисках "модема socat" есть 5 просмотров, посмотреть, если какие-либо из них полезны. У меня нет установки, чтобы попробовать их, поэтому я не могу помочь в этом. ( unix.stackexchange.com/search?q=socat+modem )
slm
Подсказки не полезны. Кажется, у меня есть настоящая основная проблема, потому что socat должен работать. Это работало раньше. Но я не знаю, в чем проблема. Является ли приведенная выше команда правильной, это мой первый вопрос.
Алекс

Ответы:

9

Пытаться socat - /dev/ttyUSB2,crnl

Это говорит socat отправить возврат каретки, а также перевод строки.

Разъяснение - это восходит к темным дням электрических пишущих машинок, где вы должны сказать ему откатить каретку до позиции 0 на странице - эрго, возврат каретки - а также сказать ей переместить бумагу вверх на одну строку ,

Аарон Мейсон
источник
5

Лучший способ отправить AT-команды модему в Linux - это использовать программу atinout, написанную с единственной целью отправки AT-команд модему из командной строки.

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

$ atinout - /dev/ttyACM0 ten_first_phonebook_entries.txt <<EOF
at+cscs="UTF-8"
at+cpbs="SM"; +cpbr=1,10
at+cpbs="ME"; +cpbr=1,10
EOF
$

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

hlovdal
источник
4

Я наткнулся на этот пост проекта Chromium, который показывает, что вы хотите. Это называется: Отладка сотового модема .

выдержка из этой страницы

Связь напрямую с модемом с помощью набора AT-команд

Большинство модемов поддерживают AT-команды, которые управляют модемом и запрашивают информацию. На устройстве Chromium OS с включенным режимом разработчика вы можете использовать команду socat для связи с модемом. Вам необходимо устройство с ОС Chromium с установленным тестовым образом (или вы можете использовать gmerge socat, если вы знакомы с сервером dev). Например:

  • Введите CTRL + ALT + T, чтобы войти в оболочку.
  • Введите shell, чтобы войти в оболочку bash.
  • Определите, какое USB-устройство использовать с: ls / dev / ttyACM * / dev / ttyUSB *
  • Остановите менеджер модема, если он работает: sudo stop modemmanager
  • Введите sudo socat - / dev / ttyACM1, crnl или sudo socat - / dev / ttyUSB0 для связи с модемом.
  • Убедитесь, что модем включен с помощью команды: "AT + CFUN = 1"

Например:

    crosh> shell
    chronos@localhost ~ $ sudo stop modemmanager
    chronos@localhost ~ $ ls /dev/ttyACM* /dev/ttyUSB*
    /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2
    chronos@localhost ~ $ socat - /dev/ttyUSB1
    ATZ
    OK
    AT+CFUN=1
    OK
    ATI
    Manufacturer: Qualcomm Incorporated
    Model: ......
    Revision:....
    ESN: 0x80d...
    +GCAP: +CIS707A, ....

    chronos@localhost ~ $ 

В зависимости от модема вы можете попробовать разные AT-команды, например, «AT + CGMI», «AT + CGSN» и т. Д.

SLM
источник
1
Нет AT команды вообще работает! Это моя проблема! Нужно ли что-то настраивать? Командная строка в порядке? Я делаю какую-то большую ошибку?
Алекс
@ Алекс - как я уже сказал, у меня нет этого аппаратного обеспечения, поэтому трудно помочь вам, кроме предоставления такой информации. Вам придется отладить его. Я бы попробовал выключить и включить соответствующие устройства и посмотреть, находятся ли они в подвешенном состоянии, посмотрите информацию в dmesgжурнале. Извините, я не могу помочь вам больше, чем это.
SLM
1
Разве вы не можете просто повторить "AT + DONTREMEMBERZMODEM"> / dev / modemtty?
mikeserv