连接建立后如何向调制解调器发送 AT 命令?

连接建立后如何向调制解调器发送 AT 命令?

我有一个中兴 3g 调制解调器。我使用运营商提供的拨号器来建立连接。一旦 ppp 连接处于活动状态,我想发送一些 AT 命令(例如查询信号强度AT+CSQ)。但我使用的拨号器锁定了/dev/ttyUSB0端口,该端口是为我的调制解调器发送 AT 命令的命令端口。那么,一旦连接处于活动状态,有什么方法可以发送命令吗?


编辑:我还尝试了附加端口 /dev/ttyUSB1。但端口正在传输来自调制解调器的随机数据。下面给出了一个示例。

T^PREFMODE??                                                                    
^PREFMODE:8                                                                     

OK                                                                              
TC                                                                              
^DSDORMANT:1                                                                    

+CSQ:19, 99                                                                     

OK                                                                              
T^SYSINFO                                                                       
^SYSINFO:2,3,0,4,255                                                            

OK                                                                              
TT^SYSINFO?                                                                     
^SYSINFO:2,3,0,4,255  

我尝试添加我的命令,我什至得到了输出。但反响却很差。大多数时候,我的 AT 命令都不会被注意到。

答案1

只要设备用于 ppp 流量,就不可能同时运行 AT 命令1。因此,所有现代调制解调器都将提供多个串行接口,例如 /dev/ttyUSB0 和 /dev/ttyUSB1(或 Linux 上的 USB CDC 调制解调器的 /dev/ttyACM0 和 /dev/ttyACM1)。

早在电话具有 RS-232 兼容连接器(可能还带有附加 IrDA)的时代,3GPP 将多路复用协议标准化为07.10为了克服物理限制,尽管这需要 PC 上的特殊驱动程序,所以它从未成功。如今,凭借 USB 固有的多路复用功能,没有理由不提供多个串行接口(但通常只有两个)。

正如评论中已经提到的,您应该使用其他串行设备,例如/dev/ttyUSB1


1理论上,调制解调器可能支持+++转义,这样您就可以在连接正在进行时运行 AT 命令,尽管您必须以某种方式修改拨号程序以注入这些命令并提取响应。 。

答案2

许多调制解调器还支持多路复用器层,以在单个物理 uart 上实现多个虚拟 uart。

通常,它需要一些 at 命令 (AT+CMUX) 在调制解调器中设置多路复用器,然后您可以开始使用一个虚拟端口用于 pppos,同时使用另一个虚拟端口用于 at 命令。

这是一个实现多路复用层主机端的 Linux 驱动程序: https://www.kernel.org/doc/html/latest/driver-api/serial/n_gsm.html

相关内容