我是靠谱客的博主 曾经水杯,最近开发中收集的这篇文章主要介绍NB模块初始化流程1 NB模块初始化流程分析2 NB模块初始化流程代码实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 1 NB模块初始化流程分析
    • 1.1 NB模块初始化流程分析
    • 1.2 常见AT指令
  • 2 NB模块初始化流程代码实现

1 NB模块初始化流程分析

1.1 NB模块初始化流程分析

流程如下:
在这里插入图片描述

1.2 常见AT指令

在这里插入图片描述

测试日志如下:

//上电后自动输出 
[11-08 17:35:22:824]*MATREADY: 1 
[11-08 17:35:22:824]+CFUN: 1 
[11-08 17:35:23:554]+CPIN: READY 

//at 
[11-08 17:35:39:015]AT 
[11-08 17:35:39:015]OK 
[11-08 17:35:41:676]ATE1 
[11-08 17:35:41:676]OK 

//读取imei号 
[11-08 17:35:44:993]AT+GSN 
[11-08 17:35:45:015]868334033341946 
[11-08 17:35:45:015]OK 

//读取imsi号 
[11-08 17:35:48:105]AT+CIMI 
[11-08 17:35:48:117]460041677239460 
[11-08 17:35:48:117]OK 

//检查sim卡 
[11-08 17:35:49:393]AT+CPIN? 
[11-08 17:35:49:406]+CPIN: READY 
[11-08 17:35:49:406]OK 

//设置apn 
[11-08 17:35:51:101]AT+CFUN=0 
[11-08 17:35:51:771]+CPIN: NOT READY 
[11-08 17:35:51:870]OK 
[11-08 17:35:52:730]AT*MCGDEFCONT="IP","" 
[11-08 17:35:52:730]OK 
[11-08 17:35:54:440]AT+CFUN=1 
[11-08 17:35:54:762]OK 
[11-08 17:35:55:157]+CPIN: READY 

//检查网络注册 
[11-08 17:35:55:915]AT+CSQ 
[11-08 17:35:55:915]+CSQ: 0,0 
[11-08 17:35:55:915]OK 
[11-08 17:35:56:892]AT+CSQ 
[11-08 17:35:56:892]+CSQ: 0,0 
[11-08 17:35:56:892]OK 
[11-08 17:35:57:491]AT+CSQ 
[11-08 17:35:57:491]+CSQ: 17,0 
[11-08 17:35:57:491]OK 
[11-08 17:35:59:819]AT+CEREG? 
[11-08 17:35:59:832]+CEREG: 0,2 
[11-08 17:35:59:832]OK 
[11-08 17:36:00:852]AT+CEREG? 
[11-08 17:36:00:852]+CEREG: 0,1 
[11-08 17:36:00:852]OK 
[11-08 17:36:03:266]AT+CGACT? 
[11-08 17:36:03:277]+CGACT: 1,1 
[11-08 17:36:03:277]OK 
[11-08 17:36:06:251]AT+CGCONTRDP 
[11-08 17:36:06:265]+CGCONTRDP: 1,5,"CMNBIOT","100.69.240.217.255.255.255.0" 
[11-08 17:36:06:265]OK

2 NB模块初始化流程代码实现

dev_sim7020.c:

#include <string.h>
#include "main.h"
#include "at_parse.h"
#include "app_debug.h"

#include "FreeRTOS.h"
#include "task.h"


#define AT_CMD_AT           "AT"
#define AT_CMD_ATE0         "ATE0"
#define AT_CMD_GET_IMEI     "AT+GSN"    //get imei
#define AT_CMD_GET_IMSI     "AT+CIMI"   //get imsi
#define AT_CMD_SET_APN      "AT*MCGDEFCONT="IP","""   //cmnbiot    "AT*MCGDEFCONT="IP","cmnbiot""
#define AT_CMD_CFUN0        "AT+CFUN=0"
#define AT_CMD_CFUN1        "AT+CFUN=1"
#define AT_CMD_CPIN         "AT+CPIN?"
#define AT_CMD_CSQ          "AT+CSQ"
#define AT_CMD_CEREG        "AT+CEREG?"     
#define AT_CMD_CGACT        "AT+CGACT?"
#define AT_CMD_CGCONTRDP    "AT+CGCONTRDP"
#define AT_CMD_PSM_REPORT   "AT+CPSMSTATUS=1"
#define AT_CMD_PSM_ON       "AT+CPSMS=1,,,"01001010","00000000""
#define AT_CMD_PSM_OFF      "AT+CPSMS=0"
#define AT_REPORT_PSM       "+CPSMSTATUS:"

#define STATUS_IS_ON()  (!HAL_GPIO_ReadPin(M_STA_GPIO_Port,M_STA_Pin))
#define STATUS_IS_OFF() (HAL_GPIO_ReadPin(M_STA_GPIO_Port,M_STA_Pin))
#define PWRKEY_HIGH()   HAL_GPIO_WritePin(M_PWR_GPIO_Port,M_PWR_Pin,GPIO_PIN_RESET)
#define PWRKEY_LOW()    HAL_GPIO_WritePin(M_PWR_GPIO_Port,M_PWR_Pin,GPIO_PIN_SET)

#define SIM_RECV_BUF_SIZE 150

