概述
文章目录
- 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模块初始化流程代码实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复