IoT模组使用笔记(二):EC21、EC200指令流程、设置休眠、升级模组、切换运营商等
五、EC20、BC20等模组指令和问题
- 5.1 EC20
- 5.1.1 注册网络失败。
- 5.1.2 TCP连接指令流程:
- 5.2 BC20
- 5.2.1 上电指令流程
- 5.3 EC21-KL
- 5.3.1 休眠异常
- 5.3.2 模组软件升级
- 5.4 EC200N-CN和EC200S-EU
- 5.4.1 设置模组休眠
- 5.4.2 ping谷歌
- 5.4.3 手动切换运营商
- 5.4.3.1 运营商代码 - IMSI和QSPN
- 5.4.3.2 为什么要切换运营商
- 5.4.4 抓取TCP的log
5.1 EC20和5.2 BC20是最开始接触4G模组的使用记录,参考意义不是很大。后来新工作转做Iot,开始慢慢扩充这篇笔记。
5.1 EC20
5.1.1 注册网络失败。
如下图所示:
将APN修改为SIM卡对应的运行商,多次发送AT+QICSGP=1,1,“CTNET”,“”,“”,0指令,然后复位开发板即可。如下图所示:
5.1.2 TCP连接指令流程:
EC20模块AT命令讲解
EC20 TCP/IP指令例程
移远M26,三分钟打通TCP流程,AT指令详解
在linux端操作:
移远EC20 4G模块Linux驱动移植和测试
5.2 BC20
5.2.1 上电指令流程
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 ;
5.3 EC21-KL
5.3.1 休眠异常
遇到了两个问题:
- 第一次休眠,功耗异常,13mA,之后再次休眠6mA。
- 唤醒后不能正常响应指令。经常出现无返回,多次尝试错误后,应用程序对4G模组进行重启。查看log,也不是完全不回。第一次publish能够回复,之后QMTRECV指令开始不回复,如下:
这两个问题很有意思,正好手里有块焊接了EC25-EUX的板子,测试发现这两个问题都不会出现。那是模组问题吗? - 第一个问题,从现象看是有什么外设上电初始化没有配置好,唤醒后的配置使其恢复了正常。但是又无法解释EC25为什么正常。最终确定是因为使用rtthread,第一次睡眠,初始化线程没有来得及发送
AT+QSCLK
休眠指令。EC25可能执行较快,所以没有出现问题。通过改变进入休眠的时间解决。或者将AT+QSCLK
休眠指令放在初始化也可以,不过祖传代码嘛,还是少动为妙。 - 第二个查看模组VDD_EXT电压正常1.8V,模组正常启动了。DTR唤醒后正常拉低。在RX管脚使用示波器查看,直接用示波器解码,可以看到MCU发出了
AT+QMTRECV=0
指令。模组确实没有回复。
和移远沟通,需要抓取log。但是模组休眠后,抓log工具会检测到idle自动断开。通过修改MCU程序,空闲线程唤醒后直接while(1)原地循环,然后使用串口助手通过USB给模组发送指令,发现能够复现问题。这样在唤醒后,打开抓log工具,用串口助手发送AT指令即可。最终得到回复:判断是mqtt配置成 recv/mode 为1情况下,执行QMTRECV,模块com口死掉。是一个已知问题,通过升级模组固件解决。
5.3.2 模组软件升级
- 确认主串口。在资源管理器查看端口如下:
升级使用主串口COM26。 - 打开QFlash升级工具,选择升级文件。注意这里不要选择压缩包(是否直接选择压缩包可以和移远技术支持咨询,不同模组应该不一样的):
选择一个文件后,会自动加载所有的文件。注意文件不要有中文路径,选择正确的波特率:
滑到软件底部,选择Start即可。升级成功则忽略以下步骤,重启模组查看版本号是否一致。 - 我这里发现升级失败:
此时再查看资源管理器,只有一个端口:
这是模组进入了强制下载模式。如果这时重启模组,会恢复为初始的三个端口。但是我们再次选择COM26升级,则会显示端口不正确:
这时需要在MCU程序中,上电后使用while(1)循环,不再发送指令。将模组的BOOT管脚拉高到1.8V,我的如下图:
我这里短接R27即可。短接后重新上电模组,进入强制下载,恢复为一个端口COM27。选择COM27,继续升级。
我这里持续失败,最终确定是模组的驱动比较旧(Quectel_LTE_Windows_USB_Driver_V1.0),虽然能抓log,但升级出现了问题。更新模组驱动后(Quectel_LTE&5G_Windows_USB_Driver_V2.2.4),直接升级成功。升级成功后,发现我的MCU程序持续复位,最终定位到新的模组固件,版本号变得更长了,导致溢出。。。。
5.4 EC200N-CN和EC200S-EU
EC200N-CN是国内使用的模组,EC200S-EU是欧洲设备上使用的模组。MCU程序是通用的。
5.4.1 设置模组休眠
模组进入休眠,有三个条件:
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吧”)。
5.4.2 ping谷歌
此部分单独写成一篇:使用移远EC200N-CN模组PING谷歌。
5.4.3 手动切换运营商
5.4.3.1 运营商代码 - IMSI和QSPN
在初识NB-IoT的机卡绑定一文中提到IMSI的前5位可以识别运营商:
中国移动运营商:
46000, “CHINA MOBILE”, “CN” 中国移动
46001, “CHN-CUGSM”, “CN” 中国联通
46002, “CHINA MOBILE”, “CN” 中国移动
更多运营商名称的列表,可以点击查看:添加链接描述。
00> AT+QSPN
00> …
00> +QSPN: “CHN-UNICOM”,“UNICOM”,“”,
00> 0,“46001”…
00> …
00> OK…
00> 01-01 23:50:32 I/at.dev.ec20 tbox_tcp: e0 device currnet PLMN: 46001
5.4.3.2 为什么要切换运营商
iotbox默认自动选择运营商。在使用过程中,可能出现以下情况:
- iotbox自动选择的运营商出现网络故障;
- iotbox自动选择的运营商在车辆行驶的区域内并不支持。
出现这些情况时,iotbox就会因注册网络失败而重启4G模组。若重启后又自动选择了该运营商,则iotbox再次因注册网络失败进行重启,这样iotbox就会进入死循环。为了解决这个问题,iotbox增加手动切换运营商机制。在自动选择运营商持续注网失败一定次数后,iotbox进入手动切换运营商模式:检索当前SIM卡支持的运营商,依次进行尝试,直至注网成功。
5.4.4 抓取TCP的log
在前面硬件连接 - - 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
在程序模组初始化中添加以下三条AT指令:
IoT模组使用笔记(二):EC21、EC200指令流程、设置休眠、升级模组、切换运营商等相关推荐
- QCustomplot笔记(二)之QCustomplot 坐标轴属性设置
一.前言 记录分享楼主学习QCustomplot的过程,楼主最近查看了坐标轴的一些属性设置,于是便记录下 属性设置不一定全,也不一定都对,不喜勿喷 二.坐标轴属性类别 1.设置坐标是否显示 ui-&g ...
- Netty学习笔记(二)Netty服务端流程启动分析
先贴下在NIO和Netty里启动服务端的代码 public class NioServer { /*** 指定端口号启动服务* */public boolean startServer(int por ...
- Struts 2 的学习笔记(二) struts的配置流程和strut是2的工作原理
2019独角兽企业重金招聘Python工程师标准>>> 配置及流程 1. Web.xml中配置 <!-- struts2的核心过滤器 前端控制器 作用:接管请求. ...
- 模电学习笔记(十一)——微分电路
模电学习笔记(十一) 微分电路 微分电路就是积分电路的逆运算. 在运放电路中,有一种通用的逆运算电路方法,就是IBA反相串联阻抗Z1与反馈阻抗Zf进行位置的对调. 设计目标: 输入 输出 电源 100 ...
- 模电学习笔记(十二)——跨阻放大器
模电学习笔记(十二) 跨阻放大器 跨组运算放大器是将电流信号转换成为电压信号,电流到电压增益基于反馈电阻. 设计目标: 输入 输出 带宽 电源 0A 100uA 0V 7V 20kHz 15V -15 ...
- 基于华为巴龙MH5000-31 5G工业/商业模组开发(二)
验证华为巴龙5000基带芯片基本功能.性能测试(Ubuntu/Linux端) 5G-第五代移动通信技术(英语:5th generation mobile networks或5th generati ...
- NOIP2018提高组省一冲奖班模测训练(二)
比赛链接 NOIP2018提高组省一冲奖班模测训练(二) 今天发挥正常,昨天不在状态-- 花了很久A了第一题 第二题打了30分暴力 第三题投机取巧输出test1答案(连暴力都不知道怎么打,太弱了) 2 ...
- 域控-笔记二(域权限,域组,域管理,Kerberso 协议)
文章目录 一. 域环境搭建 1.1 添加AD功能 1.2 安装 1.3 部署 二. 如何加入域 2.1 加入域 2.2 域中主机登录 2.3 退出域 2.4 添加域用户 三. 域权限 3.1 A-G- ...
- 趣谈网络协议笔记-二(第十讲)
趣谈网络协议笔记-二(第十讲) UDP协议:因性善而简单,难免碰到"城会玩" 自勉 如果手上没有剑,我就无法保护你.如果我一直握着剑,我就无法抱紧你.--<Bleach> ...
最新文章
- mysql 写 性能,MySQL在大型,只写表上的性能
- docker搭建ssr
- 偶然发现了获取有ID的dom的一种方法
- 应运而生的web页面响应布局
- 基于java的网络爬虫框架(实现京东数据的爬取,并将插入数据库)
- php 405跳转,php采用curl访问域名返回405 method not allowed提示的解决方法
- 【一题多解】Python 字符串逆序
- Rational Rose 逆向工程(java) 常见问题二则
- hdu 3065 AC自动机模版题
- 好用的飞书版固定资产管理系统
- h3c交换机重启_h3c交换机重置命令_h3c交换机如何初始化
- 外星人入侵游戏python学习心得——创建第一个外星人在左上角
- c++写一个函数验证哥德巴赫猜想
- Windows10系统自带输入法如何切换全角/半角字符
- Python实现手写体数字图片识别+GUI界面+画板数字识别
- python的pymysql模块安装与使用
- YGG SEA 在越南成功启动
- 数据分析报告流程展现
- CUDA内存管理一文理清|参加CUDA线上训练营
- css_复合选择器_border_css层叠性与覆盖性_background_多标记构图法_行高_文本修饰属性_超链接的伪类_导航制作_Unit_4;
热门文章
- byobu命令行终端软件,实现中断远程连接后,打开终端再次获取关闭前的终端信息
- NumPy常用函数(7)-- 计算股票收益率和波动率
- php判断五子棋是否取胜,五子棋取胜方法—逼黑方走出禁手
- 2021年N1叉车司机考试题库
- css3 unset应用
- 广西梧州一女孩一年来把她每天掉的头发扎成5公分厚的马尾。
- Android 扫描器 测试(seuic) INSTALL_FAILED_MISSING_SHARED_LIBRARY
- ctfshow funnyrsa1 e与phi不互素
- 愿手下有代码,眼中有星辰
- 15个常用excel函数公式_项目上最常用的Excel函数公式大全,现在看还不晚