AT命令集详解_at命令详解

AT命令集详解_at命令详解1.AT的历史与应用   1.1AT的历史AT命令集是由拨号调制解调器(MODEM)的发明者贺氏公司(Hayes)为了控制Modem发明的控制协议.AT是Attention的缩写,协议本身采用文本.每个命令均以AT打头,因此得名.这段历史参见http://en.wikipedia.org/wiki/Hayes_command_set 随着网络升级为宽带,速度很低拨号MODEM

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定


1.AT的历史与应用
 
  
1.1 AT的历史
AT命令集是由拨号调制解调器(MODEM)的发明者贺氏公司(Hayes)为了控制Modem发明的控制
协议.AT是Attention的缩写,
协议本身采用文本.每个命令均以AT打头,因此得名.这段历史参见
http://en.wikipedia.org/wiki/Hayes_command_set
 
随着网络升级为宽带,速度很低拨号MODEM基本已经退出一般使用市场.我最近一次看见使用拨号MODEM的地方是深圳市的网络报税系统.必要拨号到税务局的
服务器才能使用。也就在这个很小的市场才留到一点空间。其余一般都用上ADSL的modem了。
AT命令集详解_at命令详解

贺氏公司象很多发明伟大的产品的公司一样,在发明了划时代的MODEM产品后,没有进一步升级技术。现在已经于1999年破产消失了,类似的例子有发明浏览器的Netscape,第一个成为网络操作系统的Novell公司,现在都已经边缘化了。
关于Hayes的破产,还能找到一个旧闻
http://news.sina.com.cn/richtalk/news/tech/9901/010704.html
但是有意思,http://www.hayes.com仍在销售产品,难到又活过来了?
 
但是AT命令保留下来了。主要的移动电话生产厂商诺基亚、爱立信、摩托罗拉和HP共同为GSM 研制了一整套AT指令,用于控制手机GSM模块。其中就包括对SMS的控制。AT指令在此基础上演化并被加入GSM 07.05标准以及现在的GSM07.07标准。
在随后的GPRS控制,3G模块,以及工业上常用的PDU,均采用AT命令集来控制,这样AT命令实际在这一些产品上成为事实的标准。
 
  
1.2 AT的优点
 
命令简单易懂,并且采用标准串口来收发AT命令,这样对设备控制大大简化了,转换成简单串口编程了。
AT命令提供了一组标准的硬件接口–串口。这个简化的硬件设计.较新的电信网络模块,几乎都采用串口硬件接口。
AT命令功能较全,可以通过一组命令完成设备的控制,完成呼叫、短信、电话本、数据业务、传真.
    
1.
3 AT命令与ppp协议的关系
 
在数据通讯的应用中,比如说无线拨号上网。除了AT命令,还会常听到另外一个网络协议ppp(Point to Point Protocol)。
 
在应用串口通讯的场合,我们可以从硬件上明确看到分为两大块。
 
DTE(Data Terminal Equipment)数据终端设备。通常是一个智能设备,如PC机,
嵌入式主机等,用于发送AT命令和PPP命令,
还有用于链路通讯的DCE(Data Circuit Terminal )数据电路终端。用于与外界建立通讯的链路。
DTE与DCE之间用串口相连。比如PC机用串口接入拨号MODEM时,PC机是DTE,拨号MODEM是DCE.
 
AT和PPP的相同点都是由DTE发送给DCE的协议。不同点是AT只用于DTE来控制DCE。比如初始化设备,用于发送呼叫,发送短消息等,虽然AT有规范,但是大部分DTE产商都扩展了一些AT命令。
 
而PPP是用于数据通讯,是DTE与远程的接入服务器(Access Server)进行通讯的协议。是属于网络通讯的数据链路层协议,DCE本身收到PPP包时,除了将其调制到物理层上发送到远端服务器外,本身并不处理PPP的内容。
AT命令集详解_at命令详解

 
2.AT的命令格式
  AT指令格式:AT指令都以”AT”开头,以<CR>(即\r,回车符)结束,模块运行后,串口默认的设置为:8位数据位、1位停止位、无奇偶校验位、硬件流控制(CTS/RTS).
  注意为了发送AT命令,最后还要加上<LF> (即\n,换行符)这是串口终端要求.
  有一些命令后面可以加额外信息来.如电话号码
 
  每个AT命令执行后,通常DCE都给状态值,用于判断命令执行的结果.
 
  AT返回状态包括三种情况 OK,ERROR,和命令相关的错误原因字符串.返回状态前后都有一个<CR>字符.
   如 