struct sim7020_control_t
{
    char recv_buf[SIM_RECV_BUF_SIZE];
    uint16_t recv_len;
}sim_ctl;


static bool sim7020_at_ok()
{
    uint16_t err=0;
    while (err<3)
    {
        err++;
        if(at_send_wait_reply(AT_CMD_AT,true,"OK","ERROR",NULL,NULL,1000)==false)continue;
        if(at_send_wait_reply(AT_CMD_ATE0,true,"OK","ERROR",NULL,NULL,1000)==false)continue;
        return true;
    }
    return false;

}

bool sim7020_pwr_on()
{
    uint16_t err=0;

    DEBUG("sim7020 pwr on");
    if(STATUS_IS_ON())return true;

    while(err<3)
    {
        err++;
        PWRKEY_HIGH();
        vTaskDelay(200);
        PWRKEY_LOW();
        vTaskDelay(1000);
        PWRKEY_HIGH();

        vTaskDelay(500);
        if(!STATUS_IS_ON())continue;
        if(sim7020_at_ok()==false)continue;

        return true;
    }
    return false;
}

bool sim7020_pwr_off()
{
    uint16_t err=0;
    DEBUG("sim7020 pwr off");
    if(STATUS_IS_OFF())return true;

    while(err<3)
    {
        err++;
        PWRKEY_HIGH();
        vTaskDelay(200);
        PWRKEY_LOW();
        vTaskDelay(1500);
        PWRKEY_HIGH();  

        vTaskDelay(500);
        if(!STATUS_IS_OFF())continue;

        return true;
    }
    return false;
}

bool sim7020_reboot()
{
    if(STATUS_IS_ON())
    {
        if(sim7020_pwr_off()==false)return false;
    }
    return sim7020_pwr_on();
}


static bool sim7020_send_atcmd(char *cmd,char *prefix,uint32_t timeout)
{
    memset(sim_ctl.recv_buf,0,SIM_RECV_BUF_SIZE);
    sim_ctl.recv_len=SIM_RECV_BUF_SIZE;
    return at_send_wait_reply  (cmd,true,
                        prefix,"ERROR",
                        sim_ctl.recv_buf,&sim_ctl.recv_len,
                        timeout);
}

static bool sim7020_get_imei()
{
    uint16_t err=0;
    while(err<3)
    {
        err++;
        vTaskDelay(100);
        if(sim7020_send_atcmd(AT_CMD_GET_IMEI,"86",1000)!=true)continue;
        return true;
    }
    return false;
}

static bool sim7020_check_sim()
{
    uint16_t err=0;
    while(err<3)
    {
        err++;
        vTaskDelay(500);
        if(sim7020_send_atcmd(AT_CMD_CPIN,"+CPIN: READY",1000)!=true)continue;
        return true;
    }
    return false; 
}

static bool sim7020_set_apn()
{
    uint16_t err=0;
    while(err<3)
    {
        err++;
        vTaskDelay(100);
        if(sim7020_send_atcmd(AT_CMD_CFUN0,"OK",1000)!=true)continue;
        vTaskDelay(100);
        if(sim7020_send_atcmd(AT_CMD_SET_APN,"OK",1000)!=true)continue;
        vTaskDelay(100);
        if(sim7020_send_atcmd(AT_CMD_CFUN1,"+CPIN: READY",1000)!=true)continue;
        return true;
    }
    return false;
}

static bool sim7020_check_net()
{
    uint16_t err=0;
    while(err<300)
    {
        err++;
        vTaskDelay(100);
        if(sim7020_send_atcmd(AT_CMD_CSQ,"+CSQ:",1000)!=true)continue;
        vTaskDelay(100);
        if(sim7020_send_atcmd(AT_CMD_CEREG,"+CEREG: 0,1",1000)!=true)continue;
        vTaskDelay(100);
        if(sim7020_send_atcmd(AT_CMD_CGACT,"+CGACT: 1,1",1000)!=true)continue;
        vTaskDelay(100);
        if(sim7020_send_atcmd(AT_CMD_CGCONTRDP,"+CGCONTRDP:",1000)!=true)continue;

        return true;
    }
    return false;

}

bool sim7020_deinit()
{
    DEBUG("sim7020 deinit");
    sim7020_pwr_off();
    at_parse_deinit();
    memset(&sim_ctl,0,sizeof(sim_ctl));
    return true;
}

bool sim7020_init()
{
    uint16_t err=0;
    DEBUG("sim7020 init");

    while(err<3)
    {
        err++;

        if(at_parse_init()!=true)continue;

        memset(&sim_ctl,0,sizeof(sim_ctl));
    
        if(sim7020_reboot()!=true)continue;

        if(sim7020_get_imei()!=true)continue;

        if(sim7020_check_sim()!=true)continue;

        if(sim7020_set_apn()!=true)continue;

        if(sim7020_check_net()!=true)continue;

        vTaskDelay(100);
        DEBUG("sim7020 init ok");
        return true;
    }

    sim7020_deinit();
    return false;

}

最后

以上就是曾经水杯为你收集整理的NB模块初始化流程1 NB模块初始化流程分析2 NB模块初始化流程代码实现的全部内容,希望文章能够帮你解决NB模块初始化流程1 NB模块初始化流程分析2 NB模块初始化流程代码实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部