第1章 AT指令基础:AT指令格式、常用测试指令、模块固件版本查询、串口参数配置
各位工程师朋友,咱们开始聊NB-IoT模块的入网问题。在动手排查之前,有一件事必须得先搞定——那就是AT指令。说白了,AT指令就是你跟模块对话的“语言”。模块听不听得懂你,你问的问题对不对,全看这玩意儿用得熟不熟。
我个人习惯,拿到一个新模块,第一件事就是打开串口工具,敲几条AT指令试试水。这就像你买了个新手机,总得先开机看看能不能点亮屏幕吧?
1.1 AT指令的基本格式
AT指令的结构其实很简单。我直接给你拆开看:
AT<命令名>=<参数1>,<参数2>,...<参数n>
每个指令都以“AT”开头,后面跟着具体的命令和参数。模块收到后,会回复你一个结果。常见的回复有两种:
- OK —— 命令执行成功
- ERROR —— 命令执行失败,或者参数不对
嗯,这里要注意:AT指令必须用回车换行结尾(\r\n)。很多新手栽在这个坑里——明明指令写对了,就是没反应。你想想看,你说话不带句号,别人怎么知道你讲完了?
核心要点:每条AT指令必须以“AT”开头,以回车换行结束。模块返回的OK或ERROR,就是你的调试信号灯。
1.2 常用测试指令:先让模块“开口说话”
我记得刚入行那会儿,拿到一块NB-IoT模块,第一件事就是敲“AT”。如果模块回复“OK”,心里就踏实了一半。如果没反应,那就要开始排查串口配置、硬件连接了。
下面这几个指令,是我每次调试必用的:
| 指令 | 功能 | 典型回复 |
|---|---|---|
| AT | 测试模块是否正常响应 | OK |
| AT+CPIN? | 查询SIM卡状态 | +CPIN: READY |
| AT+CSQ | 查询信号强度 | +CSQ: 20,99 |
| AT+COPS? | 查询当前注册的运营商 | +COPS: 0,0,"CHINA MOBILE",7 |
| AT+CGATT? | 查询网络附着状态 | +CGATT: 1 |
我建议你把这些指令记在笔记本上,或者直接做成一个脚本。每次调试新模块,先跑一遍这个清单。我曾经遇到过一块模块,AT指令能通,但AT+CPIN?一直返回ERROR。折腾了半天,发现是SIM卡座接触不良。你看,一个简单的测试指令,就能帮你快速定位问题。
小技巧:如果AT+CSQ返回的信号值小于10,基本可以断定信号太弱,入网会非常困难。这时候别急着调模块,先看看天线接好了没,或者换个位置试试。
1.3 查询模块固件版本
为什么要查固件版本?因为不同版本的固件,支持的AT指令集可能不一样。我遇到过最坑的一次,客户说模块连不上网,我查了半天,最后发现是固件版本太老,连NB-IoT协议栈都没更新。
查询固件版本,一般用这个指令:
AT+CGMR
或者有些模块用:
AT+VER
回复的内容大概长这样:
+CGMR: "BC95B-02-STD_V100R001C20B300SP1"
OK
你看,这里面包含了模块型号、固件版本号、编译日期等信息。我个人习惯,每次拿到新模块,第一件事就是查版本号,然后去官网看看有没有更新。别嫌麻烦,这一步能省掉后面很多莫名其妙的坑。
避坑指南:我曾经遇到过一块模块,AT+CGMR返回的版本号跟官方文档对不上。后来发现是供应商发错了货,发成了旧版本。所以,查版本号不只是为了确认功能,也是为了确认你拿到的是不是对的货。
1.4 串口参数配置
串口配置,说白了就是让模块和你的MCU“说同一种语言”。常见的参数有:
- 波特率:常见的有9600、115200、230400等
- 数据位:通常是8位
- 停止位:通常是1位
- 校验位:无校验(NONE)最常见
模块出厂时,默认的串口参数一般是:115200、8、1、NONE。但有些模块默认是9600,这个得看具体型号的数据手册。
如果你想修改串口参数,可以用这个指令:
AT+IPR=115200
或者有些模块用:
AT+UART=115200,8,1,0,0
嗯,这里要特别提醒你:修改波特率之后,模块会立即生效。如果你改了波特率,但忘记更新串口工具的设置,那模块就“失联”了。我刚开始做项目时就犯过这个错——改了波特率,然后怎么敲AT都没反应,还以为模块坏了。
经验之谈:修改串口参数前,先把当前配置记下来。万一改错了,还能恢复。我一般会在代码里加一个“恢复出厂设置”的指令,比如AT&F,这样万一搞砸了,还能救回来。
1.5 实战小贴士:我的调试流程
最后,我分享一下我个人的调试流程,供你参考:
- 上电后等3秒——模块启动需要时间,别急着敲指令
- 敲AT——确认模块活着
- 查版本号——确认固件版本对不对
- 查SIM卡——AT+CPIN? 确认卡没问题
- 查信号——AT+CSQ 确认信号强度
- 查网络——AT+CGATT? 确认是否附着成功
这套流程走下来,大部分问题都能暴露出来。如果还不行,那就要深入排查了——比如天线匹配、电源纹波、甚至模块本身有没有虚焊。这些内容,咱们后面的章节会慢慢聊。
好了,这一章就到这里。AT指令是基本功,别觉得简单就跳过。我见过太多工程师,问题出在最基础的指令上,却跑去查复杂的协议栈。记住:基础不牢,地动山摇。下一章,咱们聊聊模块入网的核心流程,看看模块到底是怎么一步步连上基站的。