Wie sende ich AT-Befehle an ein Modem unter Linux?


13

Unter Linux (Ubuntu) versuche ich, AT-Befehle an ein Modem unter zu senden /dev/ttyACM0. Ich habe versucht, es zu tun als:

sudo socat - /dev/ttyACM0

aber wenn ich etwas tippe, bekomme ich nur eine Zeile, die diesen Befehl wiederholt (ich erwarte eine OK).

Wenn ich es tue

sudo minicom modem1

es scheint zu funktionieren. Ich tippe ein ATund bekomme ein OK. Ich tippe etwas Mist, ich bekomme einen ERROR.

Es scheint, dass modem1für minicom irgendwie konfiguriert ist, das Modem bei zu verwenden /dev/ttyACM0.

Wie kann ich mit socat AT-Befehle senden? Muss ich etwas konfigurieren? Vielleicht kann ich Konfigurationen für modem1Minicom verwenden (ich weiß nicht, wie ich diese Konfiguration finden / sehen kann)?

Zusätzliche Information

Ist der angegebene socatBefehl korrekt? Soll ich mit einigen Optionen spielen? Mit der -vOption sehe ich folgendes:

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 

Das Gerät selbst wird mit der folgenden dmesg-Ausgabe gefunden:

[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

Und das tty ist wie folgt konfiguriert:

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

Vielleicht können Sie es mit diesen TERMIOS- Optionen zum Laufen bringen , aber ich habe es nie überprüft.
Alex

Durchsuchen Sie diese Website nach "socat modem". Es gibt 5 Treffer. Überprüfen Sie, ob einer von ihnen hilfreich ist. Ich habe kein Setup, um diese auszuprobieren, daher kann ich darüber hinaus nicht wirklich helfen. ( unix.stackexchange.com/search?q=socat+modem )
slm

Die Hinweise sind nicht nützlich. Ich scheine ein echtes Grundproblem zu haben, weil socat funktionieren sollte. Es hat vorher funktioniert. Aber ich weiß nicht, wo das Problem liegt. Ist der obige Befehl korrekt, ist meine erste Frage.
Alex

Antworten:


9

Versuchen socat - /dev/ttyUSB2,crnl

Dies weist socat an, einen Wagenrücklauf sowie einen Zeilenvorschub zu senden.

Klarstellung - Dies geht auf die dunklen Tage der elektrischen Schreibmaschinen zurück, in denen Sie den Wagen auf Position 0 auf der Seite zurückrollen müssten - also einen Wagenrücklauf - und das Papier um eine Zeile nach oben bewegen müssen .


5

Der beste Weg, um AT-Befehle an ein Modem unter Linux zu senden, besteht darin, das Programm atinout zu verwenden, das ausschließlich zum Senden von AT-Befehlen an ein Modem über die Befehlszeile geschrieben wurde.

Sie können damit testen, ob ein Modem in Betrieb ist. Erstellen Sie eine Sicherungskopie des Telefonbuchs:

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

oder andere Dinge, für die Sie AT-Befehle verwenden.


4

Ich bin auf diesen Chromium-Projektbeitrag gestoßen, der zeigt, was Sie wollen. Es trägt den Titel: Debuggen eines Mobilfunkmodems .

Auszug aus dieser Seite

Direkte Kommunikation mit einem Modem mit dem AT-Befehlssatz

Die meisten Modems unterstützen AT-Befehle, die das Modem steuern und Informationen abfragen. Auf einem Chromium OS-Gerät mit aktiviertem Entwicklermodus können Sie mit dem Befehl socat mit dem Modem kommunizieren. Sie benötigen ein Chromium OS-Gerät mit einem installierten Test-Image (oder Sie können gmerge socat verwenden, wenn Sie mit dem Entwicklungsserver vertraut sind). Zum Beispiel:

  • Geben Sie STRG + ALT + T ein, um die Crosh-Shell zu betreten.
  • Geben Sie shell ein, um die Bash-Shell aufzurufen.
  • Stellen Sie fest, mit welchem ​​USB-Gerät Sie arbeiten möchten: ls / dev / ttyACM * / dev / ttyUSB *
  • Stoppen Sie den Modem-Manager, wenn er ausgeführt wird: sudo stop modemmanager
  • Geben Sie sudo socat - / dev / ttyACM1, crnl oder sudo socat - / dev / ttyUSB0 ein, um mit dem Modem zu kommunizieren.
  • Stellen Sie sicher, dass das Modem mit dem Befehl "AT + CFUN = 1" aktiviert ist.

Zum Beispiel:

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

Je nach Modem können Sie verschiedene AT-Befehle ausprobieren, z. B. "AT + CGMI", "AT + CGSN" usw.


1
Es funktioniert überhaupt kein AT-Befehl! Das ist mein Problem! Muss ich etwas konfigurieren? Ist die Befehlszeile in Ordnung? Mache ich einen großen Fehler?
Alex

@Alex - Wie gesagt, ich habe keine dieser Hardware, daher ist es schwierig, Ihnen zu helfen, über die Bereitstellung solcher Informationen hinaus. Sie müssen es debuggen. Ich würde versuchen, die betreffenden Geräte aus- und wieder einzuschalten, um festzustellen, ob sie hängen dmesgbleiben. Informationen finden Sie im Protokoll. Entschuldigung, ich kann dir nicht mehr helfen.
slm

1
Können Sie nicht einfach "AT + DONTREMEMBERZMODEM"> / dev / modemtty wiederholen?
Mikeserv
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.