4、AT指令基础:AT指令格式、常用AT指令分类(网络、数据、SIM卡)、AT指令交互流程、用串口助手调试AT指令
好,咱们进入第四章。这一章我打算聊聊AT指令。
说实话,AT指令这东西,看着简单,但坑不少。我刚入行那会儿,觉得不就是发几个字符串嘛,有啥难的?结果第一次调NB-IoT模组,愣是被一个回车换行符卡了一整天。嗯,咱们今天就把这些细节掰扯清楚。
4.1 AT指令长什么样?
AT指令,全称是Attention指令集。说白了,就是电脑(或MCU)跟模组说话的一种“暗号”。
它的格式非常固定。我习惯把它拆成三部分看:
- 前缀:永远是“AT”这两个字母,大小写都行,但我建议统一大写。
- 主体:具体的命令,比如+CSQ(查信号)、+CGATT(查网络附着)。
- 结束符:
<CR><LF>,也就是回车换行(\r\n)。
举个例子,查信号强度:
AT+CSQ\r\n
模组收到后,会回复:
\r\n+CSQ: 19,99\r\n\r\nOK\r\n
你看,回复也是带回车换行的。这个细节,很多新手会忽略。
4.2 常用AT指令分类
海思Boudica芯片支持的AT指令很多,但常用的就那几类。我按项目经验给你分个类:
4.2.1 网络类指令
这类指令,说白了就是查模组跟基站“聊得怎么样”。
| 指令 | 功能 | 典型回复 |
|---|---|---|
AT+CSQ |
查信号强度 | +CSQ: 19,99(19表示信号还行) |
AT+CGATT? |
查网络附着状态 | +CGATT: 1(1表示已附着) |
AT+COPS? |
查当前运营商 | +COPS: 0,0,"CHINA MOBILE" |
AT+CEREG? |
查网络注册状态 | +CEREG: 0,1(1表示已注册) |
我在项目中遇到过一个问题:信号强度显示20多,但就是发不出数据。后来发现是网络附着状态不对。所以,查信号之前,先确认AT+CGATT?返回的是1。
4.2.2 数据类指令
这类指令负责“怎么发数据、发给谁”。
| 指令 | 功能 | 说明 |
|---|---|---|
AT+NSOCR |
创建Socket | 相当于开一个网络端口 |
AT+NSOST |
发送数据 | 指定IP、端口、数据内容 |
AT+NSORF |
接收数据 | 从指定Socket读数据 |
AT+NPING |
Ping测试 | 看网络通不通 |
举个例子,发送“Hello”到服务器:
AT+NSOST=0,192.168.1.100,8080,5,48656C6C6F
注意,数据要转成十六进制字符串。“Hello”的十六进制就是“48656C6C6F”。
AT+NPING测一下服务器通不通,再发数据。省得数据发出去石沉大海。
4.2.3 SIM卡类指令
这类指令,说白了就是查“卡有没有问题”。
| 指令 | 功能 | 典型回复 |
|---|---|---|
AT+CPIN? |
查SIM卡状态 | +CPIN: READY(表示卡正常) |
AT+CCID |
查SIM卡唯一标识 | +CCID: 898601...1234 |
AT+CSIM |
通用SIM卡访问 | 一般用不到,调试时才用 |
我曾经遇到一个坑:模组死活连不上网,查了一圈,最后发现是SIM卡没插好。AT+CPIN?返回的是+CPIN: NOT INSERTED。嗯,从那以后,我调试的第一步就是查SIM卡。
4.3 AT指令交互流程
AT指令的交互,其实就是一个“一问一答”的过程。我画个简单的流程:
- 发指令:MCU发
AT+CSQ\r\n给模组。 - 模组处理:模组收到后,去查信号强度。
- 模组回复:模组返回
+CSQ: 19,99\r\nOK\r\n。 - MCU解析:MCU收到回复,提取出“19”这个信号值。
看起来简单吧?但实际项目中,有个问题很头疼:模组回复可能不是一次发完的。
比如,模组收到数据时,会主动上报:
\r\n+NSONMI: 0,10\r\n
意思是“Socket 0有10字节数据”。这时候,你正在发别的指令,回复就乱套了。
+NSONMI时,先暂停当前指令,去读数据。读完再继续。别用简单的“发一条等一条”方式,容易丢数据。
4.4 用串口助手调试AT指令
调试AT指令,串口助手是必备工具。我推荐用SSCOM或SecureCRT。设置很简单:
- 波特率:9600或115200,看模组规格。
- 数据位:8位。
- 停止位:1位。
- 校验位:无。
- 流控:无。
连接好后,先发一个AT\r\n测试。如果返回OK,说明通信正常。
我习惯的调试步骤:
- 发
AT,确认模组活着。 - 发
AT+CPIN?,确认SIM卡正常。 - 发
AT+CSQ,看信号强度。 - 发
AT+CGATT?,看网络附着状态。 - 发
AT+NSOCR,创建Socket。 - 发
AT+NSOST,发送数据。
每一步都确认返回OK或正确数据,再走下一步。别跳步,跳步容易出问题。
好了,这一章就到这里。AT指令看着简单,但用好了,能省不少调试时间。下一章咱们聊聊NB-IoT的入网流程,那个更有意思。
公众号:蓝海资料掘金营,微信deep3321