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

你看,回复也是带回车换行的。这个细节,很多新手会忽略。

注意: 串口调试时,一定要勾选“发送新行”或手动加\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指令的交互,其实就是一个“一问一答”的过程。我画个简单的流程:

  1. 发指令:MCU发AT+CSQ\r\n给模组。
  2. 模组处理:模组收到后,去查信号强度。
  3. 模组回复:模组返回+CSQ: 19,99\r\nOK\r\n
  4. 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,说明通信正常。

我习惯的调试步骤:

  1. AT,确认模组活着。
  2. AT+CPIN?,确认SIM卡正常。
  3. AT+CSQ,看信号强度。
  4. AT+CGATT?,看网络附着状态。
  5. AT+NSOCR,创建Socket。
  6. AT+NSOST,发送数据。

每一步都确认返回OK或正确数据,再走下一步。别跳步,跳步容易出问题。

注意: 串口助手发送时,一定要勾选“发送新行”。否则模组收不到结束符,不会回复。我见过有人卡在这里一整天。

好了,这一章就到这里。AT指令看着简单,但用好了,能省不少调试时间。下一章咱们聊聊NB-IoT的入网流程,那个更有意思。


公众号:蓝海资料掘金营,微信deep3321