23. 4G

本章配套视频介绍:

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

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

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

23.1. 4g模块支持列表

23.1.1. ec20

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

quectel-CM_8.png

可以支持两种接插模式

  • MINI PCI-E接口

  • 搭配转接板使用USB接口

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

23.1.2. EC200N-CN

quectel-CM_8.png

可以支持两种接插模式

  • MINI PCI-E接口

  • 搭配转接板使用USB接口

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

23.1.3. air724ug

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

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

23.1.4. air780e

quectel-CM_8.png
  • usb接口

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

23.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 系列)

23.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。

23.3.1. 模块安装

23.3.1.1. pcie

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

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

23.3.1.2. SIM卡

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

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

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

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

23.3.2. 图形界面

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

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

23.3.3. 命令行

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
 dmesg

 ···

 [ 7045.607736] usbcore: registered new interface driver usbserial_generic
 [ 7045.614387] usbserial: USB Serial support registered for generic
 [ 7045.687710] usbcore: registered new interface driver option
 [ 7045.697962] usbserial: USB Serial support registered for GSM modem (1-port)
 [ 7045.706058] option 1-1.1:1.0: GSM modem (1-port) converter detected
 [ 7045.719742] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB0
 [ 7045.732624] option 1-1.1:1.1: GSM modem (1-port) converter detected
 [ 7045.745153] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB1
 [ 7045.758280] option 1-1.1:1.2: GSM modem (1-port) converter detected
 [ 7045.771023] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB2
 [ 7045.779959] option 1-1.1:1.3: GSM modem (1-port) converter detected
 [ 7045.795461] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB3

23.3.3.1. 安装必要的依赖

1
2
3
4
5
#更新软件
sudo apt update

#获取依赖软件
sudo apt install make gcc git busybox udhcpc

23.3.3.2. 获取、编译quectel-CM源码

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

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

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

quectel-CM_2.png

提示

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

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

23.3.3.3. 拨号

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

1
2
3
4
5
6
7
#-s参数指定数据连接的APN
sudo ./quectel-CM -s APN &

#APN:
移动:"cmnet"
联通:"3gnet"
电信:"ctnet"

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

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

23.3.3.4. 网络测试

quectel-CM_4.png

23.3.3.5. 4G自启动

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

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

添加自启动脚本

1
sudo vi /opt/auto_4G.sh

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

1
2
3
4
#注意不要加&,否则可能自启动失败

#!/bin/bash
sudo quectel-CM -s 3gnet
quectel-CM_6.png

添加执行权限

1
sudo chmod 0755 /opt/auto_4G.sh

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Unit]
Description = auto_4G daemon

[Service]
ExecStart = /opt/auto_4G.sh
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target
quectel-CM_7.png

使能auto_4G.service服务

1
2
sudo systemctl enable auto_4G
sudo systemctl start auto_4G

重启开发板,并测试

quectel-CM_8.png

23.3.4. 拨号脚本拨号

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

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

23.3.4.1. 安装必要的依赖

1
2
3
4
5
#更新软件
sudo apt update

#获取依赖软件
sudo apt install ipppd

23.3.4.2. 加载三个必要文件

  • ec20_options

  • ec20_ppp_dialer

  • ppp-on.sh

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

三个文件的内容如下:

ec20_options文件内容如下:

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

ec20_ppp_dialer文件内容如下:

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

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

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

23.3.4.3. 运行4G模块

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#给予运行权限
sudo chmod +x ppp-on.sh

#root运行脚本
sudo ./ppp-on.sh

#运行结果
ATE
OK
ATH
OK
ATP
OK
AT+CGDCONT=1,"IP","CMNET"
OK
ATD*98*1#
CONNECT
Script /usr/sbin/chat -v -f ec20_ppp_dialer finished (pid 3212), status = 0x0
Serial connection established.
using channel 1
Using interface ppp0
Connect: ppp0 <--> /dev/ttyUSB2
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xb20ad31b> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0x3331db1f> <pcomp> <accomp>]
sent [LCP ConfAck id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0x3331db1f> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0xb20ad31b> <pcomp> <accomp>]
sent [LCP EchoReq id=0x0 magic=0xb20ad31b]
rcvd [LCP DiscReq id=0x1 magic=0x3331db1f]
rcvd [CHAP Challenge id=0x1 <c572f22c913258ae462be0b73b58937c>, name = "UMTS_CHAP_SRVR"]
sent [CHAP Response id=0x1 <f5676d5cae1f8da564d629fb335728ab>, name = "Anyname"]
rcvd [LCP EchoRep id=0x0 magic=0x3331db1f b2 0a d3 1b]
rcvd [CHAP Success id=0x1 ""]
CHAP authentication succeeded
CHAP authentication succeeded
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
rcvd [IPCP ConfReq id=0x0]
sent [IPCP ConfNak id=0x0 <addr 0.0.0.0>]
rcvd [IPCP ConfNak id=0x1 <addr 10.86.xxx.xxx> <ms-dns1 120.196.165.7> <ms-dns2 221.179.38.7>]
sent [IPCP ConfReq id=0x2 <addr 10.86.xxx.xxx> <ms-dns1 120.196.165.7> <ms-dns2 221.179.38.7>]
rcvd [IPCP ConfReq id=0x1]
sent [IPCP ConfAck id=0x1]
rcvd [IPCP ConfAck id=0x2 <addr 10.86.xxx.xxx> <ms-dns1 120.196.165.7> <ms-dns2 221.179.38.7>]
Could not determine remote IP address: defaulting to 10.64.64.64
not replacing default route to eth0 [192.168.103.254]
local  IP address 10.86.xxx.xxx
remote IP address 10.64.64.64
primary   DNS address 120.196.165.7
secondary DNS address 221.179.38.7
Script /etc/ppp/ip-up started (pid 3221)
Script /etc/ppp/ip-up finished (pid 3221), status = 0x0

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

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

