25. 4G#

本章配套视频介绍:

../../../_images/video.png

《37-4G和5G模块的使用》

https://www.bilibili.com/video/BV12c411M7Gt/

25.1. 4g模块支持列表#

25.1.1. ec20#

4G模块支持野火提供的4G无线网卡

quectel-CM_8.png

可以支持两种接插模式

  • MINI PCI-E接口

  • 搭配转接板使用USB接口

购买链接: 《野火官方旗舰店》

25.1.2. EC200N-CN#

quectel-CM_8.png

可以支持两种接插模式

  • MINI PCI-E接口

  • 搭配转接板使用USB接口

购买链接 《移远官方旗舰店》

25.1.3. air724ug#

quectel-CM_8.png
  • MINI PCI-E接口

购买链接 《上海合宙LuatOS官方企业店》

25.1.4. air780e#

quectel-CM_8.png
  • usb接口

购买链接 《上海合宙LuatOS官方企业店》

25.2. 重要说明#

LubanCat-RK3576系列板卡支持usb接口连接以及mini-pcie接口连接, 虽然他们是两种不一样的接口,但是两种连接方式的原理都是通过usb来通讯。

usb接口连接和mini-pcie接口连接的区别

  • usb接口连接,需要把sim卡插在usb-4G模块上,使用的sim卡尺寸为 标准sim

  • mini-pcie接口连接,需要把sim卡插在板卡上,使用的sim卡尺寸为 nano sim

本章会介绍以下4G模块的使用:

  1. EC20

  2. EC200N-CN(理论上适用于EC100N-CN,EC200S 系列,EC200N-CN,EC200M-CN,EC600M-CN,EC600N-CN,EC800M-CN,EC800N-CN,EG912N-EN,EG915N 系列)

25.3. EC20#

野火EC20 4G模块是由EC20 Pcie接口模组加一个USB转接板构成,可方便插接到带有USB接口的Linux主板上。 EC20型号众多,我们选用的型号是EC20CEFRG,512内存,全网通,支持GPS/语音二次开发。支持分集天线

EC20是移远的一款4G模组,有Mini PCle和LCC两种封装,与处理器通信的协议为USB。 即你们在市面上看到的那些通过板载的PCle接口与EC20连接的板卡, 他们通信时也是通过USB通信,并不是一些初学用户说的通过PCle通信, PCle只是一种封装而已,最终通信都是通过USB。

25.3.1. 模块安装#

25.3.1.1. pcie#

mini-pcie接口接4G模块如下图所示:

../../../_images/4G-1.png

25.3.1.2. SIM卡#

想要运行4G,除了要安装4G模块,还要安装SIM卡

../../../_images/SIM.png

如果是鲁班猫3 TF卡和SIM卡二合一座子,则SIM卡装下层,TF卡装上层。

../../../_images/4g_0.jpg

25.3.2. 图形界面#

由于图形化界面设置只能用于Ubuntu系统,而Debian系统没有图形化配置,所以着重讲解命令行方式,命令行两种系统都能使用。

如果需要Ubuntu系统图形界面可以参考: Ubuntu下图形界面使用4g模块

25.3.3. 命令行#

LubanCat-RK3576系列板卡出厂固件已经支持4G模块的,所以在收到板卡后可以直接使用, 使用方式也非常简单,首先插入4G的电话卡到SIM卡座上,这张电话卡必须是可以上网的, 然后接上IPX天线(4G模块在发货的时候就已经接好天线的了),最终连接到板卡上, 按以下操作就可以

等待大约6S,可以看到4G模块的蓝色LED灯在闪烁,然后可以在终端输入dmesg命令, 能看到以下内容,就代表模块启动成功:

 1 dmesg
 2
 3 ···
 4
 5 [ 7045.607736] usbcore: registered new interface driver usbserial_generic
 6 [ 7045.614387] usbserial: USB Serial support registered for generic
 7 [ 7045.687710] usbcore: registered new interface driver option
 8 [ 7045.697962] usbserial: USB Serial support registered for GSM modem (1-port)
 9 [ 7045.706058] option 1-1.1:1.0: GSM modem (1-port) converter detected