<CR>OK<CR> 表示AT命令执行成功.
    
 <CR>ERROR<CR> 表示AT命令执行失败
     
<CR>NO DIAL TONE<CR> 只出现在ATD命令返回状态中,表示没有拨号音,这类返回状态要查命令手册
 
   还有一些命令本身是要向DCE查询数据,数据返回时,一般是+打头命令.返回格式
    <CR>+命令:命令结果<CR>
如:
AT+CMGR=8 (获取第8条信息)
  返回
 +CMGR: “REC UNREAD”,”+8613508485560″,,”01/07/16,15:37:28+32″,Once more
  
 
3.DCE的状态切换与AT的命令拨号流程
 
  这两个协议都是DTE通过串口发往DCE。那DCE是如何区别是AT命令,如何区别PPP协议包?大部分DCE是采用分时段传送的,两个协议并不同时发送。但是可以通过AT命令两个专用命令来用切换是AT命令时段,还是PPP协议时段。
 
在发送AT命令时称为命令状态,在发送PPP包时或者语音通讯时称为数据状态。
 
在modem设备启动进,默认进入AT命令接收状态,用
ATDn ;命令拨出电话号码n(语音拨号);
ATDn 拨出电话号码n(数据拨号),两者区别在于前者有一个分号。用数据拨号拨通后,将进入PPP交互状态。当需要切回接收AT命令状态,DTE需要发送+++命令给DCE.让其保持在线的状态时,但接收是AT命令.如果此时需要切断链接,此时发送
ATH挂断命令.
  注意发送+++需要前后各一秒的时间。否则会当成数据发送出去。
 
  ATO则是把在线命令状切换到数据接收状态。
 
AT命令集详解_at命令详解

 
 
 
一个DCE的拨号流程是
 
 
3.1.初始化DCE的Modem设备
    主要DTE要配置好串口参数,并且向设备发送一些AT命令来进行初始化设置
 
  •     行软复位的需执行”ATZ\r”命令;
  •    禁止命令回显需执行”ATE0\r”命令;
  •    要使返回结果码为数字形式则要执行”ATV0\r”;
  •    需要设置S 寄存器的需执行”ATSn=X\r”等等。
 3.2 拨号连接
   AT拨号连接分语音拨号连接和数据拨好连接。语音拨号命令为”ATDn;\r”(注意带分号);数据拨号命令为”ATDn\r”(注意不带分号)。连接成功返回”\r\nCONNECTXXXX/RLP\r\n”,其中XXXX 表示连接速率。在这里我们只讨论数据拨号连接。要注意的是拨号连接需要一定的时间,编程时要根据实际情况进行适当的延时等待。
 
3.3 数据传输及处理
     在建立起连接后用户就可通过DCE进行数据发送、接收及数据处理操作。这时发送数据就是简单的写串口,收数据是读串口,即使数据中含有AT 命令字符串DCE也不会对其进行处理。此时进行PPP拨号处理流程了。


3.4  从数据状态切换至在线命令状态

   数据收发结束后,就要使DCE从数据状态切换至在线命令状态。向DCE发送换码序列命令”+++”,并且前后各有至少一秒的延迟(不向TC35 发数据),可使DCE从数据状态切换至在线命令状态,否则DEC会将”+++”当作数据发送出去。在离线命令状态时发送”ATO\r”可回到数据状态。


3.5  挂断连接

   挂断连接(即挂机)是向DCE发送”ATH\r”
 
 
4.常用AT命令
 
    不同产商的AT命令大同小异,但是还是有所区别,一般要看产品手册,如下列产商的
   西门子 TC35i 的 
http://www.sendsms.cn/download/TC35i_AT_C.pdf
 
   这里罗列一些常见的AT命令
   
4.1 基本操作
1.1 AT 

命令解释:检测Module与串口是否连通,能否接收AT命令;

命令格式:AT<CR>

命令返回:OK (与串口通信正常)(无返回,与串口通信未连通)
 
1.2 AT+CSQ

命令解释:检查网络信号强度和SIM卡情况

命令格式:AT+CSQ<CR>

命令返回:+CSQ: **,##

          其中**应在10到31之间,数值越大表明信号质量越好,##应为99。

          否则应检查天线或SIM卡是否正确安装

