AT 指令学习手册:从对话逻辑到实战排错
AT 指令学习手册:从对话逻辑到实战排错
学习理念:不背命令,学「对话语法 + 命名规律 + 标准剧本」。
适用硬件:微雪 SIM7600CE HAT / DTU、移远模块等蜂窝通信终端。
目标岗位:通讯终端软件测试(如铁路 GSM-R / 4G 终端类设备)。
配套练手项目:Gitee · rail-terminal-test
目录
- 配套 Gitee 自动化练手项目
- 核心认知:AT 是对话,不是命令集
- 语法三兄弟:? = = =?
- 命名密码:C 家族指令
- 必记指令与返回值
- 关键概念:PDP / APN / URC
- 标准实战剧本(6 套)
- 排错武器库与 CEER 对照
- 现象 → 根因 → 解法速查
- 一图流记忆卡片
- 最小学习路径(7 天)
零、配套 Gitee 自动化练手项目
本手册中的实战剧本(尤其是剧本 1 / 2 / 6)可配合以下开源项目动手练习:
| 项目 | 链接 |
|---|---|
| Gitee 仓库 | https://gitee.com/song-ri/rail-terminal-test |
| 克隆地址 | git clone https://gitee.com/song-ri/rail-terminal-test.git |
项目简介
rail-terminal-test是基于Python + pytest + pyserial的通讯终端 AT 指令自动化测试框架:
- 无硬件:内置 MockModem 模拟 SIM7600CE / DTU 响应,可先练测试设计与自动化
- 有硬件:改配置后同一套用例可直接跑在真实串口上
快速上手
# 1. 克隆gitclone https://gitee.com/song-ri/rail-terminal-test.gitcdrail-terminal-test# 2. 安装依赖pipinstall-rrequirements.txt# 3. 模拟器模式(默认,无需硬件)python manual_check.py# 手动 AT 自检pytest tests/-v# 8 条自动化用例# 4. 硬件到货后,编辑 config/settings.py# USE_MOCK = False# PORT = "COM5" # Windows# PORT = "/dev/ttyUSB2" # Linux / 统信 UOS与本手册的对应关系
| 手册章节 | 项目中的实践 |
|---|---|
| 剧本 1 第一次摸模组 | manual_check.py+tests/test_at_basic.py |
| 剧本 2 硬件接口测试 | mock 中simulate_no_sim/simulate_no_antenna |
| 剧本 6 Python 自动化 | pytest tests/ -v --html=report.html |
| 7 天学习路径 D6 | 在tests/下自行扩展用例 |
详细 7 天训练路线见 Gitee 仓库README.md。
一、核心认知:AT 是对话,不是命令集
把4G 模组当成一个只会按规则回答的助手:
| 角色 | 行为 |
|---|---|
| 你(测试员) | 发送AT指令 = 提问 / 下指令 |
| 模组 | 回复OK/ 数据行 /ERROR |
| 模组(主动) | 未经询问上报 =URC(Unsolicited Result Code) |
记忆钩子:打电话先拨号,发指令先AT。
为什么叫 AT?
- AT = Attention(注意),所有指令必须以
AT开头 - 不带
+的是老式 Hayes 指令(如ATZ复位、ATE1回显) - 带
+的是3GPP 标准蜂窝通信指令(如AT+CSQ)
二、语法三兄弟:? / = / =?
| 写法 | 含义 | 人话类比 |
|---|---|---|
AT+CMD? | 读当前配置 | 「现在是什么情况?」 |
AT+CMD=... | 写配置 | 「给我改成这样」 |
AT+CMD=? | 测支持范围 | 「你能设哪些选项?」 |
口诀:问号读现状,等号改配置,问号等号问能力。
反例:为什么AT+CSQ?是错的?
CSQ是执行型指令(测一次给一次结果),没有「当前存储值」可读:
AT+CSQ=? # 可能返回范围说明 AT+CSQ? # ❌ ERROR AT+CSQ # ✅ +CSQ: 23,99正例:全功能指令CGDCONT
AT+CGDCONT? # 读:当前 APN 配置 AT+CGDCONT=1,"IP","cmnet" # 写:设置 APN AT+CGDCONT=? # 测:支持的 PDP 类型三、命名密码:C 家族指令
C = Cellular(蜂窝)
凡是AT+C开头,基本都在管「信号 / 注册 / 上网 / 运营商」。
| 指令 | 全称 | 人话 | 记忆 |
|---|---|---|---|
AT+CSQ | Cellular Signal Quality | 信号几格 | SQ = Signal Quality |
AT+CREG? | Cellular REGistration | 电路域注册 | REG = Register |
AT+CGREG? | Cellular GPRS REGistration | 数据域注册 | G = GPRS |
AT+CEREG? | Cellular EPS REGistration | 4G/5G 注册 | E = EPS |
AT+CGMI | Cellular Group Manufacturer ID | 厂商 | I = Identity |
AT+CGMM | Cellular Group Model ID | 型号 | |
AT+CGMR | Cellular Group Revision | 固件版本 | R = Revision |
AT+CGDCONT | Cellular General Data Context | 上网配置 | CONT = Context |
AT+COPS? | Cellular OPerationS | 运营商 | OPS = Operators |
AT+CPIN? | Card PIN | SIM 卡状态 | PIN = 卡密码 |
AT+CEER | Cellular Extended Error Report | 上网失败原因 | 报错翻译官 |
CREG 深度记忆
C = Cellular(蜂窝) REG = Registration(注册入网)AT+CREG?人话:「你注册进运营商网络了吗?」
常见返回值:
| 返回 | 含义 |
|---|---|
+CREG: 0,0 | 未注册 |
+CREG: 0,1 | 已注册(本地网)✅ |
+CREG: 0,2 | 正在搜网 |
+CREG: 0,5 | 已注册(漫游)✅ |
4G 模组建议CREG+CGREG+CEREG一起看,任一值为1或5通常可上网。
四、必记指令与返回值
生存三指令(最先掌握)
| 指令 | 作用 | 正常返回 |
|---|---|---|
AT | 链路测试 | OK |
ATE1 | 开启回显(minicom 必备) | OK |
AT+CSQ | 查信号 | +CSQ: 23,99(0~31,越大越好) |
核心指令速查表
| 指令 | 人话 | 正常返回示例 |
|---|---|---|
ATI | 你是谁 | SIM7600CE+OK |
AT+CPIN? | SIM 好了吗 | +CPIN: READY |
AT+CSQ | 信号强度 | +CSQ: 20,99 |
AT+CREG? | 注网了吗 | +CREG: 0,1 |
AT+COPS? | 哪家运营商 | +COPS: 0,0,"CHINA MOBILE",7 |
AT+CGDCONT? | APN 配置 | +CGDCONT: 1,"IP","cmnet",... |
AT+CGDCONT=1,"IP","cmnet" | 设 APN | OK |
ATD*99# | 拨号上网 | CONNECT |
AT+CEER | 上次失败原因 | 见排错章节 |
AT+DTUCFG? | DTU 配置(DTU 专用) | +DTUCFG: ... |
国内三大运营商 APN
| 运营商 | 常用 APN |
|---|---|
| 移动 | cmnet |
| 联通 | 3gnet/uninet |
| 电信 | ctnet |
串口参数(默认)
波特率:115200 数据位:8 停止位:1 校验:无 流控:无 指令结尾:\r\n(回车换行)五、关键概念:PDP / APN / URC
CGDCONT = 填「上网寄件单」
AT+CGDCONT = C(蜂窝) + G(通用) + D(数据) + CONT(上下文)PDP Context= 一组上网参数(IP 类型 + APN + 认证方式等)
| 通信概念 | 快递类比 |
|---|---|
| SIM 卡 | 身份证 |
| APN | 快递公司(cmnet / 3gnet) |
| PDP Context | 寄件单 |
ATD*99# | 把单子交给快递员 |
| 分配 IP | 收货地址 |
AT+CGDCONT=1,"IP","cmnet" # 1=编号, IP=IPv4, cmnet=APNURC = 模组主动汇报
不是你问的,是模组自己「插嘴」:
AT+CREG=1 # 开启注册状态变化上报 # 拔天线或重启后,minicom 自动出现: +CREG: 2 # 正在搜网 +CREG: 1 # 注册成功重要认知
AT 指令不怕乱试,就怕不试。发错最多
ERROR,不会烧模组。
最坏常见情况:AT+CFUN=1,1重启模组。
六、标准实战剧本(6 套)
剧本 1:第一次摸模组(自检流程)⭐ 入门必做
场景:SIM7600CE HAT 刚到货,Windows + SSCOM / minicom 连 COM 口。
前置:LTE 天线接MAIN,SIM 卡已插,UART 跳线拨到C(USB 转串口控制模组)。
AT ATE1 ATI AT+CGMI AT+CPIN? AT+CSQ AT+CREG? AT+CGREG? AT+COPS?预期结果:
| 步骤 | 期望 |
|---|---|
AT | OK |
ATI | 含SIM7600CE |
AT+CPIN? | +CPIN: READY |
AT+CSQ | 第一值 ≥ 10(窗边测试) |
AT+CREG? | 第二值为1或5 |
AT+COPS? | 显示运营商名称 |
测试记录模板:
日期:____ 测试员:____ 设备:SIM7600CE HAT COM口:____ | 指令 | 实际返回 | 结果(P/F) | 备注 | | AT | OK | P | | | ... | | | |✅ 这一套全绿 =AT 指令入门完成。
剧本 2:硬件接口测试(测试工程师视角)⭐ 贴近岗位
场景:模拟桑达无线通讯终端出货前的硬件接口检查。
| 用例 ID | 操作 | 指令/观察 | 期望 |
|---|---|---|---|
| HW-01 | 正常上电 | 观察 PWR/NET 灯 | NET 灯闪烁 |
| HW-02 | 链路测试 | AT | OK |
| HW-03 | 拔 SIM 卡重启 | AT+CPIN? | NOT INSERTED或ERROR |
| HW-04 | 插回 SIM | AT+CPIN? | READY |
| HW-05 | 拔 LTE 天线 | AT+CSQ | 信号降至 0 或极低 |
| HW-06 | 接回天线 | AT+CSQ | 30s 内信号恢复 |
| HW-07 | 热插拔 USB | 拔插 USB 线 | 重连后 COM 口恢复,AT正常 |
| HW-08 | 错误波特率 | 用 9600 发AT | 无响应或乱码 |
| HW-09 | 连续压测 | 快速发 100 次AT | 每次均OK |
实战记录示例(HW-05):
用例:HW-05 无天线信号测试 步骤:1. 正常注网后记录 CSQ=22 2. 拔掉 MAIN 天线 3. 等待 10s 4. 发 AT+CSQ 期望:CSQ 第一值 ≤ 3 实际:+CSQ: 0,99 结果:PASS剧本 3:上不了网排错(完整链路)⭐ 排错核心
现象:AT正常,但 ping 不通外网 / 拨号失败。
# 第一步:基础三角 AT+CPIN? # SIM 正常? AT+CSQ # 信号 ≥ 10? AT+CREG? # 注册 = 1 或 5? # 第二步:数据域 AT+CGREG? AT+CEREG? # 第三步:APN 配置 AT+CGDCONT? AT+CGDCONT=1,"IP","cmnet" # 移动卡示例 # 第四步:拨号 ATD*99# # 第五步:失败则查原因 AT+CEER80% 故障三选一:SIM 未识别 / 信号太差 / APN 配错。
剧本 4:抓 URC 主动上报
目的:理解模组主动行为,测试网络切换场景。
ATE1 AT+CREG=2 # 开启注册变化上报(2=带位置信息上报,部分模组用 1) AT+CSQ # 操作:重启模组 或 拔插天线 # 观察 minicom 是否自动出现: +CREG: 2 +CREG: 1测试点:URC 出现时机是否正确,不应在稳定注网后无故刷屏。
剧本 5:DTU 专项测试(SIM7600CE-CNSE DTU)
场景:工业 DTU,除标准 AT 外还有 DTU 配置指令。
# USB 连电脑,115200,上电后等 RDY AT AT+CSQ AT+CREG? AT+DTUCFG? # 读 DTU 当前配置 # 查询示例返回: # +DTUCFG: 115200,0.0.0.0,0,TCP,0,,300,,1,0,0,500,0,0,1,0,0 # RS232 透传测试(需 USB 转 RS232): # 1. 配置服务器地址(参考 DTU 手册 AT+DTUCFG=...) # 2. PC 端起 TCP Server # 3. RS232 发数据 → 观察服务器是否收到DTU 指示灯检查:
| 灯 | 含义 | 正常 |
|---|---|---|
| PWR | 电源 | 常亮 |
| NET | 网络 | 闪烁(搜网/注网) |
| STA | 状态 | 注网后常亮 |
| TXD/RXD | 收发 | 有数据时闪烁 |
剧本 6:Python 自动化(pytest + pyserial)
场景:回归测试,版本迭代后一键验证。
项目地址:https://gitee.com/song-ri/rail-terminal-test
本地路径:C:\Users\86135\rail-terminal-test
# 模拟器模式(无硬件)cd C:\Users\86135\rail-terminal-test python manual_check.py pytest tests/-v# 硬件到货后:改 config/settings.py# USE_MOCK = False# PORT = "COM5"pytest tests/-v--html=report.html自动化用例设计示例:
deftest_at_handshake(modem):assert"OK"inmodem.send_at("AT")deftest_signal_in_range(modem):resp=modem.send_at("AT+CSQ")rssi=int(resp.split("+CSQ:")[1].split(",")[0])assert5<=rssi<=31,f"信号异常:{rssi}"deftest_network_registered(modem):resp=modem.send_at("AT+CREG?")assert",1"inrespor",5"inresp缺陷报告示例:
【BUG-001】无 SIM 卡时 NET 灯仍常亮 严重程度:中 复现:1. 不插 SIM 2. 上电 3. 观察 NET 灯 期望:NET 灯应熄灭或快闪提示异常 实际:NET 灯常亮,AT+CPIN? 返回 NOT INSERTED七、排错武器库与 CEER 对照
标准 10 步排错流程
1. AT → 串口通吗? 2. ATE1 → 能看到输入吗? 3. AT+CPIN? → SIM 就绪吗? 4. AT+CSQ → 信号够吗? 5. AT+CREG? → 注网了吗? 6. AT+CGREG? → 数据域注网了吗? 7. AT+CGDCONT? → APN 对吗? 8. ATD*99# → 拨号成功吗? 9. AT+CEER → 失败原因是什么? 10. lsof /dev/tty* → 端口被占用吗?(Linux)CEER 常见返回对照
| CEER 返回 | 含义 | 解法 |
|---|---|---|
Requested service option not subscribed | APN 未开通 / 配错 | 核对运营商 APN、卡是否开数据 |
Unsupported PDP type | PDP 类型不支持 | 改为"IP" |
Network failure | 网络故障 | 查信号、重插卡、换位置 |
Activation rejected by GGSN/SGSN | 核心网拒绝 | 等注网完成再拨号 |
空 /OK | 无记录 | 查 ModemManager 占端口 |
CME ERROR vs CEER
+CME ERROR | AT+CEER | |
|---|---|---|
| 时机 | 指令本身错误 | PDP 激活失败细节 |
| 精度 | 粗 | 细(网络拒绝原因) |
| 用途 | 参数错 / SIM 错 | 上不了网的根因 |
八、现象 → 根因 → 解法速查
| 现象 | 可能根因 | 第一步排查 |
|---|---|---|
| 发 AT 无响应 | COM 口错 / 波特率错 / 线没接 | 换 COM 口、确认 115200、查跳线 C 档 |
| 返回乱码 | 波特率不匹配 | 改 115200 |
+CPIN: NOT INSERTED | SIM 未插好 / 卡槽损坏 | 重插卡、换卡套 |
+CPIN: SIM PIN | 需要 PIN 码 | AT+CPIN="1234" |
+CSQ: 0,99 | 天线未接 / 无覆盖 | 接 MAIN 天线、靠窗 |
+CREG: 0,0 | 未注网 | 查 SIM、信号、是否锁频 |
+CREG: 0,2一直不变 | 搜网失败 | 查天线、SIM、运营商频段 |
拨号NO CARRIER | APN 错 / 未注网 | AT+CGDCONT?→AT+CEER |
| Linux 下 Permission denied | 无串口权限 | sudo usermod -aG dialout $USER |
| 指令间歇性失败 | 端口被 ModemManager 占用 | sudo systemctl stop ModemManager |
九、一图流记忆卡片
┌─────────────────────────────────────────────────────────┐ │ AT 指令记忆卡片 │ ├─────────────────────────────────────────────────────────┤ │ 语法:? 读 | = 写 | =? 问能力 │ │ 命名:AT+C = 蜂窝通信全家桶 │ ├─────────────────────────────────────────────────────────┤ │ 入门三角:AT → ATE1 → AT+CSQ │ │ 注网三角:CPIN? → CSQ → CREG? │ │ 上网两步:CGDCONT → ATD*99# │ │ 失败一问:AT+CEER │ ├─────────────────────────────────────────────────────────┤ │ CSQ:0~31,越大越好,无天线≈0 │ │ CREG:1或5=已注网,2=搜网中,0=未注网 │ │ APN:移动cmnet 联通3gnet 电信ctnet │ ├─────────────────────────────────────────────────────────┤ │ PDP = 寄件单 | APN = 快递公司 | 拨号 = 发货 │ │ URC = 模组主动说话(不是你问的) │ └─────────────────────────────────────────────────────────┘打印建议:A4 横向,贴工位;现场调试按「入门三角 → 注网三角 → 上网两步 → 失败问 CEER」走。
十、最小学习路径(7 天)
| 天 | 任务 | 产出 |
|---|---|---|
| D1 | 理解 AT 对话模型 + 语法三兄弟 | 能解释 ? / = / =? |
| D2 | 跑通剧本 1(自检流程) | 测试记录表 1 份 |
| D3 | 背 C 家族指令 + 记 APN | 能不看表发 10 条指令 |
| D4 | 跑通剧本 2(硬件接口) | 8 条 HW 用例 + 2 份 Bug 报告 |
| D5 | 跑通剧本 3(排错)+ CEER | 能独立排查 NO CARRIER |
| D6 | 剧本 6(pytest 自动化) | 8+ 自动化用例通过 |
| D7 | 统信 UOS 虚拟机重复剧本 1~3 | Linux 串口调试经验 |
附录:知识地图闭环
AT(在吗?) ├── 链路层:ATE1、串口参数 ├── 硬件层:CPIN?、CSQ、天线/SIM ├── 网络层:CREG? / CGREG? / CEREG? / COPS? ├── 数据层:CGDCONT(PDP/APN)→ ATD*99#(拨号) ├── 排错层:CEER、CME ERROR ├── DTU 层:DTUCFG?(工业设备) └── 自动化:pytest + pyserial + 测试报告一句话总结:AT 指令不是背单词,是学「语法 + 命名规律 + 标准剧本」。
你不需要记住所有命令,只需要看到陌生指令时知道:AT+CMD=?问能力,?读现状,然后按剧本排查。
文档版本:v2.1 | 整理日期:2026-07-04 | 配套练习项目:Gitee · rail-terminal-test