10 [ 7045.719742] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB0
11 [ 7045.732624] option 1-1.1:1.1: GSM modem (1-port) converter detected
12 [ 7045.745153] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB1
13 [ 7045.758280] option 1-1.1:1.2: GSM modem (1-port) converter detected
14 [ 7045.771023] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB2
15 [ 7045.779959] option 1-1.1:1.3: GSM modem (1-port) converter detected
16 [ 7045.795461] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB3

25.3.3.1. 安装必要的依赖#

1#更新软件
2sudo apt update
3
4#获取依赖软件
5sudo apt install make gcc git busybox udhcpc

25.3.3.2. 获取、编译quectel-CM源码#

可以获取quectel-CM源码自行编译或者使用野火编译好的。

1#获取quectel-CM源码
2git clone https://github.com/kmilo17pet/quectel-cm.git
3#进入源码目录
4cd quectel-cm/
5#编译源码
6make
quectel-CM_1.png

编译过程中会有很多warning,最后得到quectel-CM

quectel-CM_2.png

提示

除了以上自行编译源码,也可以使用野火编译好的,可执行以下操作,下载野火编译好的quectel-CM至/usr/bin/目录下。

1#wget下载编译好的quectel-CM至/usr/bin/目录下
2sudo wget -O /usr/bin/quectel-CM https://cloud.embedfire.com/software/packages/quectel-CM
3#添加执行权限
4sudo chmod 777 /usr/bin/quectel-CM

25.3.3.3. 拨号#

拨号命令如下,其中APN根据手机卡运营商而定

1#-s参数指定数据连接的APN
2sudo ./quectel-CM -s APN &
3
4#APN:
5移动:"cmnet"
6联通:"3gnet"
7电信:"ctnet"

测试用的是联通卡所以使用的命令如下

1#指定联通的APN
2sudo ./quectel-CM -s 3gnet &
quectel-CM_3.png

25.3.3.4. 网络测试#

quectel-CM_4.png

25.3.3.5. 4G自启动#

为了以后方便使用,把quectel-CM复制到/usr/bin/下

1sudo cp quectel-CM /usr/bin/ -f
quectel-CM_5.png

添加自启动脚本

1sudo vi /opt/auto_4G.sh

添加如下内容,3gnet是APN根据自己手机卡运营商决定

1#注意不要加&,否则可能自启动失败
2
3#!/bin/bash
4sudo quectel-CM -s 3gnet
quectel-CM_6.png

添加执行权限

1sudo chmod 0755 /opt/auto_4G.sh

创建配置文件,在/etc/systemd/system/目录下创建一个auto_4G.service配置文件,内容如下

 1[Unit]
 2Description = auto_4G daemon
 3
 4[Service]
 5ExecStart = /opt/auto_4G.sh
 6Restart = always
 7Type = simple
 8
 9[Install]
10WantedBy = multi-user.target
quectel-CM_7.png

使能auto_4G.service服务

1sudo systemctl enable auto_4G
2sudo systemctl start auto_4G

重启开发板,并测试

quectel-CM_8.png

25.3.4. 拨号脚本拨号#

除了上述使用quectel-CM进行拨号外,也可以使用拨号脚本进行拨号

本方法仅适用于Debian系统,不适用于Ubuntu系统

25.3.4.1. 安装必要的依赖#

1#更新软件
2sudo apt update
3
4#获取依赖软件
5sudo apt install ipppd

25.3.4.2. 加载三个必要文件#

  • ec20_options

  • ec20_ppp_dialer

  • ppp-on.sh

ppp-on.sh就是拨号脚本,直接运行它可以进行拨号, ec20_options是拨号的配置文件, 而ec20_ppp_dialer则是拨号的一些指令。

三个文件的内容如下:

ec20_options文件内容如下:

ec20_options#
 1/dev/ttyUSB2
 2115200
 3crtscts
 4modem
 5persist
 6lock
 7noauth
 8noipdefault
 9debug
10nodetach
11user Anyname
12password Anypassword
13ipcp-accept-local
14ipcp-accept-remote
15#replacedefaultroute
16defaultroute
17usepeerdns
18noccp
19nobsdcomp
20novj
21#Dump

ec20_ppp_dialer文件内容如下:

ec20_ppp_dialer#
 1ABORT "NO CARRIER"
 2ABORT "ERROR"
 3TIMEOUT 120
 4"" ATE
 5SAY "ATE"
 6ECHO ON
 7OK ATH
 8OK ATP
 9OK AT+CGDCONT=1,\"IP\",\"CMNET\"
