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" 写入或配置参数
⚠️ 避坑指南: 我曾经在量产阶段发现一批模组死活连不上网,排查了三天,最后发现是代码里AT指令末尾只加了 \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,再继续下一步。

🔑 关键流程: 模组上电 → 搜网 → 注册 → 附着 → PDP激活 → 数据通信。每一步都要确认状态,别跳步。

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指令,可以发 AT+CLAC 列出所有可用指令。这个指令不是所有模组都支持,但大部分主流模组(如移远、广和通)都兼容。我在做平台适配时,经常用这招快速摸清模组能力。

3.4 本章知识体系

下面这张图,把AT指令的调用流程和常见错误排查路径串起来了。你照着这个逻辑走,基本不会卡壳。

AT指令调用与错误排查流程 AT指令调用与错误排查流程 发送AT指令 返回OK? 解析响应数据 继续下一步指令 检查错误码 +CME ERROR: 3 → SIM卡问题 +CME ERROR: 50 → PDP激活失败 +CMS ERROR: 301 → SMS配置错误 排查建议 1. 检查AT指令格式 2. 确认SIM卡状态 3. 核对APN配置 4. 查看信号强度 5. 重启模组重试 核心原则:先确认状态,再执行操作 AT+CSQ → AT+CGATT → AT+CGDCONT → AT+CGACT

这张图的核心逻辑很简单:发指令 → 判断返回 → OK就继续,ERROR就查表。我建议你在调试时,把这张图打印出来贴在工位上。遇到问题,按图索骥,比瞎试快得多。

📌 本章要点回顾:
  • AT指令必须以 \r 结尾,不是 \n
  • AT+CSQ 查信号,rssi < 10 基本不可用
  • AT+CGATT 确认网络附着,别跳步
  • AT+CGDCONT 配APN,运营商给什么就填什么
  • 错误码先看前缀(CME vs CMS),再查具体数字