4G/5G 模块测试与调试

1. 常见AT 指令

AT 指令分为两种,通用指令,和厂商自定义的指令,通用指令一般以C 开头,每个modem 厂商基本都遵循这个规范。
下来我们看下常见的一些AT 指令

1.1 查看注册状态: AT+COPS?

AT+COPS?
+COPS: {mode}[,{format},{oper}[,{ AcT}]]

modenote
0自动注册; Default value
1manual ( field shall be present, and optionally)
2deregister from network
3set only (for read command +COPS?), do not attempt registration/deregistration ( and fields are ignored); this value is not applicable in read command response
4manual/automatic ( field shall be present); if manual selection fails, automatic mode (=0) is entered
formatnote
0long format alphanumeric ; Default value
1short format alphanumeric
2numeric

oper: 运营商字符串

AcTaccess technology selected
0GSM 2G
1GSM Compact
2UTRAN 3G
3GSM w/EGPRS
4UTRAN w/HSDPA
5UTRAN w/HSUPA
6UTRAN w/HSDPA and HSUPA
7E-UTRAN 4G
8EC-GSM-IoT (A/Gb mode)
9E-UTRAN (NB-S1 mode)
10E-UTRA connected to a 5GCN (see NOTE 5)
11NR connected to a 5GCN (see NOTE 5) 5G
12NG-RAN 5G
13E-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 返回值:

rxlevrange
0rssi< -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
99not 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/RMNETMBIMMODEM/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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值