4. AT指令基础:AT指令语法、常用AT指令集(3GPP TS 27.007)、模组厂商私有AT指令

做LTE模组联调,AT指令是绕不开的基本功。说白了,AT指令就是咱们通过串口跟模组对话的“通用语言”。你发一条指令,模组回一个响应,一来一回,控制就完成了。

我刚开始带项目那会儿,有个同事把AT指令的格式写错了,结果模组死活没反应。他折腾了一下午,最后发现是少了个回车换行。嗯,这种坑踩过一次就记住了。

4.1 AT指令的语法规则

AT指令的格式其实很简单。每条指令都以“AT”开头,后面跟着具体命令,最后以回车换行(\r\n)结束。模组收到后,会返回响应。

基本格式长这样:

AT<命令>\r\n

响应格式分两种:

  • 成功:返回 OK
  • 失败:返回 ERROR 或具体错误码

举个例子,测试模组是否正常通信:

发送:AT\r\n
响应:OK

AT指令还分几种类型,我整理了一张表,方便你对照:

类型 格式 说明 示例
测试指令 AT+<命令>=? 查询命令支持的参数范围 AT+CGMI=?
读取指令 AT+<命令>? 查询当前参数值 AT+CGMI?
设置指令 AT+<命令>=<参数> 设置参数值 AT+CGMI="Huawei"
执行指令 AT+<命令> 执行无参数的操作 AT+CGMI
我的小习惯:调试时先用测试指令(=?)看看参数范围,再用读取指令(?)确认当前值,最后才用设置指令。这样能避免参数越界导致的奇怪问题。

4.2 3GPP TS 27.007 标准AT指令集

3GPP TS 27.007 是国际标准,定义了所有蜂窝模组必须支持的基础指令。不管你用哪个厂家的模组,这些指令基本通用。

常用的标准指令有这些:

  • AT+CGMI:查询模组厂商
  • AT+CGMM:查询模组型号
  • AT+CGMR:查询固件版本
  • AT+CGSN:查询IMEI号
  • AT+CSQ:查询信号强度
  • AT+CREG:查询网络注册状态
  • AT+CGATT:查询或设置GPRS附着状态
  • AT+CGPADDR:查询PDP地址(IP地址)

举个例子,查询信号强度:

发送:AT+CSQ\r\n
响应:+CSQ: 28,0

OK

第一个数字28代表信号强度(范围0-31),越大越好。第二个数字0代表误码率。我在项目现场遇到过信号只有5的情况,那基本就是没信号,得换位置或者加天线。

注意:标准指令虽然通用,但不同模组对某些参数的支持可能有细微差异。比如AT+CSQ返回的第二个参数,有些模组固定返回99(未知),有些返回0。别想当然,先测一下。

4.3 模组厂商私有AT指令

标准指令只能做基础操作。真要发挥模组的全部能力,还得靠厂商的私有指令。比如配置TCP/IP连接、MQTT参数、HTTP请求、GPS定位等,这些标准里没有,厂商自己加的。

我拿几个主流厂商举例:

厂商 私有指令前缀 典型功能
移远(Quectel) AT+QIOPEN, AT+QISEND TCP/UDP连接、数据发送
广和通(Fibocom) AT+FSCONN, AT+FSWRITE Socket连接、数据写入
中移(China Mobile) AT+CMQTTSTART, AT+CMQTTCONNECT MQTT客户端操作
华为(Huawei) AT^IPOPEN, AT^IPSEND IP连接、数据发送

举个例子,用移远模组建立TCP连接:

发送:AT+QIOPEN="TCP","192.168.1.100",8080\r\n
响应:OK

+QIOPEN: 0,0

第一个0是连接ID,第二个0表示成功。如果返回非0值,那就是失败了。我曾经遇到返回3的情况,查手册才知道是IP地址格式不对——多写了个空格。

核心建议:拿到新模组,第一件事就是去官网下载AT指令手册。别偷懒,手册里藏着很多坑。我习惯把常用指令整理成表格,贴在工位上,调试时一眼就能看到。

4.4 AT指令的知识体系

为了让你更直观地理解AT指令的整体结构,我画了一张图:

AT指令知识体系结构图 AT指令知识体系 AT指令 语法规则 3GPP标准指令 厂商私有指令 AT开头 \r\n结尾 OK/ERROR 四种类型 AT+CGMI AT+CSQ AT+CREG AT+CGATT AT+QIOPEN AT+CMQTT AT^IPOPEN AT+FSCONN 说明: 语法规则是基础,标准指令保通用,私有指令提功能。三者缺一不可。

4.5 实战中的避坑指南

AT指令看着简单,实际联调时坑不少。我把自己踩过的坑总结一下:

  • 回车换行不能少:很多新手只发“AT”不加\r\n,模组没反应就怀疑模组坏了。其实模组在等结束符。
  • 响应要读完:发完指令别急着发下一条。模组可能返回多行数据,没读完就发新指令,会导致数据错乱。
  • 超时处理:有些指令执行时间长(比如AT+CGATT),要设置合理的超时时间。我一般设5秒,不够再加。
  • 大小写敏感:AT指令不区分大小写,但参数值可能区分。比如APN名称,大写小写不一样。
我曾经踩过的坑:有一次用AT+QIOPEN建TCP连接,一直返回ERROR。查了半天,发现是服务器IP写成了“192.168.1.100”后面多了个空格。模组把空格当成IP的一部分,当然连不上。从那以后,我每次发指令前都会用串口工具先看一遍原始数据。

好了,AT指令的基础就这些。记住:语法是骨架,标准指令是通用工具,私有指令是专属武器。三者结合,你就能跟任何LTE模组顺畅对话了。