简介
本篇文章主要介绍 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 位。使用方式如下:
1 | 发送指令: |
AT+CEREG
:用于查询终端 EPS 网络注册状态,通过不同设置参数可以让设备上报 EPS 注册状态、位置区码、小区 ID等信息,通常情况只需要设置为自动上报 EPS 注册状态。使用方式如下:
1 | 发送指令(设置1表示模块网络注册状态自动上报) |
上述返回信息中第一个 1 为 CEREG
设置参数,第二个 值表示当前网络状态,如: 1 表示已经注册上网络,2 表示未注册,当终端目前正试图注册或搜寻网络。
AT+CGPADDR
:用于查询核心网给终端分配的 IP 地址,该 IP 地址为动态 IP,每次设备接入网络后核心网都会为其随机分配一个 IP 作为内部地址。设备会通过 NAT(Network Address Translation) 方式访问外部网络。方法为:对上行数据, NAT 负责将 UE 的的内部地址转换为外部地址(公网地址);对下行数据,NAT 负责将外部地址替换为 UE 的内部地址。所以服务器端不能通过核心网给模块的动态 ID 来与模块进行通信。该命令使用方式如下:
1 | //发送指令 |
AT+CMEE
:用于设置终端错误报告,可以让终端在 AT 执行错误时返回错误编码。使用方法如下:
1 | //发送指令 |
AT+CFUN
:用于设置和查询模块的射频功能是否开启,使用方法如下:
1 | //发送指令 |
NB-IoT 模组入网
接下来介绍和 NB-IoT 入网相关的 AT 指令操作组合
自动入网
首先通常需要重启模块,指令如下:
1
2
3
4
5
6
7
8
9
10
11
12
13// 发送指令
AT+NRB
// 返回
REBOOTING
****
Boot:Unsigned
Security B.. Verified
Protocol A.. Verified
Apps A... Verified
REBOOT_CAUSE_APPLICATION_AT
Neul
OK接下来查询模块射频:
1
2
3
4// 发送指令
AT+CFUN?
// 返回
+CFUN:1此时返回
+CFUN:1
表示射频已经打开,如果返回+CFUN:0
表示射频未打开,可以检查 SIM 卡有没有正确安装假设上一步中返回射频未开启,可以执行开启射频指令:
1
2
3
4// 发送指令
AT+CFUN=1
// 返回
OK返回 OK 表示射频已打开,可以使用查询指令确认。如果设置指令返回 ERROR 表示射频已经打开或者 SIM 未正确安装。
查询模块信号强度:
1
2
3
4// 发送指令
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
接下来可以查询网络是否激活:
1
2
3
4// 发送指令
AT+CGQTT?
// 返回
+CGATT:1返回
+CGATT:1
表示网络已激活,如果返回+CGATT:0
表示网络功能未激活,需要重启模组进行激活`网络功能成功激活后需要查询网络是否注册:
1
2
3
4
5// 发送指令
AT+CEREG?
// 返回
+CEREG:0,1
OK返回格式为:
+CEREG:<n>,<stat>
,含义为:<n>
是通知设置:n=0
时表示网络注册状态变化时不会主动发送+CEREG
通知,只有用户发送查询命令时才返回;n=1
表示网络注册状态变化时会主动上报+CEREG
通知<stat>
表示网络注册状态:0 表示模块未注册到网络,1表示已经注册到网络
查询当前网络连接状态:
1
2
3
4// 发送指令
AT+CSCON?
// 返回
+CSCON:0,1返回格式为:
+CSCON:<n>,<mode>
,含义为:<n>
是通知设置:n=0
时表示网络连接后时不会主动发送+CECON
通知,;n=1
表示会自动上报<mode>
表示当前网络连接状态:0 表示处于 IDLE 状态(此时只要发送数据或重启设备可以变成已连接状态),1表示已连接状态
手动入网
接下来介绍手动入网相关操作
首先需要关闭自动入网:
1
2
3
4// 发送指令
AT+NCONFIG=AUTOCONNECT,FALSE
// 返回
OK设置后需要重启设备使设置生效:
1
2
3
4
5
6
7
8
9
10
11
12
13// 发送指令
AT+NRB
// 返回
REBOOTING
****
Boot:Unsigned
Security B.. Verified
Protocol A.. Verified
Apps A... Verified
REBOOT_CAUSE_APPLICATION_AT
Neul
OK接下来设置频段:
1
2
3
4// 发送指令
AT+NBAND=5
// 返回
OK上述命令中 5 表示电信的 Band5 频段,移动和联通采用 Band8 频段,具体参考当地运营商提供频段
开启射频功能:
1
2
3
4
5
6
7
8// 发送指令
AT+CFUN=1 // 开启模块射频功能
//返回
OK
// 发送
AT+CFUN? // 查询模块射频开启状态
// 返回
+CFUN:1 // 射频功能已打开成功附着网络:
1
2
3
4// 发送指令
AT+CGATT=1
// 返回
OK查询模块信号强度
1
2
3
4// 发送指令
AT+CSQ
// 返回
+CSQ:31,99用法同上。
接下来可以查询网络是否激活:
1
2
3
4// 发送指令
AT+CGQTT?
// 返回
+CGATT:1返回
+CGATT:1
表示网络已激活,如果返回+CGATT:0
表示网络功能未激活,需要重启模组进行激活网络功能成功激活后需要查询网络是否注册:
1
2
3
4
5// 发送指令
AT+CEREG?
// 返回
+CEREG:0,1
OK查询当前网络连接状态:
1
2
3
4// 发送指令
AT+CSCON?
// 返回
+CSCON:0,1