23.3.4.4. 验证4G网卡

1
2
#查看ip
ifconfig
can not find

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

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

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

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

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

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

23.3.5. 可能出现的问题

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

APN设置:

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

拨号:

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

23.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

23.4.1. 命令行

简单流程:

  1. 连接模块,插入sim卡

  2. 等待模块成功加载

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

  4. 配置模块网卡模式

  5. 拨号上网

23.4.1.1. 连接模块,插入sim卡

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

23.4.1.2. 等待模块成功加载

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

1
2
3
4
5
ls /dev/ttyUSB*

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#在后台显示/dev/ttyUSB2返回的信息(如果想退出后台显示,使用后面的命令:pkill cat)
cat /dev/ttyUSB2 &

#检查sim卡的状态
echo -e "AT+CPIN?\r\n" >  /dev/ttyUSB2

#如果返回值为如下即为获取sim卡成功
+CPIN: READY

OK

#如果返回值为如下即为获取sim卡失败

+CME ERROR: 10

+CME ERROR: 13

注解

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

23.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模式

23.4.1.4.1. 获取当前网卡模式

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

端口位置:/dev/ttyUSB2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#查询当前模式

#在后台显示/dev/ttyUSB2返回的信息(如果想退出后台显示,使用后面的命令:pkill cat)
cat /dev/ttyUSB2 &

#查询当前网卡的模式
echo -e "AT+QCFG=\"usbnet\"\r\n" >  /dev/ttyUSB2

#例子:
root@lubancat:~# cat /dev/ttyUSB2 &
[1] 1155
root@lubancat:~# echo -e "AT+QCFG=\"usbnet\"\r\n" >  /dev/ttyUSB2
root@lubancat:~#
+QCFG: "usbnet",3

#解析
可以看到返回了3,这个是网卡在RNDIS模式
  • +QCFG: "usbnet",3 : RNDIS模式

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

23.4.1.4.2. 配置模块网卡模式为ECM
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#在后台显示/dev/ttyUSB2返回的信息(如果想退出后台显示,使用后面的命令:pkill cat)
cat /dev/ttyUSB2 &

#配置为ECM模式(返回:OK 代表配置成功)
echo -e "AT+QCFG=\"usbnet\",1\r\n" >  /dev/ttyUSB2

#重启模块(重启模块才能生效)
echo -e "AT+CFUN=1,1\r\n" >  /dev/ttyUSB2

#重启后可以查看配置是否成功生成

例子

quectel-CM_8.png
23.4.1.4.3. 配置模块网卡模式为RNDIS
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#在后台显示/dev/ttyUSB2返回的信息(如果想退出后台显示,使用后面的命令:pkill cat)
cat /dev/ttyUSB2 &

#配置为ECM模式(返回:OK 代表配置成功)
echo -e "AT+QCFG=\"usbnet\",3\r\n" >  /dev/ttyUSB2

#重启模块(重启模块才能生效)
echo -e "AT+CFUN=1,1\r\n" >  /dev/ttyUSB2

#重启后可以查看配置是否成功生成

例子

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

23.4.1.5. 拨号上网

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

23.4.1.5.1. 拨号前准备

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

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

ifconfig

如下图

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

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

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

注解

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

23.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
2
3
4
5
6
7
8
#在后台显示/dev/ttyUSB2返回的信息(如果想退出后台显示,使用后面的命令:pkill cat)
cat /dev/ttyUSB2 &

#立即拨号(返回:OK 代表配置成功)
echo -e "AT+qnetdevctl=1,1,1\r\n" >  /dev/ttyUSB2

#自动获取网络
dhclient
  • 例子:

quectel-CM_8.png

问题分析:

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

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

网卡拨号说明

quectel-CM_8.png