10#OK AT+ZSNT=0,0,0
11OK ATD*98*1#
12CONNECT

ppp-on.sh文件内容如下:

ppp-on.sh#
1#!/bin/sh
2#clear
3#ppp-on.sh
4OPTION_FILE="ec20_options"
5DIALER_SCRIPT="ec20_ppp_dialer"
6pppd file $OPTION_FILE connect '/usr/sbin/chat -v -f ec20_ppp_dialer' &

25.3.4.3. 运行4G模块#

 1#给予运行权限
 2sudo chmod +x ppp-on.sh
 3
 4#root运行脚本
 5sudo ./ppp-on.sh
 6
 7#运行结果
 8ATE
 9OK
10ATH
11OK
12ATP
13OK
14AT+CGDCONT=1,"IP","CMNET"
15OK
16ATD*98*1#
17CONNECT
18Script /usr/sbin/chat -v -f ec20_ppp_dialer finished (pid 3212), status = 0x0
19Serial connection established.
20using channel 1
21Using interface ppp0
22Connect: ppp0 <--> /dev/ttyUSB2
23sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xb20ad31b> <pcomp> <accomp>]
24rcvd [LCP ConfReq id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0x3331db1f> <pcomp> <accomp>]
25sent [LCP ConfAck id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0x3331db1f> <pcomp> <accomp>]
26rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0xb20ad31b> <pcomp> <accomp>]
27sent [LCP EchoReq id=0x0 magic=0xb20ad31b]
28rcvd [LCP DiscReq id=0x1 magic=0x3331db1f]
29rcvd [CHAP Challenge id=0x1 <c572f22c913258ae462be0b73b58937c>, name = "UMTS_CHAP_SRVR"]
30sent [CHAP Response id=0x1 <f5676d5cae1f8da564d629fb335728ab>, name = "Anyname"]
31rcvd [LCP EchoRep id=0x0 magic=0x3331db1f b2 0a d3 1b]
32rcvd [CHAP Success id=0x1 ""]
33CHAP authentication succeeded
34CHAP authentication succeeded
35sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
36rcvd [IPCP ConfReq id=0x0]
37sent [IPCP ConfNak id=0x0 <addr 0.0.0.0>]
38rcvd [IPCP ConfNak id=0x1 <addr 10.86.xxx.xxx> <ms-dns1 120.196.165.7> <ms-dns2 221.179.38.7>]
39sent [IPCP ConfReq id=0x2 <addr 10.86.xxx.xxx> <ms-dns1 120.196.165.7> <ms-dns2 221.179.38.7>]
40rcvd [IPCP ConfReq id=0x1]
41sent [IPCP ConfAck id=0x1]
42rcvd [IPCP ConfAck id=0x2 <addr 10.86.xxx.xxx> <ms-dns1 120.196.165.7> <ms-dns2 221.179.38.7>]
43Could not determine remote IP address: defaulting to 10.64.64.64
44not replacing default route to eth0 [192.168.103.254]
45local  IP address 10.86.xxx.xxx
46remote IP address 10.64.64.64
47primary   DNS address 120.196.165.7
48secondary DNS address 221.179.38.7
49Script /etc/ppp/ip-up started (pid 3221)
50Script /etc/ppp/ip-up finished (pid 3221), status = 0x0

当你看到拨号返回的内容后有IP地址时,就证明拨号成功。

1rcvd [IPCP ConfNak id=0x1 <addr 10.86.xxx.xxx> <ms-dns1 120.196.165.7> <ms-dns2 221.179.38.7>]
2sent [IPCP ConfReq id=0x2 <addr 10.86.xxx.xxx> <ms-dns1 120.196.165.7> <ms-dns2 221.179.38.7>]

25.3.4.4. 验证4G网卡#

1#查看ip
2ifconfig
can not find

然后我们可以验证一下ping功能,是否可以访问互联网(此处以ping baidu.com为示例):

1root@lubancat:~# ping baidu.com
2PING baidu.com (110.242.68.66) 56(84) bytes of data.
364 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=1 ttl=48 time=82.2 ms
464 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=2 ttl=48 time=131 ms
564 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=3 ttl=48 time=113 ms
664 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=4 ttl=48 time=117 ms

如果你无法ping通网络,出现以下情况

