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,0102030405NB-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 为可用