测试结果:AT+CSQ<CR>

          +CSQ: 31, 99

          信号强度值会有少许变化,用手遮住天线,信号强度值会下降(大致在26左右)。
1.3 ATZ 
命令解释:恢复原厂设置

命令格式:ATZ<CR>

命令返回:OK


1.4 AT+CGMR
命令解释:查询模块版本;

命令格式:AT+CGMR<CR>

命令返回: <revision >

         +CMEERROR <err>

测试结果:AT+CGMR<CR>

         R4A021      CXC1122528

          OK

解释:模块版本号为R4A021


1.5 AT+IPR

命令解释:修改串口1波特率;

命令格式:AT+IPR=<value ><CR>

命令返回: ERROR 

OK 

测试结果:AT+IPR=19200<CR>

OK

注意:串口波特率修改为19200后要把串口调试工具的波特率设为相应

波特率后模块才会有返回


1.6 AT&W 

命令解释:保存模块设置;

命令格式:AT&W<CR>

命令返回: OK

ERROR(保存不成功)

测试结果:AT&W <CR>

OK
4.2、通话操作


2.1ATD 
命令解释:拨打电话

命令格式:ATD**********;<CR>(****为电话号码)

命令返回:OK

NO DIAL TONE(没有拨号音)

NO CARRIER(无载波)

测试结果:a. ATD13510090403;<CR>

OK

呼叫成功;
b. ATD13510090403;<CR>

NO DIAL TONE

天线未接好,接触不良;

c. ATD13510090403<CR>

NO CARRIER

命令错误,缺{;};
2.2 RING

命令解释:有电话呼入

命令格式:

命令返回:无


2.3 ATA
命令解释:摘机

命令格式:ATA<CR>

命令返回:OK

测试结果:RING

RING

ATA<CR>

          OK

          接通电话;


2.4 ATH
命令解释:挂机

命令格式:ATH<CR>

命令返回:OK

测试结果:ATH<CR>

          OK

          电话挂断(通话过程中);


2.5 AT+CHUP
命令解释:挂机

命令格式:AT+CHUP<CR>

命令返回:OK

测试结果:RING

ATH<CR>

OK

电话挂断(尚未接通来电);


2.6AT+VTS
命令解释:拨打分机

命令格式:AT+VTS=“分机号码”<CR>

命令返回:OK

测试结果:

AT+VTS=“0”<CR>

OK


4.3、短信息操作

  短信操作步骤及相关命令:

(1) 设置短信格式——AT+CMGF

(2) 设置短信存储载体——AT+CPMS

(3) 设置短信接收提示方式——AT+CNMI

(4) 发送短信——AT+CMGS

(5) 显示短信——AT+CMGL


3.1 AT+CPMS

命令解释:选择短信存储载体

3.1.1命令格式:AT+CPMS=<mem1>[,<mem2>][,<mem3>]

设置短信存储载体

命令返回:+CPMS:<used1>,<total1>,<used2>,<total2>,<used3>,<total3>

          OK

          ERROR

测试结果:a. AT+CPMS=”SM”

           +CPMS: 8,15,8,15,1,40

           OK

           设置成功,并显示状态:SM(SIM卡)存储器总容量为15,当前存储量8;

           ME(模块)存储器总容量为40,当前存储量1;mem1定义为SM;

         b. AT+CPMS=”SM”,”SM”

           +CPMS: 8,15,8,15,1,40

           OK

           设置成功,并显示状态:SM存储器总容量为15,当前存储量8;

           ME存储器总容量为40,当前存储量1;mem1定义为SM;mem2

           定义为SM;

         c. AT+CPMS=”SM”,”SM”,”SM”

           +CPMS: 8,15,8,15,8,15

           OK

           设置成功,并显示状态:SM存储器总容量为15,当前存储量8;

           ME存储器总容量为40,当前存储量1;mem1定义为SM;mem2

           定义为SM;mem3定义为SM;

         d. AT+CPMS=”ME”,”SM”,”SM”

           +CPMS: 1,40,8,15,8,15

           OK

           设置成功,并显示状态:SM存储器总容量为15,当前存储量8;

           ME存储器总容量为40,当前存储量1;mem1定义为ME;mem2

           定义为SM;mem3定义为SM;

         e. AT+CPMS=”ME”,”SM”,”ME”

           +CPMS: 1,40,8,15,1,40

           OK

           设置成功,并显示状态:SM存储器总容量为15,当前存储量8;

           ME存储器总容量为40,当前存储量1;mem1定义为ME;mem2

           定义为SM;mem3定义为ME;

         f. AT+CPMS=”ME

           ERROR

           命令格式错误,缺少{”};

