简介
本篇文章主要介绍 NB-IoT 中的常用的 AT 指令以及入网相关操作。
Boudica 芯片整体框架介绍
Boudica 芯片包含 3 个 CPU,分别为安全核(S 核,Security Processor)、协议核(C 核、Protocol Processor)、应用核(A 核、Application Processor)。三个核之间采用共享内存方式实现核间通信。三个核的功能分别是:
- S 核:负责启动 A 核和 C 核,拥有擦除和写内置 Flash 的权限;
- C 核:目前运行 FreeRTOS(后续会切换为 LiteOS),主要包含 NB-IoT 以及 LWIP 协议栈
- A 核:当前运行 FreeRTOS(后续会切换为 LiteOS),主要负责 AT 命令解析,外置 Flash 读写以及其他上层应用、协议(LWM2M, FOTA)等。
NB-IoT 常用 AT 指令
通常来说,芯片厂商会提供 AT 指令。而模组厂商会在此基础上进行包装,但是大部分情况是大同小异的。这里以移远通信的 BC35-G 模组为例进行常用 NB-IoT 3GPP 相关指令和常见用法。
AT 命令是用于控制终端设备(Terminal Equipment, TE)和 MT (Mobile Terminal) 之间交互的规则。通常 TE 作为用户发送 AT 指令,MT 作为 网络平台接收 AT 指令并返回 response。
AT 命令分类
常用的 AT 命令可以分为一下四类:
- 设置命令:
=XX
用来设置 AT 命令的属性 - 测试命令:
=?
用来显示 AT 命令设置的合法参数值有哪些 - 查询命令:
?
用来查询当前 AT 命令设置的属性值 - 执行命令: 执行 AT 命令,可以添加查询(不是必须)
以 CMEE(报告移动设备的设备错误) 和 CGSN(获得 GSM 模块的 IMEI) 为例,上述几种命令用法如下:
- 测试指令:
AT+CMEE=?
- 显示CMEE
的合法参数值 - 查询指令:
AT+CMEE?
- 查询当前CMEE
的属性值 - 含参数的执行命令(包含设置命令):
AT + CMEE=0
- 执行将CMEE
设为0
的操作(即关闭报告终端的错误) - 不含参数的执行命令:
AT+CGSN
执行CGSN
获得设备的 IMEI 号
NB-IoT 3GPP 相关指令
下面介绍几个和 NB-IoT 3GPP 相关的 AT 指令。
AT+CGSN
:用于返回设备的唯一标识号。物联网平台通常采用 IMEI 来区分不同设备。通常移动设备的 IMEI 为 15位,手机为 13 位。使用方式如下:
发送指令:
AT+CGSN=1
模块返回:
+CGSN:868744036640526
OK
AT+CEREG
:用于查询终端 EPS 网络注册状态,通过不同设置参数可以让设备上报 EPS 注册状态、位置区码、小区 ID等信息,通常情况只需要设置为自动上报 EPS 注册状态。使用方式如下:
发送指令(设置1表示模块网络注册状态自动上报)
AT+CEREG=1
模块返回
OK
设置成功后,当网络注册状态信息有变化时,会主动上报给用户终端,如:
+CEREG:1,1
OK
上述返回信息中第一个 1 为 CEREG
设置参数,第二个 值表示当前网络状态,如: 1 表示已经注册上网络,2 表示未注册,当终端目前正试图注册或搜寻网络。
AT+CGPADDR
:用于查询核心网给终端分配的 IP 地址,该 IP 地址为动态 IP,每次设备接入网络后核心网都会为其随机分配一个 IP 作为内部地址。设备会通过 NAT(Network Address Translation) 方式访问外部网络。方法为:对上行数据, NAT 负责将 UE 的的内部地址转换为外部地址(公网地址);对下行数据,NAT 负责将外部地址替换为 UE 的内部地址。所以服务器端不能通过核心网给模块的动态 ID 来与模块进行通信。该命令使用方式如下:
//发送指令
AT+CGPADDR=0
//模块返回
+CGPADDR:0,10.176.69.232
OK
AT+CMEE
:用于设置终端错误报告,可以让终端在 AT 执行错误时返回错误编码。使用方法如下:
//发送指令
AT+CMEE=1
//返回
OK
AT+CFUN
:用于设置和查询模块的射频功能是否开启,使用方法如下:
//发送指令
AT+CFUN=0 // 关闭射频功能
//返回
OK
// 发送指令
AT+CFUN=1 // 开启模块射频功能
//返回
OK
// 发送
AT+CFUN? // 查询模块射频开启状态
// 返回
+CFUN:1 // 射频功能已打开成功
NB-IoT 模组入网
接下来介绍和 NB-IoT 入网相关的 AT 指令操作组合
自动入网
-
首先通常需要重启模块,指令如下:
// 发送指令 AT+NRB // 返回 REBOOTING **** Boot:Unsigned Security B.. Verified Protocol A.. Verified Apps A... Verified REBOOT_CAUSE_APPLICATION_AT Neul OK
-
接下来查询模块射频:
// 发送指令 AT+CFUN? // 返回 +CFUN:1
此时返回
+CFUN:1
表示射频已经打开,如果返回+CFUN:0
表示射频未打开,可以检查 SIM 卡有没有正确安装 -
假设上一步中返回射频未开启,可以执行开启射频指令:
// 发送指令 AT+CFUN=1 // 返回 OK
返回 OK 表示射频已打开,可以使用查询指令确认。如果设置指令返回 ERROR 表示射频已经打开或者 SIM 未正确安装。
-
查询模块信号强度:
// 发送指令 AT+CSQ // 返回 +CSQ:31,99
+CSQ
消息格式为:+CSQ:<rssi>,<ber>
,具体含义为:rssi=0
表示信号指令为 -113 dBm 及以下,信号非常差rssi=1
表示信号质量为 -111 dBmrssi=2~30
表示信号值为 -109 dDm 到 -53 dBmrssi=31
表示信号值为 -51dBm 或者更高ber
字段目前未使用,恒等于 99
-
接下来可以查询网络是否激活:
// 发送指令 AT+CGQTT? // 返回 +CGATT:1
返回
+CGATT:1
表示网络已激活,如果返回+CGATT:0
表示网络功能未激活,需要重启模组进行激活` -
网络功能成功激活后需要查询网络是否注册:
// 发送指令 AT+CEREG? // 返回 +CEREG:0,1 OK
返回格式为:
+CEREG:<n>,<stat>
,含义为:<n>
是通知设置:n=0
时表示网络注册状态变化时不会主动发送+CEREG
通知,只有用户发送查询命令时才返回;n=1
表示网络注册状态变化时会主动上报+CEREG
通知<stat>
表示网络注册状态:0 表示模块未注册到网络,1表示已经注册到网络
-
查询当前网络连接状态:
// 发送指令 AT+CSCON? // 返回 +CSCON:0,1
返回格式为:
+CSCON:<n>,<mode>
,含义为:<n>
是通知设置:n=0
时表示网络连接后时不会主动发送+CECON
通知,;n=1
表示会自动上报<mode>
表示当前网络连接状态:0 表示处于 IDLE 状态(此时只要发送数据或重启设备可以变成已连接状态),1表示已连接状态
手动入网
接下来介绍手动入网相关操作
-
首先需要关闭自动入网:
// 发送指令 AT+NCONFIG=AUTOCONNECT,FALSE // 返回 OK
-
设置后需要重启设备使设置生效:
// 发送指令 AT+NRB // 返回 REBOOTING **** Boot:Unsigned Security B.. Verified Protocol A.. Verified Apps A... Verified REBOOT_CAUSE_APPLICATION_AT Neul OK
-
接下来设置频段:
// 发送指令 AT+NBAND=5 // 返回 OK
上述命令中 5 表示电信的 Band5 频段,移动和联通采用 Band8 频段,具体参考当地运营商提供频段
-
开启射频功能:
// 发送指令 AT+CFUN=1 // 开启模块射频功能 //返回 OK // 发送 AT+CFUN? // 查询模块射频开启状态 // 返回 +CFUN:1 // 射频功能已打开成功
-
附着网络:
// 发送指令 AT+CGATT=1 // 返回 OK
-
查询模块信号强度
// 发送指令 AT+CSQ // 返回 +CSQ:31,99
用法同上。
-
接下来可以查询网络是否激活:
// 发送指令 AT+CGQTT? // 返回 +CGATT:1
返回
+CGATT:1
表示网络已激活,如果返回+CGATT:0
表示网络功能未激活,需要重启模组进行激活 -
网络功能成功激活后需要查询网络是否注册:
// 发送指令 AT+CEREG? // 返回 +CEREG:0,1 OK
-
查询当前网络连接状态:
// 发送指令 AT+CSCON? // 返回 +CSCON:0,1