¿Cómo enviar comandos AT a un módem en Linux?

13

En Linux (Ubuntu) estoy tratando de enviar comandos AT a un módem en /dev/ttyACM0. Traté de hacerlo como:

sudo socat - /dev/ttyACM0

pero cuando escribo algo, solo aparece una línea que repite este comando (espero un OK).

Cuando lo hago

sudo minicom modem1

parece funcionar. Escribo ATy obtengo un OK. Escribo un poco de basura, me sale un ERROR.

Parece que modem1para minicom está configurado de alguna manera para usar el módem en /dev/ttyACM0.

¿Cómo puedo usar socat para enviar comandos AT? ¿Necesito configurar algo? ¿Tal vez pueda usar configuraciones para modem1minicom (no sé cómo encontrar / ver esta configuración)?

Información Adicional

¿Es socatcorrecto el comando dado ? ¿Debo jugar con algunas opciones? Con la -vopción veo lo siguiente:

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 

El dispositivo en sí se encuentra con la siguiente salida 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

Y el tty se configura de la siguiente manera:

speed 57600 baud; line = 0;
eof = ^A; min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -echo -echoe
Alex
fuente
tal vez puedas hacerlo funcionar jugando con estas opciones TERMIOS pero nunca lo comprobé.
Alex
Busque en este sitio web buscando "socat modem", hay 5 resultados, vea si alguno de ellos es útil. No tengo una configuración para probarlos, así que realmente no puedo ayudar más allá de eso. ( unix.stackexchange.com/search?q=socat+modem )
slm
Las sugerencias no son útiles. Parece que tengo un problema básico real, porque socat debería funcionar. Funcionó antes. Pero no sé cuál es el problema. Es el comando anterior correcto es mi primera pregunta.
Alex

Respuestas:

9

Tratar socat - /dev/ttyUSB2,crnl

Esto le dice a socat que envíe un retorno de carro y un avance de línea.

Aclaración: esto se remonta a los días oscuros de las máquinas de escribir eléctricas, donde tendrías que decirle que ruede el carro de regreso a la posición 0 en la página, por ejemplo , un retorno de carro , así como decirle que mueva el papel una línea hacia arriba .

Aaron Mason
fuente
5

La mejor manera de enviar comandos AT a un módem en Linux es usar el programa en la salida, que está escrito con el único propósito de enviar comandos AT a un módem desde la línea de comandos.

Puede usarlo para probar si un módem está funcionando y hacer una copia de seguridad de la guía telefónica:

$ 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
$

o cualquier otra cosa para la que utilice los comandos AT.

hlovdal
fuente
4

Me encontré con esta publicación del proyecto Chromium que muestra lo que quieres. Se titula: Depuración de un módem celular .

extracto de esa página

Comunicación directa con un módem con el conjunto de comandos AT

La mayoría de los módems admiten comandos AT que controlan el módem y solicitan información. En un dispositivo Chromium OS con el modo desarrollador habilitado, puede usar el comando socat para comunicarse con el módem. Necesita un dispositivo Chromium OS con una imagen de prueba instalada (o puede usar gmerge socat si está familiarizado con el servidor de desarrollo). Por ejemplo:

  • Escriba CTRL + ALT + T para ingresar al shell de crosh.
  • Escriba shell para ingresar al bash shell.
  • Calcula qué dispositivo USB usar con: ls / dev / ttyACM * / dev / ttyUSB *
  • Detener el administrador de módem si se está ejecutando: sudo stop modemmanager
  • Escriba sudo socat - / dev / ttyACM1, crnl o sudo socat - / dev / ttyUSB0 para comunicarse con el módem.
  • Asegúrese de que el módem esté habilitado con el comando: "AT + CFUN = 1"

Por ejemplo:

    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 ~ $ 

Dependiendo del módem, puede probar diferentes comandos AT, por ejemplo, "AT + CGMI", "AT + CGSN", etc.

slm
fuente
1
¡Ningún comando AT funciona en absoluto! ¡Este es mi problema! ¿Necesito configurar algo? ¿Está bien la línea de comando? ¿Hago algún gran error?
Alex
@Alex: como dije, no tengo nada de este hardware, por lo que es difícil ayudarlo más allá de proporcionar información como esta. Tendrás que depurarlo. Intentaría apagar y encender los dispositivos en cuestión y ver si están en estado inactivo, buscar información en el dmesgregistro. Lo siento, no puedo ayudarte más que esto.
slm
1
¿No puedes repetir "AT + DONTREMEMBERZMODEM"> / dev / modemtty?
mikeserv