3. AT指令入门:AT指令集标准、基础AT指令与常见错误码解析

AT指令,说白了就是咱们工程师和模组对话的“通用语言”。不管你是用移远、广和通还是SIMCom的模组,只要走AT指令,基本套路都是一样的。我刚开始做物联网项目那会儿,觉得AT指令太简单了,不就是发几个字符串嘛。结果真到现场调设备,才发现坑不少。今天咱们就把这块彻底捋清楚。

3.1 AT指令集标准:谁说了算?

AT指令最早是Hayes公司给调制解调器定的标准,后来3GPP组织把它收编进了规范。现在咱们用的蜂窝模组,主要遵循两个标准:

  • 3GPP TS 27.007:定义了通用的AT指令集,比如信号查询、网络注册这些
  • 3GPP TS 27.005:专门管SMS(短信)相关的指令

不过说实话,各家模组厂商都会在标准基础上加私货。比如移远的AT+Q系列指令,广和通的AT+CG扩展指令。我个人的习惯是:先看标准指令能不能搞定,搞不定再翻厂商手册。这样换模组品牌时,代码改动最小。

核心原则:标准指令保证互通性,厂商扩展指令提供差异化功能。项目选型时,优先用标准指令实现核心功能。

3.2 基础AT指令:信号与网络状态

这两个指令是我每次调试必用的,就像医生的听诊器一样基础。

3.2.1 AT+CSQ:信号质量查询

这个指令返回两个数字:rssi(接收信号强度)和ber(误码率)。格式长这样:

AT+CSQ
+CSQ: 19,99

OK

第一个数字19代表信号强度,范围0-31。数值越大信号越好。99表示误码率不可用(很多模组都这样)。

我在项目中遇到过一个问题:客户说设备信号差,我远程查AT+CSQ返回28,信号明明很好。后来发现是天线没拧紧,模组自己报的是假信号。所以我现在有个习惯——查信号时一定配合AT+CREG一起看。

CSQ值 信号强度(dBm) 实际体验
0 ≤ -113 基本不可用
10 -103 勉强能注册网络
20 -83 正常通信没问题
31 ≥ -51 信号极好

避坑指南:我曾经在实验室里测CSQ值一直很好,一到现场就掉线。后来发现实验室的基站就在隔壁楼,现场基站隔了两堵混凝土墙。所以CSQ值一定要在真实部署环境里测,别信实验室数据。

3.2.2 AT+CREG:网络注册状态

这个指令告诉你模组有没有“连上”基站。返回格式:

AT+CREG?
+CREG: 0,1

OK

第二个数字是关键:

  • 0:没注册上,搜网中
  • 1:注册上了,在家乡网络(最理想)
  • 2:搜网中
  • 3:注册被拒绝(常见原因:SIM卡欠费、APN不对)
  • 5:注册上了,但处于漫游状态

嗯,这里要注意:CREG返回1不代表就能上网。它只说明模组和基站握手成功了。能不能走数据业务,还得看AT+CGATT(GPRS附着状态)。

3.3 常见错误码解析:别被ERROR吓住

发AT指令最烦的就是收到ERROR。但错误码其实是有规律的。我整理了一份常用错误码表:

错误码 含义 常见原因
+CME ERROR: 3 操作不允许 SIM卡没插好,或PIN码没解锁
+CME ERROR: 13 SIM卡故障 SIM卡损坏或接触不良
+CME ERROR: 16 位置更新失败 基站信号弱,或SIM卡被列入黑名单
+CME ERROR: 100 未知错误 模组内部异常,重启试试
+CMS ERROR: 301 SMS发送失败 短信中心号码没配,或余额不足

重要提醒:不同模组厂商的错误码定义可能不一样。比如移远的+CME ERROR: 50表示“PDP激活失败”,但换一个品牌可能就变成+CME ERROR: 26。所以一定要看对应模组手册的“Error Code”章节,别拿A家的错误码去查B家的问题。

我处理过一个最典型的案例:设备上报+CME ERROR: 13,客户以为是SIM卡坏了,换了三张卡都不行。我远程一看,发现是模组的SIM卡座虚焊了。所以遇到错误码,先别急着换硬件,先检查物理连接。

3.4 AT指令交互流程:一张图说清楚

下面这张图展示了从发送AT指令到解析响应的完整流程。我建议你把它打印出来贴在工位上。

AT指令交互流程图 MCU发送AT指令 模组接收并处理 指令正确? 是 返回 +xxx: 数据 否 返回 ERROR MCU解析响应并处理 注意:每条AT指令 必须以 \r\n 结尾

这个流程看起来简单,但实际调试时有个细节:模组返回OK或ERROR之前,可能先返回一行数据。比如查询信号时,先返回+CSQ: 19,99,再返回OK。你的解析代码必须能处理这种“多行响应”。

3.5 实战建议:调试AT指令的三个习惯

  1. 用串口助手先手动测:别一上来就写代码。拿串口工具一条条发指令,确认模组行为符合预期。我见过太多人代码写完了,结果发现指令格式就错了。
  2. 注意超时处理:有些指令(比如搜网)可能耗时10秒以上。代码里一定要设超时,别死等。我一般设15秒超时,超时后重试3次。
  3. 日志要打全:发什么指令、收什么响应、花了多长时间,全记下来。出问题时这些日志就是破案的关键线索。

个人经验:我曾经在量产阶段发现10%的设备连不上网。查日志发现这些设备AT+CREG?返回的都是2(搜网中)。后来定位到是天线批次问题,低频段增益不够。如果当时没打全日志,这个问题可能要排查好几天。

好了,AT指令的基础就这些。记住:CSQ看信号强弱,CREG看网络状态,错误码看具体原因。这三板斧用熟了,大部分连接问题都能快速定位。