小言_互联网的博客

单片机和4G模块通信总结(EC20)

189人阅读  评论(0)

第一代数据汇集单元基本开发完毕,运行也有一年了,做下总结吧,希望能够给大家提供帮助。

4G模块选择的是移远的EC20,通过串口和单片机交互。其实是什么型号并不重要,大体的流程

和注意事项基本都一样。

一、硬件

首先4G模块本身功耗很高,尤其是4G模块刚上电开机瞬间,会有一个大的电流脉冲,这里我们

选择的芯片本身参数符合指标,但是实际使用时候,发现有一些模块损坏问题,现场反馈是后台

没有数据,查问题发现是MCU不断在重启,在查发现是4G模块重启导致MCU复位,再分析是4G

电源貌似处于一种震荡状态。查看正常4G电源启动波形,发现有一个电流脉冲,电压有个起伏,

硬件工程师建议是换取更大电流的IC芯片,我是在软件上把每次连接关闭4G电源流程去掉,减少

4G电源冲击,现场设备升级软件测试半年,没有发现问题

二、软件

4G模块本身的AT指令不复杂,我采用消息地图(请看AT指令的一种解析想法)方案。

消息地图:


  
  1. const static msg_t c_tMSGMap[] = {
  2. { "ATE0\r\n", lte_4g_protocol_default_send},
  3. { "ATE0\r\n", lte_4g_protocol_default_send},
  4. { "ATE0\r\n", lte_4g_protocol_default_send},
  5. { "ATE0\r\n", lte_4g_protocol_default_send},
  6. { "AT+CPIN?\r\n", lte_4g_protocol_CPIN},
  7. { "AT+CSQ\r\n", lte_4g_protocol_CSQ},
  8. { "AT+CREG?\r\n", lte_4g_protocol_CREG},
  9. { "AT+CGREG?\r\n", lte_4g_protocol_CGREG},
  10. { "AT$MYNETCON", lte_4g_protocol_MYNETCON}, //设置APN
  11. { "AT$MYNETCON1", lte_4g_protocol_MYNETCON1}, //设置用户名和密码
  12. { "AT$MYNETACT=0,0\r\n", lte_4g_protocol_MYNETACT}, //去激活
  13. { "AT$MYNETACT=0,1\r\n", lte_4g_protocol_default_send}, //激活
  14. { "AT$MYNETACT?\r\n", lte_4g_protocol_default_send}, //是否激活成功
  15. { "AT$MYNETSRV", lte_4g_protocol_MYNETSRV}, //配置服务器IP和端口号
  16. { "AT$MYNETCLOSE=0\r\n", lte_4g_protocol_MYNETCLOSE}, //关闭socket
  17. { "AT$MYNETOPEN=0\r\n", lte_4g_protocol_default_send}, //创建socket
  18. };

2.1AT执行逻辑

每个AT指令执行成功,则继续下一条,如果本条AT指令执行失败,则重复执行,最多执行10次,

如果10全部失败,则本轮结束,从第一条指令开始执行,如果5轮全部失败,则重新执行4G模块

硬件初始化流程(电源复位(可跳过),4G模块复位,开机),然后继续执行AT指令;

创建完成socket,则整个流程结束。

2.2收发逻辑

由于4G模块有收和发流程,在进行接收流程时候不能进行发送流程;在进行发送流程时候,不能

进行接收流程。否则4G模块不能收和发(实际测试发现此现象)。

2.2.1发送流程

 

历程:(发送流程不可打断)

MCU->4G:AT$MYNETWRITE=0,10 //向0 号Socket 发送10 字节数据

4G->MCU:$MYNETWRITE: 0,10

MCU->4G:123456789

4G->MCU:OK //数据发送成功

注意:发送数据为ASCII码,HEX变成ASCII,长度要增加一倍。

2.2.2接收流程

数据到来,主动上报模式:(接收流程不可打断)

4G->MCU:$MYURCREAD: 0

MCU->4G:AT$MYNETREAD=0,1460

4G->MCU:$MYNETREAD: 0,10 //有10 字节数据
                 1234567890
                  OK  //接收数据成功

注意:接收数据为ASCII码,ASCII变成HEX,长度要减少一倍。

三、问题

1、现象4G模块不断重启

分析原因,是MCU主动发起4G重启流程,在分析,发现服务器不回复数据,导致登入服务器失败,

但是测试服务器,发现服务器没有问题。把4G断电,重新复现现象,分析Log发现,4G模块在登入

服务器后,一直再往服务器发送数据(下面传感器数据量太频繁),而服务器发给4G模块后,4G

模块并没有报告$MYURCREAD(我自己做的定时read任务也没有起作用,由于一直在发送忙),

导致4G模块接收缓存溢出(模块复位也不起作用),解决方案如下:

(1)和服务器通信改问答模式;

(2)强制定时读取4G模块数据(注意数据溢出,如果处理不好,很大概率会导致4G模块接收溢出)。


转载:https://blog.csdn.net/wuhenyouyuyouyu/article/details/116779258
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场