จะส่งคำสั่ง AT ไปยังโมเด็มใน Linux ได้อย่างไร


13

ในลินุกซ์ (Ubuntu) ฉันพยายามที่จะส่งคำสั่ง AT /dev/ttyACM0กับโมเด็มที่ ฉันพยายามที่จะเป็น:

sudo socat - /dev/ttyACM0

แต่เมื่อพิมพ์อะไรฉันก็จะได้บรรทัดทำซ้ำคำสั่งนี้ (ฉันคาดหวังOK)

เมื่อฉันทำ

sudo minicom modem1

ดูเหมือนว่าจะทำงาน ฉันพิมพ์และได้รับการAT ฉันพิมพ์อึบางอย่างผมได้รับOKERROR

มันดูเหมือนว่าmodem1สำหรับ minicom /dev/ttyACM0มีการกำหนดค่าอย่างใดที่จะใช้โมเด็มที่

ฉันจะใช้ socat เพื่อส่งคำสั่ง AT ได้อย่างไร? ฉันต้องกำหนดค่าบางอย่างหรือไม่ บางทีฉันสามารถใช้การกำหนดค่าสำหรับmodem1ของ minicom (ฉันไม่ทราบวิธีการค้นหา / ดูการกำหนดค่านี้)?

ข้อมูลเพิ่มเติม

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

บางทีคุณสามารถทำให้มันเล่นกับตัวเลือกTERMIOSเหล่านี้แต่ฉันไม่เคยตรวจสอบ
อเล็กซ์

ค้นหาในเว็บไซต์นี้เพื่อค้นหา "socat modem" มี 5 ครั้งดูว่ามีอะไรบ้างที่เป็นประโยชน์ ฉันไม่มีการตั้งค่าให้ลองใช้สิ่งเหล่านี้ดังนั้นฉันจึงไม่สามารถช่วยเหลืออะไรได้มากกว่านี้ ( unix.stackexchange.com/search?q=socat+modem )
slm

คำแนะนำไม่เป็นประโยชน์ ฉันดูเหมือนจะมีปัญหาพื้นฐานจริง ๆ เพราะสังคมควรทำงานได้ มันเคยทำงานมาก่อน แต่ฉันไม่รู้ว่าปัญหาคืออะไร คำสั่งดังกล่าวถูกต้องหรือไม่เป็นคำถามแรกของฉัน
อเล็กซ์

คำตอบ:


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


4

ฉันเจอโพสต์โปรเจค Chromium ที่แสดงสิ่งที่คุณต้องการ มันชื่อ: Debugging โมเด็มโทรศัพท์มือถือ

ตัดตอนมาจากหน้านั้น

การสื่อสารโดยตรงกับโมเด็มด้วยชุดคำสั่ง AT

โมเด็มส่วนใหญ่รองรับคำสั่ง AT ที่ควบคุมโมเด็มและสอบถามข้อมูล บนอุปกรณ์ Chromium OS ที่เปิดใช้งานโหมดผู้พัฒนาคุณสามารถใช้คำสั่ง socat เพื่อสื่อสารกับโมเด็ม คุณต้องใช้อุปกรณ์ Chromium OS ที่ติดตั้งอิมเมจทดสอบ (หรือคุณสามารถใช้ gmerge socat หากคุณคุ้นเคยกับเซิร์ฟเวอร์ dev) ตัวอย่างเช่น:

  • พิมพ์ CTRL + ALT + T เพื่อเข้าสู่ crosh shell
  • พิมพ์ shell เพื่อป้อน bash shell
  • กำหนดว่าต้องใช้อุปกรณ์ 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" เป็นต้น


1
ไม่มีคำสั่ง AT ทำงานเลย! นี่คือปัญหาของฉัน! ฉันต้องกำหนดค่าบางอย่างหรือไม่ เส้น commmand ตกลงไหม? ฉันทำผิดพลาดใหญ่ ๆ บ้างไหม?
อเล็กซ์

@Alex - อย่างที่ฉันบอกว่าฉันไม่มีฮาร์ดแวร์นี้ดังนั้นจึงยากที่จะช่วยเหลือคุณมากกว่าการให้ข้อมูลเช่นนี้ คุณจะต้องแก้ไขข้อบกพร่อง ฉันลองใช้อุปกรณ์ที่มีปัญหาและดูว่าอุปกรณ์อยู่ในสถานะหยุดทำงานหรือไม่ดูข้อมูลในdmesgบันทึก ขออภัยฉันไม่สามารถช่วยเหลือคุณได้มากกว่านี้
slm

1
คุณไม่สามารถสะท้อน "AT + DONTREMEMBERZMODEM"> / dev / modemtty ได้หรือไม่?
mikeserv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.