1root@lubancat:~# ping mi.com
2ping: unknown host

可能你是接了网线的(假设使用了eth0接口),而默认路由表却不是4G模块, 如果想使用网卡上网, 则需要更新路由表,解决办法如下:

1route del -net 0.0.0.0 eth0
2route add -net 0.0.0.0 ppp0

25.3.5. 可能出现的问题#

经过实测,目前的脚本是可以连接到移动、联通、电信的,如果出现一些其他的问题,可以参考以下内容:

APN设置:

1移动:at+cgdcont=1,"ip","cmnet"
2联通:at+cgdcont=1,"ip","3gnet"
3电信:at+cgdcont=1,"ip","ctnet"

拨号:

1 移动:*99***1#或*98*1#
2 联通:*99#电信:#777

25.4. 移远系列4G模块(已验证:EC20/EC200N-CN)#

本节内容适合 EC100N-CN/ EC200S 系列/ EC200N-CN/ EC200M-CN/ EC600M-CN/ EC600N-CN/ EC800M-CN/ EC800N-CN/ EG912N-EN/ EG915N 系列/ EC200A 系列/ UC200A-GL/ EG912Y 系列// EC100Y 系列 EC600E-CN/ EC800E-CN/

注意

如遇到上述模块无法实现下面的功能,可以联系技术支持,将不适配的移除。

目前已验证的模块有:EC200N-CN

quectel-CM_8.png

25.4.1. 命令行#

简单流程:

  1. 连接模块,插入sim卡

  2. 等待模块成功加载

  3. 检查sim卡是否正常工作

  4. 配置模块网卡模式

  5. 拨号上网

25.4.1.1. 连接模块,插入sim卡#

参照上文的EC20的安装以及sim卡的插入

25.4.1.2. 等待模块成功加载#

使用下列命令查看模块是否加载上

1ls /dev/ttyUSB*
2
3#如果为下面的情况即为成功加载
4root@lubancat:~# ls /dev/ttyUSB*
5/dev/ttyUSB0  /dev/ttyUSB1  /dev/ttyUSB2

25.4.1.3. 检查sim卡是否正常工作#

 1#在后台显示/dev/ttyUSB2返回的信息(如果想退出后台显示,使用后面的命令:pkill cat)
 2cat /dev/ttyUSB2 &
 3
 4#检查sim卡的状态
 5echo -e "AT+CPIN?\r\n" >  /dev/ttyUSB2
 6
 7#如果返回值为如下即为获取sim卡成功
 8+CPIN: READY
 9
10OK
11
12#如果返回值为如下即为获取sim卡失败
13
14+CME ERROR: 10
15
16+CME ERROR: 13

备注

如果遇到无法读卡的问题,可能是卡的触电没有紧密与模块的卡座亲密接触,也可能是模块不支持该品类的卡,最佳的解决方法是联系模块的提供商,让他们给你的问题解决

25.4.1.4. 配置模块网卡模式#

备注

如果之前成功配置过网卡的模式,网卡是会把成功配置的网卡模式保存,就不需要额外再配置网卡模式了(使用网络可以跳过此步)

移远模块共有4种模式,但不是每种模块都支持4种模式,需根据实际模块确定。

  • 0:rmnet模式:通过QMI工具发的QMI命令,获取公网IP。这种模式可以配合usb_ecm驱动或高通GobiNet驱动使用。

  • 1:ecm模式:通过标准的CDC-ECM发起data call,是发送标准的ECM命令,获取局域网ip。这种模式配合cdc_ether驱动使用

  • 2:mbim模式:Mobile Broadband Interface Model,正宗的移动宽带接口模型,专门用于3G/4G/5G模块的,只在win8以上的windows上使用。一般只在WINDOWS下使用。

  • 3:rndis模式:基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡获取局域网ip。这种方式最简单,模块插上手机卡之后,模块会自动拨号上网。

AT命令列表#

命令

功能

AT+QCFG="usbnet"

查询网卡模式

AT+QCFG="usbnet",1

设置网卡为ECM模式

AT+QCFG="usbnet",3

设置网卡为RNDIS模式

25.4.1.4.1. 获取当前网卡模式#

由于模块是使用AT指令操作的。所以可以使用minicom来进行操作,这里为了简化操作,没使用minicom,而是直接在命令行上操作