3.1.2命令格式:AT+CPMS?

          显示当前短信存储载体设置

命令返回:+CPMS:<mem1>,<used1>,<total1>,<mem1>,<used2>,<total2>,

                     <mem1>,<used3>,<total3>

          OK

          ERROR

测试结果:a. AT+CPMS?

            +CPMS: “SM”,8,15,”SM”,8,15,”ME”,1,40

            OK

            当前短信存储载体设置为:mem1为SM,mem2为SM,mem3

            为ME;

          b. AT+CPMS!

             ERROR

             命令错误;

3.1.3命令格式:AT+CPMS=?

          显示本命令支持的参数

命令返回:+CPMS: (list of supported<mem1>s),(list of supported<mem2>s),

                    (list of supported<mem3>s)

          OK

          ERROR

测试结果:AT+CPMS=?

          +CPMS: (“ME”,”SM”),(“ME”,”SM”),(“ME”,”SM”)

          OK


3.2 AT+CMGF
命令解释:设置短信格式

3.2.1命令格式:AT+CMGF=<mode>

命令返回:OK

          ERROR

               设置短信格式

3.2.2命令格式:AT+CMGF=?

命令返回:OK

          ERROR

          显示本命令支持的参数

3.2.3命令格式:AT+CMGF?

命令返回:OK

          ERROR

          显示当前短信格式

测试结果:AT+CMGF=?

+CMGF: (0,1)

OK
AT+CMGF?

+CMGF: 0

OK
AT+CMGF=1

OK
AT+CMGF?

+CMGF: 1

OK

    


3.3 AT+CMGS

命令解释:发送短信

命令格式:AT+CMGS=<da>[,<toda>]<CR>

          Text is entered<ctrl-z/ESC>

命令返回:+CMGS:<mr>[,<scts>]

          +CMS ERROR:<err>

          OK

          ERROR

测试结果:a. AT+CMGS=13510090403<CR>

          >ABCD1234.456<ctrl-z>

          +CMS ERROR:500

          命令错误;

        b. AT+CMGS=”13510090403″<CR>

> IT IS TEST NOW<ctrl-z>

+CMGS: 235

OK


3.4 AT+CMGR
命令解释:读短信

命令格式:AT+CMGR=<indes>

命令返回:+CMGS:<stat>,[<alpha>],<length>]<CR><LF><pdu>

          +CMS ERROR:<err>

          OK

          ERROR

测试结果:a. AT+CMGR=5

          +CMS ERROR:500

          命令错误,5号短信位置为空;

        b. AT+CMGR=2

+CMGL: 2,”REC READ”,”+8613682326205″,”N?R”,”03/08/28 17:30:35+00″

998B76844F60002E518D5FCD5FCD5427+CMGS: 235

OK

读出2号短信;


3.5 AT+CMGW
命令解释:写短信,并保存到存储载体

命令格式:AT+CMGW=<length>[,<stat>]<CR>

命令返回:+CMGS:<index>

          +CMS ERROR:<err>

          OK

          ERROR

测试结果:AT+CMGW=”13534139079″<CR>

> SHELLEY123456<ctrl-z>

+CMGW: 1

OK

把目标地址为13534139079的短信存入存储载体,且被分配的地址

为1号短信;


3.6 AT+CMGD
命令解释:删除短信

命令格式:AT+CMGD=<index>

命令返回:+CMS ERROR:<err>

          OK

          ERROR

测试结果:AT+CMGD=1

          OK

          1号短信被删除;


3.7 AT+CMGL
命令解释:显示短信清单

命令格式:AT+CMGL=<stat>

命令返回:+CMGL:<index1>,<stat>,<oa/da>,[<alpha>],[<scts>] [,<tooa/toda>,<length>]

