3. AT指令入门:语法、基础指令与错误码解析
AT指令,说白了就是咱们和蜂窝模组对话的“普通话”。模组再聪明,也得听懂人话才能干活。我刚开始做物联网项目时,觉得AT指令就是发几个字符串,没啥技术含量。结果第一次调4G模组,连个网络都注册不上,折腾了两天才发现是AT指令格式写错了……嗯,从那以后我再也不敢小看这几行字符了。
3.1 AT指令的语法规则
AT指令的格式其实很简单,但细节决定成败。咱们先看标准格式:
AT<command>=<参数1>,<参数2>,...<CR>
每个指令都以 AT 开头,以回车符 \r(即 <CR>)结束。模组收到后,会返回响应,格式通常是:
<CR><LF><响应内容><CR><LF>
OK 或 ERROR
我个人习惯把AT指令分成三类,这样好记:
| 类型 | 格式 | 示例 | 说明 |
|---|---|---|---|
| 测试指令 | AT+<cmd>=? | AT+CSQ=? | 查询指令支持的参数范围 |
| 查询指令 | AT+<cmd>? | AT+CSQ? | 读取当前参数值 |
| 设置指令 | AT+<cmd>=<val> | AT+CGDCONT=1,"IP","cmnet" | 写入或配置参数 |
\n 没加 \r。模组不认换行符,只认回车符。记住:AT指令必须以 \r 结尾,不是 \n,也不是 \r\n。
3.2 基础AT指令详解
下面这三个指令,是调试蜂窝模组时最常用的。我建议你先把它们刻在脑子里。
3.2.1 AT+CSQ —— 信号质量查询
这个指令用来获取当前环境的信号强度。返回值格式:
+CSQ: <rssi>,<ber>
其中 rssi 是信号强度指示,范围 0~31,值越大信号越好;ber 是误码率。我一般这样判断:
| rssi值 | 信号强度 | 实际体验 |
|---|---|---|
| 0 | -113 dBm 或更低 | 基本不可用 |
| 10 | 约 -93 dBm | 勉强可用,容易掉线 |
| 20 | 约 -73 dBm | 良好,日常使用没问题 |
| 31 | 约 -51 dBm 或更高 | 极佳,信号满格 |
| 99 | 未知或不可检测 | 模组可能没开机或天线没接 |
AT+CSQ 返回 99,99,先别急着怀疑模组坏了。我遇到过好几次,其实是天线没拧紧,或者天线馈线被机箱压断了。先检查物理连接,再查软件。
3.2.2 AT+CGATT —— 网络附着状态
这个指令用来查询或控制模组是否附着到GPRS/ LTE网络。说白了,就是问模组:“你连上基站了吗?”
// 查询当前附着状态
AT+CGATT?
+CGATT: 1
OK
// 手动触发附着
AT+CGATT=1
OK
返回值 1 表示已附着,0 表示未附着。我见过不少新手,发完 AT+CGATT=1 后立刻就去发网络数据,结果失败。为什么?因为附着需要时间,一般 3~10 秒。你得轮询 AT+CGATT? 直到返回 1,再继续下一步。
3.2.3 AT+CGDCONT —— PDP上下文定义
这个指令用来配置APN(接入点名称)。没有它,模组就不知道走哪条路去互联网。格式如下:
AT+CGDCONT=<cid>,<PDP_type>,<APN>,<IP_addr>,<d_comp>,<h_comp>
实际项目中,我们一般只填前三个参数:
// 中国移动公网APN
AT+CGDCONT=1,"IP","cmnet"
// 中国联通公网APN
AT+CGDCONT=1,"IP","3gnet"
// 中国电信公网APN
AT+CGDCONT=1,"IP","ctnet"
这里 cid 是上下文ID,一般用 1;PDP_type 几乎都是 "IP"(IPv4);APN 由运营商提供。如果你用的是私有APN(比如企业专网),运营商会给一个特定的APN字符串,别搞混了。
AT+CGDCONT 设置后,需要先 AT+CGACT=1,1 激活上下文,才能进行数据通信。我踩过这个坑:配置完APN就直接发HTTP请求,结果一直超时。后来才发现上下文根本没激活。
3.3 常见错误码解析
模组返回 ERROR 时,别慌。它其实在告诉你哪里出了问题。我整理了一份高频错误码对照表:
| 错误码 | 含义 | 常见原因 | 解决思路 |
|---|---|---|---|
+CME ERROR: 3 |
操作不允许 | SIM卡未插入或PIN码锁定 | 检查SIM卡,输入 AT+CPIN? 确认状态 |
+CME ERROR: 13 |
SIM卡故障 | SIM卡损坏或接触不良 | 重新插拔SIM卡,或换卡测试 |
+CME ERROR: 100 |
未知错误 | 参数格式错误或指令不支持 | 检查AT指令拼写和参数格式 |
+CMS ERROR: 301 |
SMS服务拒绝 | 短信中心号码未配置或网络问题 | 配置 AT+CSCA 短信中心号码 |
+CME ERROR: 50 |
PDP激活失败 | APN错误、欠费、信号差 | 核对APN,检查账户余额,改善信号 |
为什么会返回 +CME ERROR 而不是 +CMS ERROR?其实 +CME ERROR 是GSM/UMTS/LTE相关的通用错误,+CMS ERROR 专指短信服务错误。我一般先看错误前缀,就能缩小排查范围。
AT+CLAC 列出所有可用指令。这个指令不是所有模组都支持,但大部分主流模组(如移远、广和通)都兼容。我在做平台适配时,经常用这招快速摸清模组能力。
3.4 本章知识体系
下面这张图,把AT指令的调用流程和常见错误排查路径串起来了。你照着这个逻辑走,基本不会卡壳。
这张图的核心逻辑很简单:发指令 → 判断返回 → OK就继续,ERROR就查表。我建议你在调试时,把这张图打印出来贴在工位上。遇到问题,按图索骥,比瞎试快得多。
- AT指令必须以
\r结尾,不是\n AT+CSQ查信号,rssi < 10基本不可用AT+CGATT确认网络附着,别跳步AT+CGDCONT配APN,运营商给什么就填什么- 错误码先看前缀(CME vs CMS),再查具体数字