端口位置:/dev/ttyUSB2

 1#查询当前模式
 2
 3#在后台显示/dev/ttyUSB2返回的信息(如果想退出后台显示,使用后面的命令:pkill cat)
 4cat /dev/ttyUSB2 &
 5
 6#查询当前网卡的模式
 7echo -e "AT+QCFG=\"usbnet\"\r\n" >  /dev/ttyUSB2
 8
 9#例子:
10root@lubancat:~# cat /dev/ttyUSB2 &
11[1] 1155
12root@lubancat:~# echo -e "AT+QCFG=\"usbnet\"\r\n" >  /dev/ttyUSB2
13root@lubancat:~#
14+QCFG: "usbnet",3
15
16#解析
17可以看到返回了3,这个是网卡在RNDIS模式
  • +QCFG: "usbnet",3 : RNDIS模式

  • +QCFG: "usbnet",1 : ECM模式

25.4.1.4.2. 配置模块网卡模式为ECM#
 1#在后台显示/dev/ttyUSB2返回的信息(如果想退出后台显示,使用后面的命令:pkill cat)
 2cat /dev/ttyUSB2 &
 3
 4#配置为ECM模式(返回:OK 代表配置成功)
 5echo -e "AT+QCFG=\"usbnet\",1\r\n" >  /dev/ttyUSB2
 6
 7#重启模块(重启模块才能生效)
 8echo -e "AT+CFUN=1,1\r\n" >  /dev/ttyUSB2
 9
10#重启后可以查看配置是否成功生成

例子

quectel-CM_8.png
25.4.1.4.3. 配置模块网卡模式为RNDIS#
 1#在后台显示/dev/ttyUSB2返回的信息(如果想退出后台显示,使用后面的命令:pkill cat)
 2cat /dev/ttyUSB2 &
 3
 4#配置为ECM模式(返回:OK 代表配置成功)
 5echo -e "AT+QCFG=\"usbnet\",3\r\n" >  /dev/ttyUSB2
 6
 7#重启模块(重启模块才能生效)
 8echo -e "AT+CFUN=1,1\r\n" >  /dev/ttyUSB2
 9
10#重启后可以查看配置是否成功生成

例子

详细过程和ECM模式类似,更改其中项就行了

25.4.1.5. 拨号上网#

如果你完成了前面的配置,把网卡成功配置成ECM模式或者RNDIS模式,即可拨号上网

25.4.1.5.1. 拨号前准备#

在拨号上网前,需要查看一下网卡是否成功生成网络节点

1#列出当前网络的信息
2
3ifconfig

如下图

quectel-CM_8.png
  • 如果网卡能成功获取ip,像上图的usb1一样即可往后进行拨号操作

  • 如果网卡没能成功获取到ip,像上图的usb0一样,需要重新复位模块或着重启机器

1#复位模块命令
2echo -e "AT+CFUN=1,1\r\n" >  /dev/ttyUSB2

备注

复位成功后一般就能显示ip了,如果不行,请查看网卡模式的配置模式是否正确,模块是否能正常工作

25.4.1.5.2. 拨号上网#

在开展这一步前,你需要注意

  1. 网卡是否成功获取ip

  2. 是否插入sim卡

AT命令列表#

命令

功能

AT+qnetdevctl=1,1,1

立即拨号

AT+qnetdevctl=3,1,1

自动拨号(开机自动拨号)

AT+qnetdevctl=0,1,1

断开拨号

AT+QICSGP=1,"apn","username","password",2

专网卡拨号

  • 拨号上网操作流程

1#在后台显示/dev/ttyUSB2返回的信息(如果想退出后台显示,使用后面的命令:pkill cat)
2cat /dev/ttyUSB2 &
3
4#立即拨号(返回:OK 代表配置成功)
5echo -e "AT+qnetdevctl=1,1,1\r\n" >  /dev/ttyUSB2
6
7#自动获取网络
8dhclient
  • 例子:

quectel-CM_8.png

问题分析:

  • 如果在拨号的时候返回了ERROR:你的卡可能是专网卡,需要更换拨号命令

1#需要根据自己的实际情况去填写
2AT+QICSGP=1,"apn","username","password",2
  • 如果自动获取网络后也没法连上网络,需要检查一下sim卡是否能正常使用

网卡拨号说明

quectel-CM_8.png