4、AT指令基础:AT指令格式、基本指令、常用测试指令、常见错误码解析
好,咱们开始聊AT指令。说实话,这东西是NB-IoT开发里最基础、也最绕不开的一环。你想想看,模组本身就是一个黑盒子,我们怎么跟它沟通?就是靠AT指令。我最早做2G模块的时候,就是靠着一本AT指令手册走天下。到了NB-IoT时代,核心逻辑没变,但细节上多了不少坑。
4.1 AT指令的格式:别小看这个“AT”
AT指令,全称是Attention指令。说白了,就是“嘿,模组你注意了,我要跟你说话”。每条指令都以“AT”开头,以回车换行(\r\n)结尾。这个格式是死的,千万别搞错。
我见过不少新手,上来就写“AT+CGMI”,结果模组没反应。为什么?因为少了回车。模组在等你的结束符呢。
标准格式长这样:
AT<指令>\r\n
举个例子:
AT\r\n // 测试通信是否正常
AT+CGMI\r\n // 查询模组制造商
AT+CSQ\r\n // 查询信号强度
嗯,这里要注意:每条指令必须严格以\r\n结尾。在代码里,我习惯用字符串“AT\r\n”来发送。有些串口工具会自动加回车,但你自己写代码时一定要手动加上。
核心要点:AT指令 = 前缀“AT” + 指令体 + 结束符“\r\n”。缺一不可。
4.2 基本指令:先让模组“开口说话”
基本指令就那么几条,但每条都有它的用处。我一个个说。
4.2.1 AT —— 测试通信
这是最简单的指令。发送“AT\r\n”,如果模组回复“OK”,说明串口通信没问题。我在项目调试的第一步,永远是发这条指令。如果连AT都不回OK,那后面什么都别谈了。
发送:AT\r\n
回复:OK
4.2.2 ATE —— 回显控制
ATE0关闭回显,ATE1开启回显。默认是ATE1,也就是你发什么,模组就原样返回什么。我个人习惯在调试时开着回显,方便看数据。但正式产品里,我一般关掉回显,减少不必要的串口数据量。
发送:ATE0\r\n
回复:OK
// 之后发送指令,模组不再回显指令内容,只回复结果
我的小技巧:调试阶段用ATE1,量产固件用ATE0。省得日志里一堆重复内容。
4.2.3 AT+CGMI —— 查询制造商
这条指令用来确认模组厂商。比如移远模组会返回“Quectel”。我曾在项目里用它做模组型号校验,防止贴错料。
发送:AT+CGMI\r\n
回复:Quectel\r\n\r\nOK
4.2.4 AT+CGMM —— 查询模组型号
这个更具体,能拿到模组的具体型号,比如BC95、BC26、BC35-G等。不同型号的指令集可能有细微差别,我建议你在代码里做一次型号识别,再决定后续流程。
发送:AT+CGMM\r\n
回复:BC95\r\n\r\nOK
4.2.5 AT+CGMR —— 查询固件版本
固件版本很重要。同一个模组,不同固件版本支持的指令可能不一样。我曾经踩过一个坑:BC95的旧固件不支持某些新指令,害我排查了两天。所以,拿到新模组,第一件事就是查版本。
发送:AT+CGMR\r\n
回复:BC95CNBR01A01\r\n\r\nOK
4.3 常用测试指令:摸清模组的“身体状况”
这些指令在调试和测试阶段特别有用。说白了,就是看看模组状态好不好。
4.3.1 AT+CSQ —— 信号质量
这条指令返回信号强度。格式是:+CSQ: <rssi>,<ber>。rssi值范围0-31,31表示信号最好,99表示没信号。我一般要求rssi值在15以上才敢说信号可用。
发送:AT+CSQ\r\n
回复:+CSQ: 18,99\r\n\r\nOK
// 18表示信号强度约-75dBm,还不错
经验之谈:NB-IoT信号穿透力强,但容易受干扰。如果CSQ值忽高忽低,先检查天线接触是否良好。我遇到过好几次,都是天线没拧紧导致的。
4.3.2 AT+COPS —— 运营商选择
这条指令查询当前注册的网络运营商。返回格式是:+COPS: <mode>,<format>,<oper>。如果返回“0,0,CHINA MOBILE”,说明已注册到中国移动。
发送:AT+COPS?\r\n
回复:+COPS: 0,0,CHINA MOBILE\r\n\r\nOK
4.3.3 AT+CEREG —— 网络注册状态
这个指令很关键。它告诉你模组是否成功注册到NB-IoT网络。返回值中,第二个参数是注册状态:
| 状态值 | 含义 |
|---|---|
| 0 | 未注册 |
| 1 | 已注册,本地网 |
| 2 | 未注册,正在搜索 |
| 3 | 注册被拒绝 |
| 5 | 已注册,漫游 |
发送:AT+CEREG?\r\n
回复:+CEREG: 0,1\r\n\r\nOK
// 状态1,说明已注册到本地网络
注意:如果返回状态3(注册被拒绝),别急着怀疑模组。先检查SIM卡是否欠费、是否开通了NB-IoT业务。我曾经被运营商后台配置坑过一次,折腾了整整一天。
4.4 常见错误码解析:遇到报错别慌
AT指令执行失败时,模组会返回错误码。最常见的错误码是“ERROR”和“+CME ERROR: <err>”。我整理了几个高频错误码,你遇到时可以直接对照。
| 错误码 | 含义 | 常见原因 |
|---|---|---|
| ERROR | 通用错误 | 指令格式错误、参数不对 |
| +CME ERROR: 3 | 操作不允许 | 模组处于非正常状态,比如正在搜网 |
| +CME ERROR: 4 | 操作不支持 | 当前固件版本不支持该指令 |
| +CME ERROR: 13 | SIM卡故障 | SIM卡未插入、损坏或没插好 |
| +CME ERROR: 100 | 未知错误 | 一般重启模组能解决 |
我个人的习惯是,在代码里对+CME ERROR做分类处理。比如遇到错误3,就延时重试;遇到错误13,直接上报SIM卡异常,不再重试。
避坑指南:我曾经在项目里遇到一个诡异问题——模组偶尔返回“+CME ERROR: 100”。查了半天,发现是电源纹波太大,导致模组瞬间掉电重启。后来加了滤波电容,问题就消失了。所以,遇到不明错误码,先检查硬件供电。
4.5 小结
AT指令是NB-IoT开发的基础。你只要记住三点:
- 格式要对——AT开头,\r\n结尾
- 基本指令要熟——AT、ATE、AT+CGMI这些,随手就能用
- 错误码要会看——别被ERROR吓到,对照表格一步步排查
下一章,我们会深入NB-IoT的核心——网络连接和数据收发。到时候,这些基础指令都会派上用场。嗯,先把今天的内容消化掉,后面就顺了。