本文主要记录下移远4G模组的使用过程,对以后遇到问题,能提供个参考。
之前粗略接触过一点点,记得很混乱,也不完整,就啥也不是。。最近转做IOT啦,随着使用逐步填充吧。如果某一节内容过多,就单独写成一篇,本文中给出跳转链接,这样阅读和查找都方便。
另一篇笔记:4G模块使用记录SIMCOM7070。
这一小节简单记录一下模组与MCU相连各管脚的作用。在模组的硬件手册中给出了硬件连接方式,以《Quectel_EC25_Hardware_Design_V2.2.pdf》为例,在3.5.1.1节给出串口连接方式:
串口和GND不必说,主要看下剩余三个管脚。这三个管脚主要与模组的休眠有关,如果不需要休眠,可以不连接这三个管脚。
在手册3.3节对每个管脚进行了描述说明。下面是截取了RI、DTR、AP_READY三个管脚的物理特性描述:
管脚的具体使用,需要查看手册中休眠功能的相关描述(3.5.1.1节)。简单来说就是:
RI:响铃信号,模组进入休眠后,收到数据,会通过RI来唤醒MCU。
DTR:控制模组进入休眠。
AP_READY:MCU通过此管脚通知模组,自己已经准备好接收信号。避免MCU还没准备好,模组就上报URC,导致处理错误。
除了这三个管脚,实际使用中还会连接PWRKEY到MCU,完成对模组的上电。
RESET_N引脚可用于重置模块。通过将reset_N驱动至低电平电压,并在150ms至460ms之间的时间内,可重置模块。
推荐的电路类似于PWRKEY控制电路。开漏/收集器驱动程序或按钮可用于控制RESET_N。
USB更多的还是作为调试手段,焊接一根USB线,通过串口助手发送AT指令,验证流程。
先贴一张USB的线序定义(USB中的线序和意义),省了每次焊接都要百度找图。。。
《Quectel_EC25_Hardware_Design_V2.2.pdf》中给出了模组的USB接口定义:
一根USB线剪断漏出四种颜色的线,红色连接USB_VBUS,白色连接USB_DM,绿色连接USB_DP,黑色连接GND即可。
模组上电后,把USB连接到笔记本上,就可以看到几个感叹号的设备,正是因为没有安装驱动。注意根据模组的平台使用对应的驱动安装程序
Quectel_LTE&5G_Windows_USB_Driver_V2.2.4.zip是高通平台,如EC25。Quectel_ASR_Series_UMTS<E_Windows_USB_Driver_Customer_V1.0.8是ASR平台,如EC200。
模组使用过程中,可能遇到一些问题,需要移远帮忙一起分析。这时就需要抓取模组的log,提供给移远。
在《Qwinlog抓取注意事项.docx》一文中有提到,需要发送AT+QCFG=”DBGCTL”,0
来开启模组的log。可以通过修改MCU程序发送,第一次执行返回OK,重上电再发送,会返回error(该指令掉电保存)。这需要MCU不判断返回,否则无法往下执行程序。或者修改MCU程序下载,执行返回OK后,注释掉该指令,再次下载一遍。不过反正抓log也需要USB,推荐还是直接用
USB发送。
注:
AT+QCFG=”DBGCTL”,0
,会返回不支持:项目中会用到不同的模组,还有不同的SIM卡。不考虑价格、供货等选型因素,从开发角度看,其中的区别是什么呢?
这里描述可能有误,随着理解加深再逐渐完善。
面向市场不同。比如EC200N-CN是国内,EC200S-EU是欧洲,EC25是北美。这是因为模组支持的频段不同,但在国内都可以进行测试。需要注意的是,EC25需要插入电信卡,因为北美在国内只有一个频段能够使用,仅电信是支持的。
硬件平台不同。比如EC200N-CN是ASR平台,EC25是高通平台。一些指令比如AT+QCFG
,只能在高通平台使用,ASR平台则不支持。但这种区分平台的指令相对很少,同一家的不同模组,AT指令整体上是一致的。此外不同平台,USB驱动也是不同。这一点在上面有提到。
某一模组下记录的问题,多数情况下也适用于其他模组。这里只是为了严谨些,在记录问题时,以模组型号进行了归类。
使用模组测试PING谷歌的时候就想,为什么国内可以连接谷歌呢?
这是因为使用的是漫游卡。我们平时的手机卡是本地卡,不能上谷歌。
模组初始化时通常需要设置APN。那么APN是什么作用呢?
APN错误则无法联网 – 使用何种SIM卡决定了APN是什么
本地卡通常可以不设置APN 。
如下图所示:
将APN修改为SIM卡对应的运行商,多次发送AT+QICSGP=1,1,“CTNET”,“”,“”,0指令,然后复位开发板即可。如下图所示:
EC20模块AT命令讲解
EC20 TCP/IP指令例程
移远M26,三分钟打通TCP流程,AT指令详解
在linux端操作:
移远EC20 4G模块Linux驱动移植和测试
AT\r\n
AT+QSCLK=0\r\n ;禁用休眠模式
AT+CPIN?\r\n ;检查是否需要密码
AT+CFUN=0\r\n ;设置为最小功能
AT+QBAND=0\r\n ;设置为所有工作频段
AT+QCSEARFCN\r\n;清除 NB-IoT 存储的 EARFCN 列表
AT+CFUN=1\r\n ;设置为全功能
AT+CGATT=1\r\n ;附着网络,要多等一会
AT+CSQ\r\n ;上报信号质量
AT+CEREG?\r\n ;查询网络注册状态
AT+CGATT?\r\n ;查询
AT+CGPADDR?\r\n ;
遇到了两个问题:
AT+QSCLK
休眠指令。EC25可能执行较快,所以没有出现问题。通过改变进入休眠的时间解决。或者将AT+QSCLK
休眠指令放在初始化也可以,不过祖传代码嘛,还是少动为妙。AT+QMTRECV=0
指令。模组确实没有回复。EC200N-CN是国内使用的模组,EC200S-EU是欧洲设备上使用的模组。MCU程序是通用的。
模组进入休眠,有三个条件:
AT+QSCLK=1 //不必每次发送,初始化一次就可以
network_apready_ctrl(0); /* 通知模组不要送出数据 */
network_dtr_ctrl(1); /* 拉高DTR进入4G的低功耗 */
确定模组进入休眠状态?
DTR拉高之后串口不通,另外耗流降到个位数mA。模组进休眠很快的,预估2s左右。
也可以通过测量模组管脚电平,比如EC25,结合以下指令,测量管脚号3:
MCU主动唤醒模组
休眠后,MCU主动发送数据,需要先唤醒4G模组:
network_apready_ctrl(1); /* 通知模组可以送出数据 */
network_dtr_ctrl(0); /* 拉低DTR退出4G的低功耗 */
这时不要立即发送数据,因为4G模组退出低功耗也是需要时间的。可以持续发送AT,直到返回OK。或者直接增加延时(“先留1S吧”)。
此部分单独写成一篇:使用移远EC200N-CN模组PING谷歌。
在前面硬件连接 - - USB中提到了抓取模组log。不同平台的模组可能稍有区别。TCP连接过程中,模组上报+QIURC: "closed",0..
导致异常。抓取模组log,从模组端分析下原因。
- 抓取LOG时需要进行AT+CFUN=0,AT+CFUN=1,操作,记录完整通信流程日志。
- 为了抓取TCP/IP数据包,记录LOG日志前,执行如下AT指令操作:
IPv4 发送指令at+qdbgcfg=“iptrace”,0,20
IPv6 发送指令at+qdbgcfg=“iptrace”,1,20