
本文详解sim7600x模组在raspberry pi上使用at+cmss指令转发已接收短信的原理、前提条件及完整实现流程,重点说明为何直接执行at+cmss=0,"138xxxx"返回error,并提供可落地的内存迁移+发送+清理三步闭环方案。
本文详解sim7600x模组在raspberry pi上使用at+cmss指令转发已接收短信的原理、前提条件及完整实现流程,重点说明为何直接执行at+cmss=0,"138xxxx"返回error,并提供可落地的内存迁移+发送+清理三步闭环方案。
在基于Raspberry Pi 3与SIM7600X 4G HAT的物联网项目中,实现“自动转发运营商下行短信(如话费余额提醒、流量包通知)至指定号码”是一项典型需求。许多开发者尝试直接调用AT+CMSS=0,"138XXXXXXX"却收到ERROR响应——这并非指令错误,而是对SIM7600X短信存储架构的理解偏差所致。
? 核心原理:三类短信存储器(, , )严格隔离
SIM7600X遵循3GPP TS 27.005规范,将短信划分为三个逻辑存储区:
-
:接收短信默认存储区(如SM卡或ME模块内存),用于AT+CMGR,AT+CMGL读取; -
:待发送短信暂存区(即“发送池”),AT+CMSS仅从此区读取消息并转发; -
:已发送/已读短信归档区(常用于日志留存)。
三者物理上可映射到同一介质(如"ME"),但逻辑地址空间完全独立。因此,即使AT+CPMS?返回"ME",0,23,"ME",0,23,"ME",0,23,中的第0条短信也不会自动出现在中——AT+CMSS无法跨区访问。
✅ 正确转发流程(三步闭环)
以下Python代码(基于pyserial)演示完整流程,适配Raspberry Pi 3 + SIM7600X HAT:
import serial
import time
ser = serial.Serial('/dev/ttyUSB2', 115200, timeout=2) # SIM7600X默认USB串口
def at_cmd(cmd, wait_ok=True):
ser.write((cmd + '\r\n').encode())
time.sleep(0.3)
res = ser.read(1024).decode()
print(f"→ {cmd}\n← {res.strip()}")
return "OK" in res if wait_ok else res
# 1️⃣ 查询当前存储配置(确认mem1/mem2是否可用)
at_cmd("AT+CPMS?")
# 2️⃣ 将接收区(mem1)第0条短信复制到发送区(mem2)
# 注意:需先设置源/目标存储器类型(此处均设为"ME")
at_cmd('AT+CPMS="ME","ME","ME"') # 统一使用模块内存
at_cmd('AT+CMGC=0,"ME"') # 关键!将mem1中索引0的消息复制到mem2
# 返回示例:+CMGC: 1 → 表示新消息已存入mem2索引1
# 3️⃣ 使用CMSS从mem2发送(参数为mem2中的索引号,非原始索引!)
at_cmd('AT+CMSS=1,"138XXXXXXX"') # 发送mem2中第1条(刚复制来的)
# 4️⃣ 清理:删除原始接收短信(mem1中索引0)和发送后残留(mem2中索引1)
at_cmd('AT+CMGD=0,4') # 删除mem1索引0(4=删除+清空发送池)
⚠️ 关键注意事项
AT+CMGC(Copy Message to Storage)是SIM7600X扩展AT指令(非标准3GPP),必须确认固件版本支持(推荐V1.0.0以上);- 若
AT+CMGC不可用,需退而求其次:用AT+CMGR=0读取原始短信内容 → 手动构造PDU/Text模式 →AT+CMGS重新发送(牺牲效率但100%兼容);- 每次
AT+CMSS成功后,目标号码将收到原始发件人号码(非你设备号),因CMSS保留原始TP-OA字段;- 务必在
AT+CMSS前执行AT+CNMI=2,1启用新短信到达URC,避免轮询消耗CPU。
? 故障排查速查表
| 现象 | 常见原因 | 解决方案 |
|---|---|---|
AT+CMSS=x 返回 ERROR
|
为空或索引越界 |
先执行AT+CPMS?确认有可用条目;检查AT+CMGC是否成功返回新索引 |
AT+CMGC 返回 +CME ERROR: 50
|
存储器类型不匹配 | 用AT+CPMS="SM","SM","SM"切换至SIM卡存储再试 |
| 转发后收件人显示“未知号码” | 原始短信为PDU格式且含隐藏编码 | 改用AT+CMGF=1切Text模式后再AT+CMGC
|
通过理解存储器分离机制并严格执行“复制→发送→清理”流程,即可在SIM7600X上稳定实现运营商短信自动转发。该方案无需依赖云服务或第三方平台,完全离线运行,适用于电力监控、远程告警等对通信链路自主性要求严苛的工业场景。











