前言
4G模组常见的拨号方式分以下几种:
在OKMX6ULX系列板子上,常用的模组是EC20和EC200N。其中EC20使用的是gobinet拨号,通过移远提供的quectel_CM进行拨号;EC200N使用的是AT拨号,需要调用fltest_4gCat1.sh脚本拨号。本文以移远的EC20和EC200N为例,介绍当4G无法使用的排查思路,其他模组也可参考。
一、4G无法使用的常见原因
4G无法使用最常见的原因有两种,一是模组没有正常工作;二是SIM卡相关的问题,尤其是物联网卡;
1.硬件问题
模组没有正常工作常见原因有:供电不正常、模组处于复位状态、天线没插好
2.SIM卡问题
常见原因有:SIM卡插反、SIM卡接触不良、物联网卡被锁卡、信号不好、无法注网、SIM卡欠费等
二、4G问题的排查思路
1.确认USB通信是否正常
首先要确保硬件正常,可以通过以下命令查看当前板子上有没有识别到USB设备。
$ lsusb
Bus 002 Device 005: ID 2c7c:6002
Bus 002 Device 001: ID 1d6b:0002
......
一般移远的模块pid都是2c7c,如果识别不到模组的pid,vid,检查以下内容:
常见几块模组的id如下:
EC20
2c7c:0125
EC200N
2c7c:6002
EC200A(默认不支持,下文介绍如何适配)
2c7c:6005
2.确认驱动是否正常
飞凌出厂的内核源码,已经适配了EC20、EC200。
其中EC20使用gobinet驱动,用户无需改动。驱动在内核源码当中的位置如下:
drivers/net/usb/GobiUSB/
一般来说,可以通过查看是否生成虚拟串口来判断驱动有没有正常加载。EC20系列会生成4个虚拟串口,EC200系列一般是3个虚拟串口。
EC20:
$ ls /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3
EC200N
$ ls /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2
对于EC20而言,使用gobinet拨号的情况下,没有生成虚拟串口也不会影响拨号,但是无法通过虚拟串口收发AT命令。但是对于EC200A、EC200N这种依赖AT拨号的模组,需要有虚拟串口才能拨号。.
**注意:**EC20使用/dev/ttyUSB2收发AT命令,EC200系列使用/dev/ttyUSB1收发AT命令
3.查看SIM卡是否正常识别
对于EC20,可以通过拨号的打印信息判断SIM卡是否正常识别,只不过具体不识别的原因,依然需要通过AT命令查看。EC20拨号的部分打印信息如下,当SIMStatus显示为SIM_READY时,SIM卡正常识别,如果显示SIM_ABSENT,说明SIM卡识别失败;
root@fl-imx6ull:~# quectel-CM &
[1] 598
......
[04-26_19:16:07:106] requestGetSIMStatus SIMStatus: SIM_READY
......
[04-26_19:16:07:869] /etc/udhcpc.d/50default: Adding DNS 222.222.222.222
[04-26_19:16:07:869] /etc/udhcpc.d/50default: Adding DNS 222.222.202.202
同时,也可以通过AT命令来查看SIM卡状态(EC200N只能通过AT查看,注意EC200N使用的虚拟串口是/dev/ttyUSB1)
$ cat /dev/ttyUSB2 & //打开串口回显
$ echo AT > /dev/ttyUSB2 //发送AT返回OK说明4G模块正常通信
$ echo ATE0 > /dev/ttyUSB2 //关闭回显,减少无用打印信息
$ echo AT+CPIN? > /dev/ttyUSB2 //查询sim卡状态,显示ready说明SIM卡识别正常
如果返回CMD+err code,常见的有两种
CME ERROR: 10 SIM not inserted
CME ERROR: 13 SIM failure
4.查看信号质量
可以通过AT命令查信号质量
$ cat /dev/ttyUSB2 & //打开串口回显
$ echo AT > /dev/ttyUSB2 //发送AT返回OK说明4G模块正常通信
$ echo ATE0 > /dev/ttyUSB2 //关闭回显,减少无用打印信息
$ echo AT+CSQ > /dev/ttyUSB2 //查信号质量
信号质量的返回值格式如下:
+CSQ: 25,99
信号值的范围在0-31之间,一般25以上信号就没什么问题,低于25就有拨号失败的可能。如果信号质量不好,可以检查一下天线是否插好。
5.查看注网状态
注网状态指的是模块与基站之间建立连接,可以用我们比较熟悉的方式做一个简单的类比:注网相当于是手机状态栏的信号值,注网成功才有信号;而拨号相当于是打开了数据上网的开关。因此,4G模组如果注网失败,也是不能上网的。
$ cat /dev/ttyUSB2 & //打开串口回显
$ echo AT > /dev/ttyUSB2 //发送AT返回OK说明4G模块正常通信
$ echo ATE0 > /dev/ttyUSB2 //关闭回显,减少无用打印信息
$ echo AT+CGREG? > /dev/ttyUSB2 //查注网状态
返回值的格式为
如果返回0,1说明注网正常,手册描述如下
<n> 0 Disable network registration unsolicited result code
1 Enable network registration unsolicited result code +CGREG:<stat>
2 Enable network registration and location information unsolicited result code
+CGREG: <stat>[,<lac>,<ci>[,<Act>]]
<stat> 0 Not registered, MT is not currently searching an operator to register to .The UE is in GMM state GMM-NULL or GMM- DEREGISTERED-INITIATED. The GPRS service is disabled, the UE is allowed to attach for GPRS if requested by the user.
1 Registered, home network .The UE is in GMM state GMM-REGISTERED or GMM-ROUTING-AREA-UPDATING-INITIATED INITIATED on the home PLMN.
2 Not registered, but MT is currently trying to attach or searching an operator to register to. The UE is in GMM state GMM-DEREGISTERED or GMM-REGISTERED-INITIATED. The GPRS service is enabled, but an allowable PLMN is currently not available. The UE will start a GPRS attach as soon as an allowable PLMN is available.
3 Registration denied. The UE is in GMM state GMM-NULL. The GPRS service is disabled, the UE is not allowed to attach for GPRS if requested by the user.
4 Unknown
5 Registered, roaming
三、特殊情况处理
1.虚拟串口无法cat
当虚拟串口无法cat时,如下:
$ cat /dev/ttyUSB2 &
[2] 893
$
[2]+ Done cat /dev/ttyUSB2
需要确认该串口设备是不是被其他进程占用了,可以使用fuser
命令查看
$ fuser /dev/ttymxc2
/dev/ttyUSB2: 884
2.在内核当中添加4G模组的虚拟串口
以EC200A为例,EC200A的id如下:
2c7c:6005
在内核当中,添加虚拟串口需要把模组的pid和vid添加到如下文件当中
drivers/usb/serial/option.c
具体步骤可以参考《虚拟串口支持》文档。
3.专网卡怎么使用
SIM卡分为专网卡和公网卡,公网卡支持APN自动纠正,专网卡需要设置APN。
设置APN的方法如下:
$ cat /dev/ttyUSB2 & //打开串口回显
$ echo AT > /dev/ttyUSB2 //发送AT返回OK说明4G模块正常通信
$ echo AT+CGDCONT=,,\"cmiot\",,> /dev/ttyUSB2 //设置APN