通过AT命令使用4G模块通讯软件设计

一、系统设计约束

1、使用4G模块提供的AT命令集

2、AT指令回应规则:回应以0X0D 0X0A作为AT命名回应的结束

3、设计原则

       AT命令应答一对一,不可以有交叉,AT+CGREG AT命令是检查是否注册上GPRS或4G网络,需要检查返回的状态,如果没有正常返回以注册的网络状态,直接使用后续的AT命令会导致通讯出现连接不通的情况。

       采用状态机机制

       使用异步操作方式,需要使用消息机制

4、发送和接收分离

    针对4G的发送和接收,使用命令和数据分离的方式进行;SEND数据使用指定长度发送的方式(AT+QISEND=XXX),RECEIVE数据使用通过命令提取数据的方式(AT+QIRD=0,1,0,XXXX);通过此方式的选择保证数据和命令在串口输入和输出上不会出现命令和数据混杂的情况,简化程序设计。

二、流程图

通过AT命令使用4G模块通讯软件设计_第1张图片

 

三、状态机设计

 

       状态机分为4G模块上电过程的状态部分,4G通讯过程状态部分;由于4G模块上电过程较多都需要对每一条AT命令的回应进行处理,所以分出多个上电过程的状态以满足 4G上电过程的要求;

       第二个是GSM通讯过程状态,主要是IP 通讯过程中OPEN, CLOSE, SEND, RECEIVE四个过程,以此来定义状态;

       AT 命令状态

 

       STATUS_WAIT_CMD = 100,

       STATUS_HW_INIT_CMD,

       STATUS_HW_END_CMD,

       STATUS_AT_SYNC_CMD,

       STATUS_AT_E0_CMD,

       STATUS_AT_IPR_CMD,

      。。。

       

       STATUS_AT_OPEN_CMD,

       STATUS_AT_SEND_CMD,

           

       STATUS_AT_RECEIVE_CMD,

       STATUS_AT_CLOSE_CMD,

       STATUS_AT_CLEAR_CMD,

 

        回应状态

 

 

       STATUS_AT_SYNC =0,

       STATUS_AT_E0,

       STATUS_AT_IPR,

      

       。。。

       STATUS_AT_DISCONNECT_IDLE,

       STATUS_AT_CONNECT_IDLE,

      

       STATUS_AT_OPEN,

       STATUS_AT_SEND,

       STATUS_AT_RECEIVE,

       STATUS_AT_CLOSE,

 

       STATUS_AT_PARSE,

      

       STATUS_AT_CLEAR,

 

四、主处理任务

static void 4G_Task(void)

 

{

     

       while(1)

       {

              ATCMD 处理 4G_AtSendCmdProc(procstatus);

              SELECT 等待接口命令和AT回馈

              有接口消息命令,进行处理4G_MsgProc(pipebuffer, lenpipecount, &lenpipecount);

              对应CMD设置;

              有AT回馈,进行处理 procstatus =4G_DataProc(databuffer, lendatacount, &lendatacount, newprocstatus, 0);

       }

}

 

如何解决制定项目计划的难题     https://mp.csdn.net/postedit/85099154

你可能感兴趣的:(通过AT命令使用4G模块通讯软件设计)