我有一个中兴 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