Làm cách nào để gửi lệnh AT đến modem trong Linux?


13

Trong Linux (Ubuntu) Tôi đang cố gắng gửi các lệnh AT đến modem tại /dev/ttyACM0. Tôi đã cố gắng làm điều đó như:

sudo socat - /dev/ttyACM0

nhưng khi gõ bất cứ thứ gì tôi chỉ nhận được một dòng lặp lại lệnh này (tôi mong đợi một OK).

Khi tôi làm

sudo minicom modem1

nó dường như làm việc Tôi gõ một ATvà nhận được một OK. Tôi gõ một số tào lao, tôi nhận được một ERROR.

Có vẻ như modem1đối với minicom bằng cách nào đó được cấu hình để sử dụng modem tại /dev/ttyACM0.

Làm thế nào tôi có thể sử dụng socat để gửi lệnh AT? Tôi có cần phải cấu hình một cái gì đó? Có lẽ tôi có thể sử dụng các cấu hình cho modem1minicom (tôi không biết cách tìm / xem cấu hình này)?

Thông tin thêm

socatlệnh đã cho có đúng không? Tôi có nên chơi với một số tùy chọn? Với -vtùy chọn tôi thấy như sau:

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 

Thiết bị được tìm thấy với đầu ra dmesg sau:

[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

Và tty được cấu hình như sau:

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

có lẽ bạn có thể làm cho nó hoạt động khi chơi với các tùy chọn TERMIOS này nhưng tôi chưa bao giờ kiểm tra.
Alex

Tìm kiếm thông qua trang web này để tìm kiếm "modem socat" có 5 lượt truy cập, xem có bất kỳ trong số chúng là hữu ích. Tôi không có thiết lập để thử những thứ này vì vậy tôi thực sự không thể giúp gì hơn. ( unix.stackexchange.com/search?q=socat+modem )
slm

Các gợi ý không hữu ích. Tôi dường như có một vấn đề cơ bản thực sự, bởi vì socat nên làm việc. Nó đã làm việc trước đây. Nhưng tôi không biết vấn đề là gì. Là lệnh trên đúng là câu hỏi đầu tiên của tôi.
Alex

Câu trả lời:


9

Thử socat - /dev/ttyUSB2,crnl

Điều này nói với socat để gửi trả lại vận chuyển cũng như một nguồn cấp dữ liệu.

Làm rõ - điều này quay trở lại những ngày đen tối của máy đánh chữ điện, nơi bạn sẽ phải bảo nó quay chiếc xe trở về vị trí 0 trên trang - ergo, trở về xe ngựa - cũng như bảo nó di chuyển tờ giấy lên một dòng .


5

Cách tốt nhất để gửi lệnh AT đến modem trong Linux là sử dụng chương trình rút gọn được viết với mục đích duy nhất là gửi lệnh AT đến modem từ dòng lệnh.

Bạn có thể sử dụng nó để kiểm tra xem modem có hoạt động hay không , tạo bản sao lưu danh bạ điện thoại:

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

hoặc bất kỳ điều gì khác mà bạn sử dụng các lệnh AT cho.


4

Tôi đã xem qua bài đăng dự án Chromium này cho thấy những gì bạn muốn. Nó có tiêu đề: Gỡ lỗi một modem di động .

trích từ trang đó

Giao tiếp trực tiếp với modem bằng bộ lệnh AT

Hầu hết các modem đều hỗ trợ các lệnh AT điều khiển modem và truy vấn thông tin. Trên thiết bị Chromium OS có bật chế độ nhà phát triển, bạn có thể sử dụng lệnh socat để liên lạc với modem. Bạn cần một thiết bị Chromium OS được cài đặt hình ảnh thử nghiệm (hoặc bạn có thể sử dụng gmerge socat nếu bạn quen thuộc với máy chủ dev). Ví dụ:

  • Nhập CTRL + ALT + T để vào vỏ crosh.
  • Gõ vỏ để vào vỏ bash.
  • Hình cho bạn biết thiết bị USB nào sẽ sử dụng với: ls / dev / ttyACM * / dev / ttyUSB *
  • Dừng trình quản lý modem nếu nó đang chạy: sudo dừng modemmanager
  • Nhập sudo socat - / dev / ttyACM1, crnl hoặc sudo socat - / dev / ttyUSB0 để giao tiếp với modem.
  • Đảm bảo rằng modem được bật bằng lệnh: "AT + CFUN = 1"

Ví dụ:

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

Tùy thuộc vào modem, bạn có thể thử các lệnh AT khác nhau, ví dụ: "AT + CGMI", "AT + CGSN", v.v.


1
Không có lệnh AT nào đang hoạt động! Đây là vấn đề của tôi! Tôi có cần phải cấu hình một cái gì đó? Là dòng commANGE ok? Tôi có làm một số sai lầm lớn?
Alex

@Alex - như tôi đã nói tôi không có bất kỳ phần cứng nào nên rất khó để hỗ trợ bạn ngoài việc cung cấp thông tin như thế này. Bạn sẽ phải gỡ lỗi nó. Tôi sẽ thử cấp nguồn cho các thiết bị được đề cập và xem chúng có ở trạng thái treo không, xem dmesgnhật ký để biết thông tin. Xin lỗi tôi không thể giúp bạn nhiều hơn thế này.
slm

1
Bạn có thể chỉ lặp lại "AT + DONTREMEMBERZMODEM"> / dev / modemtty không?
mikeerv
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.