EC20模块内置协议栈的开发笔记

本文主要记录如何通过UART接口发送AT指令进行网络连接。

前言

EC20是4G全网通模块。
从手册上看类似的模块应该还有EG9x和EM05
 

硬件

硬件上使用一路UART接口与模块通信,UART接口默认使用115200波特率。
模块上电就会启动,可以通过拉低RESET管脚对模块进行复位操作。

软件

AT命令的格式:
发送方是以AT开头0x0D结尾的字符串,格式比较统一。
模块响应是以0x0D,0x0A结尾,但开头字符是没有统一的格式,有的指令响应是以+开头,有的又没有。

 

AT指令软件初始化流程仅供参考:

第1步:等待模块就绪
        由于模块上电就会启动,启动时间大约10秒。所以主机最好延时10秒再循环发送AT,等待模块响应OK,表示模块通信就绪了。如果发送了多次都没有响应,则可以给模块来一个复位信号。再重复上面的操作。

第2步:基本参数设置
        2.1 发送ATE0,关闭指令回显。
        如果不关闭回显,主机发什么,模块就会原样回复,适合于在终端软件里人工发送命令,可以看到输入指令。
但是我们做产品是用程序去发指令,指令回显不利于写代码解析响应数据,所以关掉为好。
        2.2 发送AT+CREG=0,取消注册状态主动上报
        注册状态通过AT+CREG?查询就行了,可以不用主动上报。
        2.3 发送AT+CMEE=2,设置错误反馈方式
        设置为0所有的错误都会返回ERROR.
        设置为2某些指令错误会返回+CME ERROR:给出详细的错误信息
        2.4 发送AT+QCFG="nwscanmode",0设置模块搜网模式
        通过这个指令可以锁定4G或2G网络。
        具体的取值定义可以看手册:

                             

第3步:模块识别
        主机发送ATI或者AT+GMM,可以得到模块型号。
        发送ATI,还可以获取模块固件版本号信息。

第4步:检测SIM卡
        主机发送AT+CPIN?,可以得到SIM卡状态。
        这条指令很好解析,响应是格式是+CPIN: <code>
        检测到接收的内容是+CPIN开头,就可以确定这是指令应答,而不是模块主动上报的干扰数据。
        当<code>为READY时表示SIM卡也就绪了,可以进行下一步操作了。
        当<code>为其它状态时,看手册吧,反正是不正常的状态。

        发送AT+CIMI可以得到IMSI信息,从号码的前5位可以判断这张卡是哪家运营商,比如46000是中国移动,46001是中国联通。
        

第5步:等待注册网络
        主机发送AT+CREG?
        模块响应+CREG:<n>,<stat>
        当stat的值为1或者5时,表示注册成功。
        可以发送AT+COPS?查询当前注册的是哪家运营商
        可以发送AT+CSQ查询信号强度1-31,31表示信号最强

第6步:激活GPRS数据连接
        主机发送AT+QICSGP=1,1,<apn>,<user>,<pass>设置APN接入点。
        模块响应:OK
        主机发送AT+QIACT=1激活GPRS数据连接。
        模块响应:OK

第7步:其它信息
        发送AT+QIACT?查询当前IP地址。
        发送AT+QNWINFO查询当前网络参数。

        至此模块的网络初始化完成了。
        可以进行网络通信了。

第8步:连接远程服务器
        发送AT+QIOPEN=1,<id>,"TCP",<host>,<port>,0,1
        <id>是通道号码,模块支持1-4通道,可以理解为socket句柄。
        <host>可以是域名也可以是IP地址。
        <port>是服务器端口。
       最后的参数1表示使用Direct Push Mode。此模式模块会将接收数据主动上报过来。
       模块响应:OK
       模块响应:+QIOPEN: <id>,<sta>
       响应的<sta>是连接状态,0表示连接成功,非0表示连接失败,手册有详细错误代码。

这里要注意:
        模块是先返回应答OK,然后再返回连接状态。
        如果网络不好模块会很过长时间才返回连接状态。
        在模块返回连接状态之前,主机可以发送AT+QICLOSE=<id>提前结束连接,
        此时模块会先返回OK,再返回+QIOPEN: <id>,567

第9步:发送数据
        发送AT+QISENDEX=<id>,<data>
        <id>是通道号码
        <data>是数据内容,用双引号包含的HEX编码。
        发完这条命令最多支持发送256字节的数据,超过256字节,需要多次发送此AT指令。
        模块响应:SEND OK

第10步:接收数据
        当模块收到远程服务器发送的数据时会主动上报(Direct Push Mode)。
        +QIURC: "recv",<id>,<size><CR><LF><data>
        <id>是通道号码
        <size>是数据长度
        <data>是接收数据(原始二进制数据)

第11步:关闭连接
        如果是服务器发起的关闭连接,模块会主动上报:
        +QIURC: "closed",<id>
        如果是模块发起关闭连接,要向模块发送:AT+QICLOSE=<id>
        模块响应:OK


————————————————
版权声明:本文为CSDN博主「星沉地动」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq446252221/article/details/102801586


https://blog.csdn.net/qq446252221/article/details/102801586?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-39.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-39.nonecase

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值