Come inviare comandi AT a un modem in Linux?


13

In Linux (Ubuntu) sto cercando di inviare comandi AT a un modem all'indirizzo /dev/ttyACM0. Ho provato a farlo come:

sudo socat - /dev/ttyACM0

ma quando digito qualcosa ottengo solo una riga che ripete questo comando (mi aspetto un OK).

Quando io faccio

sudo minicom modem1

sembra funzionare. Scrivo un ATe ottengo un OK. Scrivo qualche schifezza, ne ottengo una ERROR.

Sembra che modem1per minicom sia in qualche modo configurato per usare il modem su /dev/ttyACM0.

Come posso usare socat per inviare comandi AT? Devo configurare qualcosa? Forse posso usare le configurazioni di modem1of minicom (non so come trovare / vedere questa configurazione)?

Informazioni aggiuntive

Il socatcomando dato è corretto? Dovrei giocare con alcune opzioni? Con l' -vopzione vedo quanto segue:

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 

Il dispositivo stesso si trova con il seguente output 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

E tty è configurato come segue:

speed 57600 baud; line = 0;
eof = ^A; min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -echo -echoe

forse puoi farlo funzionare giocando con queste opzioni TERMIOS ma non ho mai controllato.
Alex,

Cerca in questo sito web cercando "socat modem" ci sono 5 risultati, controlla se qualcuno di questi è utile. Non ho una configurazione per provarli, quindi non posso davvero aiutare oltre. ( unix.stackexchange.com/search?q=socat+modem )
slm

I suggerimenti non sono utili. Mi sembra di avere un vero problema di base, perché socat dovrebbe funzionare. Ha funzionato prima. Ma non so quale sia il problema. Il comando sopra è corretto è la mia prima domanda?
Alex,

Risposte:


9

Provare socat - /dev/ttyUSB2,crnl

Questo dice a socat di inviare un ritorno a capo e un avanzamento riga.

Chiarimento - questo risale ai giorni bui delle macchine da scrivere elettriche, in cui dovresti dirgli di riportare il carrello in posizione 0 sulla pagina - ergo, un ritorno a capo - oltre a dirgli di spostare la carta su una riga .


5

Il modo migliore per inviare comandi AT a un modem in Linux è usare il programma atinout che è scritto con il solo scopo di inviare comandi AT a un modem dalla riga di comando.

Puoi usarlo per verificare se un modem è attivo e in esecuzione , fare un backup della rubrica:

$ 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 qualsiasi altra cosa per cui usi i comandi AT.


4

Mi sono imbattuto in questo post del progetto Chromium che mostra ciò che desideri. Si intitola: Debug di un modem cellulare .

estratto da quella pagina

Comunicazione diretta con un modem con il set di comandi AT

La maggior parte dei modem supporta i comandi AT che controllano il modem e richiedono informazioni. Su un dispositivo Chromium OS con la modalità sviluppatore abilitata, puoi utilizzare il comando socat per comunicare con il modem. È necessario un dispositivo con sistema operativo Chromium con un'immagine di prova installata (oppure è possibile utilizzare gmerge socat se si ha familiarità con il server dev). Per esempio:

  • Digitare CTRL + ALT + T per inserire la shell crosh.
  • Digitare shell per accedere alla shell bash.
  • Indica quale dispositivo USB utilizzare con: ls / dev / ttyACM * / dev / ttyUSB *
  • Arresta modem manager se è in esecuzione: sudo stop modemmanager
  • Digitare sudo socat - / dev / ttyACM1, crnl o sudo socat - / dev / ttyUSB0 per comunicare con il modem.
  • Assicurarsi che il modem sia abilitato con il comando: "AT + CFUN = 1"

Per esempio:

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

A seconda del modem, è possibile provare diversi comandi AT, ad esempio "AT + CGMI", "AT + CGSN", ecc.


1
Nessun comando AT funziona affatto! Questo è il mio problema! Devo configurare qualcosa? La linea di comando è ok? Faccio qualche grosso errore?
Alex,

@Alex - come ho detto, non ho nessuno di questi componenti hardware, quindi è difficile aiutarti oltre a fornire informazioni come questa. Dovrai eseguire il debug. Proverei a spegnere e riaccendere i dispositivi in ​​questione e vedere se sono bloccati, cercare informazioni nel dmesgregistro. Mi dispiace non posso aiutarti più di questo.
slm

1
Non riesci a fare eco "AT + DONTREMEMBERZMODEM"> / dev / modemtty?
Mikeserv,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.