4G/5G 模块测试与调试
mmcli --scan-modems<< successfully requested to scan devicesTo list detected cellular devices use command:mmcli --list-modems<< /org/freedesktop/ModemManager1/Modem/0 [Sierra Wireless, Inc
1. 常见AT 指令
AT 指令分为两种,通用指令,和厂商自定义的指令,通用指令一般以C 开头,每个modem 厂商基本都遵循这个规范。
下来我们看下常见的一些AT 指令
1.1 查看注册状态: AT+COPS?
AT+COPS?
+COPS: {mode}[,{format},{oper}[,{ AcT}]]
mode | note |
---|---|
0 | 自动注册; Default value |
1 | manual ( field shall be present, and optionally) |
2 | deregister from network |
3 | set only (for read command +COPS?), do not attempt registration/deregistration ( and fields are ignored); this value is not applicable in read command response |
4 | manual/automatic ( field shall be present); if manual selection fails, automatic mode (=0) is entered |
format | note |
---|---|
0 | long format alphanumeric ; Default value |
1 | short format alphanumeric |
2 | numeric |
oper: 运营商字符串
AcT | access technology selected |
---|---|
0 | GSM 2G |
1 | GSM Compact |
2 | UTRAN 3G |
3 | GSM w/EGPRS |
4 | UTRAN w/HSDPA |
5 | UTRAN w/HSUPA |
6 | UTRAN w/HSDPA and HSUPA |
7 | E-UTRAN 4G |
8 | EC-GSM-IoT (A/Gb mode) |
9 | E-UTRAN (NB-S1 mode) |
10 | E-UTRA connected to a 5GCN (see NOTE 5) |
11 | NR connected to a 5GCN (see NOTE 5) 5G |
12 | NG-RAN 5G |
13 | E-UTRA-NR dual connectivity (see NOTE 6) |
通过以上命令就知道该模块的注册方式,以及当前注册的网络信号是3g, 4g 还是5g。
1.2 查询网络信号质量
对于4G 网络使用该命令查询:
AT+CSQ?
+CSQ: rssi, ber
rssi: integer type
0 -113 dBm or less
1 -111 dBm
2…30 -109… -53 dBm
31 -51 dBm or greater
99 not known or not detectable
ber: integer type; channel bit error rate (in percent)
0…7 as RXQUAL values in the table in 3GPP TS 45.008 subclause 8.2.4
99 not known or not detectable
对于5G 网络使用以下信号:
AT+CESQ
rxlev, ber, rscp,ecno,rsrq,rsrp,ss_rsr
q,ss_rsrp, ss_sinr
我们这里只看rxlev 返回值:
rxlev | range |
---|---|
0 | rssi< -110 dBm |
1 | -110 dBm ≤ rssi < -109 dBm |
2 | -109 dBm ≤ rssi < -108 dBm |
: | : : : |
61 | -50 dBm ≤ rssi < -49 dBm |
62 | -49 dBm ≤ rssi < -48 dBm |
63 | -48 dBm ≤ rssi |
99 | not known or not detectable |
更加广泛和通用的信息参考AT+GTCCINFO指令。
1.3 网络拨号:AT+GTRNDIS=1,1
确认到模块已经注册到网络后,就可以进行拨号了
AT+GTRNDIS=1,1
OK
AT+GTPING=0,"182.61.200.6"
+GTPING: 1
OK
表示拨号成功了。
1.4 切换无线网络: AT+WS46
AT+WS46=[<n>]
OK
n的取值范围为:
22 UTRAN only
28 E-UTRAN only
31 UTRAN and E-UTRAN
36 NG-RAN only
37 NG-RAN and E-UTRAN
38 NG-RAN, E-UTRAN and UTRAN
40 NG-RAN and UTRAN
2. 使用NetworkManager连接&调试(方式1)
要使用Network Manager 管理 数据网络,必须安装ModemManager,而且必须是像高通这种大厂的modem, 一般都不存在兼容性问题。而且确保ModemManager 可以正常连接数据网络。
查看所有连接:
$ nmcli connection show
# or
$ nmcli con show
## 查看已经激活的连接
$ nmcli connection show --active
查看NetworkManager 识别到的设备:
$ nmcli device
cdc-wdm0 gsm disconnected --
eno1 ethernet connected Wired connection 1
docker0 bridge connected docker0
lo loopback unmanaged --
连接到设备:
nmcli device connect "$DEVICE"
对于数据网络,$DEVICE 就是上面的cdc-wdm0。
如此,就可以轻松的建立数据连接,NetworkManger 就会自动为该数据网络自动分配IP地址和DNS了。
2.1 NetworkManager一些其它常见命令
断开设备连接:
nmcli device disconnect "$DEVICE"
3. 使用ModemManager 连接&调试(方式2)
ModemManager是Linux的一个开源工具,可用于与蜂窝设备通信以进行配置、状态检查、连接触发等操作。它能够通过多种类型的设备控制通道进行通信,例如QMI/RMNET、MBIM、MODEM/AT命令等。
它由Freedesktop.org社区托管,并由Aleksander Morgado和其他贡献者推动。请访https://www.freedesktop.org/wiki/Software/ModemManager/ 以获取最新信息、源代码、API参考手册、调试技巧、贡献方式、邮件列表等。
请注意,ModemManager并不是由蜂窝设备供应商直接开发或推动的,因此无法保证与您打算使用的特定设备的兼容性。一些供应商会贡献代码以使其设备完全兼容,而另一些则不会。然而,许多蜂窝设备可以设置为标准化的USB网络接口和控制通道类型,如USB-IF的MBIM接口或Qualcomm专有接口QMI,而ModemManager会尝试识别这些接口,并经常能够成功地进行管理。
在Ubuntu上,您可以使用apt来安装ModemManager以及相关的依赖项:
apt install modemmanager libmbim-utils libqmi-utils
这条命令会安装ModemManager本身,以及libmbim-utils和libqmi-utils这两个工具包。libmbim-utils提供了一组用于管理MBIM接口(一种标准化的移动宽带接口)的实用程序,而libqmi-utils则提供了一组用于管理QMI接口(Qualcomm专有接口)的实用程序。这些工具可以帮助您调试和配置与ModemManager通信的蜂窝设备。
安装成功后,可以检查modemmanager 的版本:
$ mmcli -V
mmcli 1.20.0
Copyright (2011 - 2022) Aleksander Morgado
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
3.1 扫描 Modems
当ModemManager正常工作时,它通常会自动监听、探测和检测蜂窝设备(modems)。但是,你也可以通过以下命令触发强制扫描:
mmcli --scan-modems
<< successfully requested to scan devices
列出扫描到的设备:
mmcli --list-modems
<< /org/freedesktop/ModemManager1/Modem/0 [QUALCOMM INCORPORATED] RM500QGL_VH
在这里,ModemManager已经检测到了一个RM500QGL_VH 蜂窝设备,并为其分配了标识符号0。标识符号用于在ModemManager中唯一标识和管理该设备。你可以使用这个标识符来执行与特定设备相关的操作,比如配置、状态检查或连接触发等。
3.2 使能Modem
mmcli --modem=0 --enable
<< successfully enabled the modem
3.3 获取 Modem 详细信息
通过上面查到的标识符ID,获取modem的详细信息:
mmcli --modem=0
## 或者
mmcli -m 0
-----------------------------------
General | path: /org/freedesktop/ModemManager1/Modem/0
| device id: 2244fd6b3b3c847520cdec4dbe5af2b08b43ca8b
-----------------------------------
Hardware | manufacturer: QUALCOMM INCORPORATED
| model: RM500QGL_VH
| firmware revision: RM500QGLABR01A01M4G
| carrier config: VoLTE_OPNMKT_CT
| carrier config revision: 0A0113E0
| h/w revision: 20000
| supported: gsm-umts, lte, 5gnr, tds
| current: gsm-umts, lte, 5gnr, tds
| equipment id: 863305040088667
-----------------------------------
System | device: /sys/devices/platform/a5080000.hiusbc1/xhci-hcd.0.auto/usb1/1-1/1-1.1
| drivers: option, qmi_wwan
| plugin: quectel
| primary port: cdc-wdm0
| ports: cdc-wdm0 (qmi), ttyUSB0 (qcdm), ttyUSB1 (gps),
| ttyUSB2 (at), ttyUSB3 (at), wwan0 (net)
-----------------------------------
Numbers | own: 8619951125390
-----------------------------------
Status | lock: sim-pin2
| unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)
| state: registered
| power state: on
| access tech: lte
| signal quality: 100% (recent)
-----------------------------------
Modes | supported: allowed: 3g; preferred: none
| allowed: 4g; preferred: none
| allowed: 3g, 4g; preferred: 4g
| allowed: 3g, 4g; preferred: 3g
| allowed: 5g; preferred: none
| allowed: 4g, 5g; preferred: 5g
| allowed: 4g, 5g; preferred: 4g
| allowed: 3g, 5g; preferred: 5g
| allowed: 3g, 5g; preferred: 3g
| allowed: 3g, 4g, 5g; preferred: 5g
| allowed: 3g, 4g, 5g; preferred: 4g
| allowed: 3g, 4g, 5g; preferred: 3g
| current: allowed: 3g, 4g, 5g; preferred: 5g
-----------------------------------
Bands | supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8,
| utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7,
| eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, eutran-18,
| eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, eutran-29,
| eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, eutran-40,
| eutran-41, eutran-42, eutran-46, eutran-48, eutran-66, eutran-71,
| utran-19
| current: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8,
| utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7,
| eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, eutran-18,
| eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, eutran-29,
| eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, eutran-40,
| eutran-41, eutran-42, eutran-46, eutran-48, eutran-66, eutran-71,
| utran-19
-----------------------------------
IP | supported: ipv4, ipv6, ipv4v6
-----------------------------------
3GPP | imei: 863305040088667
| enabled locks: fixed-dialing
| operator id: 46011
| operator name: CHN-CT
| registration: home
| packet service state: attached
-----------------------------------
3GPP EPS | ue mode of operation: csps-1
| initial bearer path: /org/freedesktop/ModemManager1/Bearer/0
| initial bearer apn: internet
| initial bearer ip type: ipv4
| initial bearer user: username
| initial bearer password: password
-----------------------------------
SIM | primary sim path: /org/freedesktop/ModemManager1/SIM/0
| sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
| slot 2: none
可以看到 Status->signal quality 信号质量是100%。即支持IPV4,也支持IPV6。
3.4 modem连接数据网络
接下来,就用–simple-connect命令来连接数据网络了。
当你运行–simple-connect命令时,ModemManager将会为你的订阅APN(接入点名称)创建一个数据承载( bearer),并将其绑定到该modem 网络接口上。
你可以使用以下命令来激活数据连接:
mmcli -m 0 --simple-connect='apn=ctnet'
## 也可以指定IP类型
mmcli -m 0 --simple-connect='apn=ctnet,ip-type=ipv4v6'
<< successfully connected the modem
数据网络连接成功,查看详细信息确认。
mmcli -m 0
-----------------------------------
Status | lock: sim-pin2
| unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)
| state: connected
| power state: on
| access tech: lte
| signal quality: 100% (recent)
-----------------------------------
Bearer | paths: /org/freedesktop/ModemManager1/Bearer/1
我们看到数据网络已经建立连接,数据承载( bearer)的标号为1, 因此我们可以请求更多关于它的详细信息,以获取IP地址的详细信息。
在ModemManager中,每个数据承载都有一个唯一的标识符,它用于区分不同的网络连接。一旦你通过–simple-connect命令激活了数据连接,并且承载被成功创建,你就可以使用这个承载的标识符来获取更多关于该连接的信息。
要获取承载的详细信息,你可以使用mmcli的–bearer选项,并指定设备标识符和承载标识符。例如:
$ mmcli --modem=0 --bearer=0
------------------------------------
General | path: /org/freedesktop/ModemManager1/Bearer/1
| type: default
------------------------------------
Status | connected: yes
| suspended: no
| multiplexed: no
| interface: wwan0
| ip timeout: 20
------------------------------------
Properties | apn: ctnet
| roaming: allowed
------------------------------------
IPv4 configuration | method: static
| address: 10.32.141.129
| prefix: 30
| gateway: 10.32.141.130
| dns: 61.134.1.6, 218.20.19.40
| mtu: 1500
------------------------------------
Statistics | start date: 2024-03-14T08:24:25Z
| duration: 300
| attempts: 1
| total-duration: 300
从这些信息中,我们可以看到由蜂窝网络分配给我们的IP地址详细信息。
**ModemManager本身不会在Linux中将IPv4地址详细信息分配给蜂窝模块的网络接口。**当ModemManager与NetworkManager一起使用,并且 蜂窝连接 由 NetworkManager 管理时,那么IPv4地址详细信息将由NetworkManager 通过ModemManager收集,并在连接建立时自动分配给网络接口。
这意味着,如果你想在Linux系统中使用蜂窝网络连接,并且想要自动获取IPv4地址并配置网络接口,你需要确保NetworkManager正在运行并且正确配置,以便它可以与ModemManager协同工作。NetworkManager负责监控和管理系统中的网络连接,包括通过蜂窝模块建立的连接。
如果你只使用ModemManager而没有NetworkManager,你可能需要手动配置网络接口,或者使用其他工具或脚本来设置IP地址和其他网络参数。这通常涉及到编辑网络配置文件或使用ip命令等网络工具。
因此,如果你想要一个完整的、自动化的蜂窝网络连接解决方案,在Linux中同时使用ModemManager和NetworkManager是一个好的选择。
3.5 手动设置网络
如果系统没有实现NetworkManager,那么IP地址和路由配置就需要由用户软件或脚本来处理。 这种手法只推荐使用于调试。
例如:
# 在Linux中启用网络接口
ip link set wwan0 up
使用从承载信息中获取到的IPv4地址来配置网络接口,CIDR子网掩码通常可以设置为32(表示单个IP地址)
ip addr add 2.68.206.100/32 dev wwan0
禁用ARP(地址解析协议):
ip link set dev wwan0 arp off
设置从网络获取的MTU(最大传输单元)值:
ip link set dev wwan0 mtu 1500
为蜂窝网络设备添加默认路由或其他类型的路由(例如,使用metric来设置优先使用的路由):
ip route add default dev wwan0 metric 200
添加由蜂窝网络报告的DNS服务器或使用其他公共/期望的DNS服务器。
DNS服务器地址的处理方式取决于Linux发行版和网络管理器。因此,请参阅相关的发行版文档,了解在您特定系统中添加/维护DNS服务器地址的最佳实践。
以下是一个简单的例子,将DNS服务器地址添加到/etc/resolv.conf文件中:
sh -c "echo 'nameserver 8.8.8.8' >> /etc/resolv.conf"
然后就可以ping www.baidu.com 了。
参考连接:
https://techship.com/faq/how-to-guide-control-and-set-up-a-data-connection-in-linux-using-modemmanager-as-connection-manager/
https://wiki.archlinux.org/title/Mobile_broadband_modem
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)