第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 实战小贴士:我的调试流程

最后,我分享一下我个人的调试流程,供你参考:

  1. 上电后等3秒——模块启动需要时间,别急着敲指令
  2. 敲AT——确认模块活着
  3. 查版本号——确认固件版本对不对
  4. 查SIM卡——AT+CPIN? 确认卡没问题
  5. 查信号——AT+CSQ 确认信号强度
  6. 查网络——AT+CGATT? 确认是否附着成功

这套流程走下来,大部分问题都能暴露出来。如果还不行,那就要深入排查了——比如天线匹配、电源纹波、甚至模块本身有没有虚焊。这些内容,咱们后面的章节会慢慢聊。

好了,这一章就到这里。AT指令是基本功,别觉得简单就跳过。我见过太多工程师,问题出在最基础的指令上,却跑去查复杂的协议栈。记住:基础不牢,地动山摇。下一章,咱们聊聊模块入网的核心流程,看看模块到底是怎么一步步连上基站的。