25. 4G#
本章配套视频介绍:
《37-4G和5G模块的使用》
https://www.bilibili.com/video/BV12c411M7Gt/
25.1. 4g模块支持列表#
25.1.1. ec20#
4G模块支持野火提供的4G无线网卡
可以支持两种接插模式
MINI PCI-E接口
搭配转接板使用USB接口
购买链接: 《野火官方旗舰店》
25.1.2. EC200N-CN#
可以支持两种接插模式
MINI PCI-E接口
搭配转接板使用USB接口
购买链接 《移远官方旗舰店》
25.1.3. air724ug#
MINI PCI-E接口
购买链接 《上海合宙LuatOS官方企业店》
25.1.4. air780e#
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模块的使用:
EC20
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模块如下图所示:
25.3.1.2. SIM卡#
想要运行4G,除了要安装4G模块,还要安装SIM卡
如果是鲁班猫3 TF卡和SIM卡二合一座子,则SIM卡装下层,TF卡装上层。
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
编译过程中会有很多warning,最后得到quectel-CM
提示
除了以上自行编译源码,也可以使用野火编译好的,可执行以下操作,下载野火编译好的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 &
25.3.3.4. 网络测试#
25.3.3.5. 4G自启动#
为了以后方便使用,把quectel-CM复制到/usr/bin/下
1sudo cp quectel-CM /usr/bin/ -f
添加自启动脚本
1sudo vi /opt/auto_4G.sh
添加如下内容,3gnet是APN根据自己手机卡运营商决定
1#注意不要加&,否则可能自启动失败
2
3#!/bin/bash
4sudo quectel-CM -s 3gnet
添加执行权限
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
使能auto_4G.service服务
1sudo systemctl enable auto_4G
2sudo systemctl start auto_4G
重启开发板,并测试
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文件内容如下:
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文件内容如下:
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文件内容如下:
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
然后我们可以验证一下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
25.4.1. 命令行#
简单流程:
连接模块,插入sim卡
等待模块成功加载
检查sim卡是否正常工作
配置模块网卡模式
拨号上网
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+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#重启后可以查看配置是否成功生成
例子
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
如下图
如果网卡能成功获取ip,像上图的usb1一样即可往后进行拨号操作
如果网卡没能成功获取到ip,像上图的usb0一样,需要重新复位模块或着重启机器
1#复位模块命令
2echo -e "AT+CFUN=1,1\r\n" > /dev/ttyUSB2
备注
复位成功后一般就能显示ip了,如果不行,请查看网卡模式的配置模式是否正确,模块是否能正常工作
25.4.1.5.2. 拨号上网#
在开展这一步前,你需要注意
网卡是否成功获取ip
是否插入sim卡
命令 |
功能 |
|---|---|
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
例子:
问题分析:
如果在拨号的时候返回了ERROR:你的卡可能是专网卡,需要更换拨号命令
1#需要根据自己的实际情况去填写
2AT+QICSGP=1,"apn","username","password",2
如果自动获取网络后也没法连上网络,需要检查一下sim卡是否能正常使用
网卡拨号说明