返回

[物联网全栈成长-第一阶段学习笔记] 物联网芯片以及 NB-IoT 常用 AT 指令

简介

本篇文章主要介绍 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
//模块返回
+CGPADDR0,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 指令操作组合

自动入网

  1. 首先通常需要重启模块,指令如下

    // 发送指令
    AT+NRB
    // 返回
    REBOOTING
    ****
    BootUnsigned
    Security B.. Verified
    Protocol A.. Verified
    Apps A... Verified
    
    REBOOT_CAUSE_APPLICATION_AT
    Neul
    OK
    
  2. 接下来查询模块射频

    // 发送指令
    AT+CFUN
    // 返回
    +CFUN:1
    

    此时返回 +CFUN:1 表示射频已经打开,如果返回 +CFUN:0 表示射频未打开,可以检查 SIM 卡有没有正确安装

  3. 假设上一步中返回射频未开启,可以执行开启射频指令

    // 发送指令
    AT+CFUN=1
    // 返回
    OK
    

    返回 OK 表示射频已打开,可以使用查询指令确认。如果设置指令返回 ERROR 表示射频已经打开或者 SIM 未正确安装。

  4. 查询模块信号强度

    // 发送指令
    AT+CSQ
    // 返回
    +CSQ:31,99
    

    +CSQ 消息格式为: +CSQ:<rssi>,<ber>,具体含义为:

    • rssi=0 表示信号指令为 -113 dBm 及以下,信号非常差
    • rssi=1 表示信号质量为 -111 dBm
    • rssi=2~30 表示信号值为 -109 dDm 到 -53 dBm
    • rssi=31 表示信号值为 -51dBm 或者更高
    • ber 字段目前未使用,恒等于 99
  5. 接下来可以查询网络是否激活

    // 发送指令
    AT+CGQTT
    // 返回
    +CGATT1
    

    返回 +CGATT:1 表示网络已激活,如果返回 +CGATT:0 表示网络功能未激活,需要重启模组进行激活`

  6. 网络功能成功激活后需要查询网络是否注册

    // 发送指令
    AT+CEREG?
    // 返回
    +CEREG:0,1
    OK
    

    返回格式为:+CEREG:<n>,<stat>,含义为:

    • <n> 是通知设置:n=0 时表示网络注册状态变化时不会主动发送 +CEREG 通知,只有用户发送查询命令时才返回;n=1 表示网络注册状态变化时会主动上报 +CEREG 通知
    • <stat> 表示网络注册状态:0 表示模块未注册到网络,1表示已经注册到网络
  7. 查询当前网络连接状态

    // 发送指令
    AT+CSCON
    // 返回
    +CSCON:0,1
    

    返回格式为:+CSCON:<n>,<mode>,含义为:

    • <n> 是通知设置:n=0 时表示网络连接后时不会主动发送 +CECON 通知,;n=1 表示会自动上报
    • <mode> 表示当前网络连接状态:0 表示处于 IDLE 状态(此时只要发送数据或重启设备可以变成已连接状态),1表示已连接状态

手动入网

接下来介绍手动入网相关操作

  1. 首先需要关闭自动入网

    // 发送指令
    AT+NCONFIG=AUTOCONNECTFALSE
    // 返回
    OK
    
  2. 设置后需要重启设备使设置生效

    // 发送指令
    AT+NRB
    // 返回
    REBOOTING
    ****
    BootUnsigned
    Security B.. Verified
    Protocol A.. Verified
    Apps A... Verified
    
    REBOOT_CAUSE_APPLICATION_AT
    Neul
    OK
    
  3. 接下来设置频段

    // 发送指令
    AT+NBAND=5
    // 返回
    OK
    

    上述命令中 5 表示电信的 Band5 频段,移动和联通采用 Band8 频段,具体参考当地运营商提供频段

  4. 开启射频功能

    // 发送指令
    AT+CFUN=1 // 开启模块射频功能
    //返回
    OK
    // 发送
    AT+CFUN? // 查询模块射频开启状态
    // 返回
    +CFUN:1 // 射频功能已打开成功
    
  5. 附着网络

    // 发送指令
    AT+CGATT=1
    // 返回
    OK
    
  6. 查询模块信号强度

    // 发送指令
    AT+CSQ
    // 返回
    +CSQ:31,99
    

    用法同上。

  7. 接下来可以查询网络是否激活:

    // 发送指令
    AT+CGQTT
    // 返回
    +CGATT1
    

    返回 +CGATT:1 表示网络已激活,如果返回 +CGATT:0 表示网络功能未激活,需要重启模组进行激活

  8. 网络功能成功激活后需要查询网络是否注册:

    // 发送指令
    AT+CEREG?
    // 返回
    +CEREG:0,1
    OK
    
  9. 查询当前网络连接状态

    // 发送指令
    AT+CSCON
    // 返回
    +CSCON:0,1
    
Built with Hugo
Theme Stack designed by Jimmy