<CR><LF><data>[<CR><LF>

测试结果:见总测试结果;


3.8 AT+CMSS
命令解释:发送存储载体中的短信

命令格式:AT+CMSS=<index>

命令返回:+CMSS:<mr>

+CMS ERROR:<err>

OK

ERROR

测试结果:AT+CMSS=2

+CMSS: 204

OK


3.9AT+CNMI
命令解释:新短信提示

3.9.1命令格式:AT+CNMI=[<mode>[,<mt>[,<bm>[,<ds>]]]]

命令返回:OK

  ERROR

测试结果:AT+CNMI=3,2

  OK

3.9.2命令格式:AT+CNMI?

命令返回:+CNMI:<mode>,<mt>,<bm>,<ds>

OK

ERROR

测试结果:AT+CNMI?

  +CNMI: 3,2,0,0

  OK

3.9.3命令格式:AT+CNMI=?

命令返回:+CNMI:(list of supported<mode>s), (list of supported<mt>s), (list of supported<bm>s),
(list of supported<ds>s) 

OK

ERROR

测试结果:AT+CNMI=3,2

OK


 4.4、语音部分:
 


  
4.1 AT*E2EAMS
  命令解释:设定音频工作参数(修改语音通道)

   4.1.1  命令格式:AT*E2EAMS=<OP >,<NUM >,<VAL >

     命令返回:OK

         ERROR

     测试结果:<OP>为N在1-20之间,表示设置第N个参数

       AT*E2EAMS=9,2(把模块的语音MIC通道设定为手柄)

       OK

       AT*E2EAMS=10,2(把模块的语音SPK通道设定为手柄)

       OK

       <OP >为0表示设置所有参数

 AT*E2EAMS=0,2,1,2,0,0,2,5,9,2,2,0,1,0,0,0,1,1,0,0,1

 OK

      <OP >为255表示要保存设置

      AT*E2EAMS=255

 OK


4.5、GPS接口:

 
5.1 AT*EENMEA

 命令解释:设定GPS数据使能

命令格式:AT*EENMEA=<val >

命令返回:OK

    ERROR

测试结果:

AT*EENMEA=0 (不接受串口2发来的NMEA数据)

OK

AT*EENMEA=2 (接受来自串口2的NMEA数据)

OK


5.2 AT*E2NMPR
命令解释:设定串口2发送GPS数据的波特率 

 5.2.1命令格式:AT*E2NMPR=<val >

命令返回:OK

          ERROR

测试结果:AT+CNMI=5 (设定串口2的波特率为19200)

OK
 

 
5.编程控制AT命令.
   
5.1 Windows的串口编程

 

              
              
              
  1. #include < windows.h > 
  2.  
  3. HANDLE hCom = ((HANDLE)(0)); 
  4.  
  5. int main() 
  6.   DCB dcb; 
  7.   unsigned long int n = 0; 
  8.   char * str = "COM1"
  9.  
  10.   hCom = CreateFile( str, (GENERIC_READ | GENERIC_WRITE), 
  11.                      0, NULL, OPEN_EXISTING, 0, NULL ); 
  12.  
  13.   GetCommState ( hCom, (&(dcb)) ); 
  14.  
  15.   dcb.BaudRate = CBR_9600; 
  16.   dcb.ByteSize = 8; 
  17.   dcb.Parity = NOPARITY; 
  18.   dcb.StopBits = ONESTOPBIT; 
  19.  
  20.   SetCommState ( hCom, (&(dcb)) ); 
  21.  
  22.   WriteFile( hCom, "ATM2\r", strlen("ATM2\r"), (&(n)), 0 ); 
  23.   FlushFileBuffers( hCom ); 
  24.   Sleep(1000); 
  25.  
  26.   WriteFile( hCom, "ATH1\r", strlen("ATH1\r"), (&(n)), 0 ); 
  27.   FlushFileBuffers( hCom ); 
  28.   Sleep(1000); 
  29.  
  30.   WriteFile( hCom, "ATDT5551212;\r", strlen("ATDT5551212;\r"), (&(n)), 0 ); 
  31.   FlushFileBuffers( hCom ); 
  32.   Sleep(3000); 
  33.  
  34.   WriteFile( hCom, "ATH0\r", strlen("ATH0\r"), (&(n)), 0 ); 
  35.   FlushFileBuffers( hCom ); 
  36.   Sleep(1000); 
  37.  
  38.   WriteFile( hCom, "ATM0\r", strlen("ATM0\r"), (&(n)), 0 ); 
  39.   FlushFileBuffers( hCom ); 
  40.   Sleep(1000); 
  41.  
  42.   CloseHandle( hCom ); 
  43.  
  44.   return(0); 

Jetbrains全家桶1年46,售后保障稳定

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/210441.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号