Skip to content

NB-IoT 技术详解

NB-IoT 协议栈

物理层

NB-IoT 物理层基于 LTE,但做了大量简化:

下行(基站→终端):OFDMA
  子载波间隔:15kHz(与LTE相同)
  带宽:180kHz(1个LTE RB)
  调制:QPSK(最高)

上行(终端→基站):SC-FDMA 或 FDMA
  单音(Single-tone):3.75kHz 或 15kHz 子载波间隔
  多音(Multi-tone):3/6/12 个子载波

覆盖增强机制

重复传输(Repetition):
  同一数据包重复发送 N 次(N = 1, 2, 4, 8, 16, 32, 64, 128, 2048)
  接收端合并多次接收的信号(Chase Combining)
  每次重复增益约 3dB(理论)

CE Level 与重复次数:
  CE Level 0:重复 1-2 次(正常覆盖)
  CE Level 1:重复 4-16 次(增强覆盖)
  CE Level 2:重复 32-2048 次(极限覆盖)

PSM 省电模式详解

PSM 工作流程

┌─────────────────────────────────────────────────────┐
│                    PSM 时序图                         │
│                                                      │
│  ┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐           │
│  │ 活跃  │  │ eDRX │  │ PSM  │  │ 活跃  │           │
│  │ 状态  │  │ 睡眠  │  │ 深睡  │  │ 状态  │           │
│  └──────┘  └──────┘  └──────┘  └──────┘           │
│  ←Active→  ←eDRX→   ←──── TAU 周期 ────→           │
│   Time                                               │
│                                                      │
│  Active Time:设备保持活跃,可接收下行数据             │
│  eDRX 周期:间歇性唤醒,检查寻呼                      │
│  PSM 深睡:射频完全关闭,仅 RTC 运行                  │
└─────────────────────────────────────────────────────┘

PSM 配置

bash
# 配置 PSM
AT+CPSMS=1,,,"01000001","00000001"
# 参数说明:
#   1:启用 PSM
#   第3个参数:T3412(TAU 定时器)= "01000001"
#     格式:3位单位 + 5位值
#     "010" = 单位 1小时,"00001" = 1
#     → TAU = 1小时(每小时向网络注册一次)
#   第4个参数:T3324(Active Time)= "00000001"
#     "000" = 单位 2秒,"00001" = 1
#     → Active Time = 2秒

# T3412 定时器单位:
#   "000" = 10分钟
#   "001" = 1小时
#   "010" = 10小时
#   "011" = 2秒
#   "100" = 30秒
#   "101" = 1分钟
#   "110" = 320小时
#   "111" = 停用

# 查询 PSM 状态
AT+CPSMS?
# +CPSMS: 1,,,"01000001","00000001"

eDRX 配置

bash
# 配置 eDRX
AT+CEDRXS=2,5,"0101"
# 参数说明:
#   2:启用 eDRX,并请求网络提供 eDRX 参数
#   5:NB-IoT(4=LTE-M,5=NB-IoT)
#   "0101":请求的 eDRX 周期
#     "0000" = 5.12s
#     "0001" = 10.24s
#     "0010" = 20.48s
#     "0011" = 40.96s
#     "0100" = 81.92s
#     "0101" = 163.84s(约2.7分钟)
#     "1010" = 5242.88s(约87分钟)

# 查询 eDRX 状态
AT+CEDRXS?

NB-IoT 数据传输

CoAP 协议(推荐)

CoAP(Constrained Application Protocol)是专为受限设备设计的轻量级协议,比 HTTP 更适合 NB-IoT:

bash
# 使用 AT 指令发送 CoAP 消息
AT+QCOAPOPEN=0,"coap.example.com",5683
AT+QCOAPADDHEAD=0,11,"sensor/data"
AT+QCOAPSEND=0,1,1,0,15
> {"temp":25.6}

MQTT-SN(MQTT for Sensor Networks)

MQTT-SN 是 MQTT 的简化版,专为低带宽网络设计:

bash
# MQTT-SN 连接
AT+QMTSNOPEN=0,"mqttsn.example.com",1884
AT+QMTSNCONN=0,"nb_device_001"

# 注册主题
AT+QMTSNREG=0,1,"sensor/data"

# 发布消息
AT+QMTSNPUB=0,0,0,1,15
> {"temp":25.6}

UDP 直传(最简单)

bash
# 打开 UDP 连接
AT+QIOPEN=1,0,"UDP","server.example.com",5000,0,0

# 发送数据
AT+QISEND=0,10
> 0102030405

# 接收数据(URC 上报)
# +QIURC: "recv",0,5,0102030405

NB-IoT 常见问题

问题1:注册网络失败

bash
# 排查步骤
AT+CEREG?       # 查看注册状态
# +CEREG: 0,0   # 0=未注册,正在搜索

AT+COPS?        # 查看运营商
AT+QCSQ         # 查看信号强度

# 手动搜索运营商
AT+COPS=?       # 搜索可用运营商(耗时较长)

# 强制注册到指定运营商
AT+COPS=1,2,"46000"  # 强制注册中国移动

# 检查频段配置
AT+QCFG="band"
# 确保配置了正确的 NB-IoT 频段

问题2:PSM 后无法唤醒

原因:PSM 期间射频关闭,无法接收下行数据
解决方案:
  1. 使用 eDRX 代替 PSM(可接收下行,但功耗略高)
  2. 设备主动上报时携带下行数据请求
  3. 使用 NIDD(Non-IP Data Delivery)通道
  4. 在 Active Time 内发送下行数据

问题3:数据发送失败

bash
# 检查网络连接
AT+CGACT?       # 查看 PDP 上下文状态
AT+CGPADDR=1    # 查看 IP 地址

# 重新激活
AT+CGACT=0,1    # 去激活
AT+CGACT=1,1    # 重新激活

# 检查信号质量
AT+QCSQ
# NB-IoT 信号:RSRP > -110dBm 为可用

褚成志的笔记