偶然发现GitHub上的一个对AT指令的封装,膜拜
https://github.com/MaJerle/GSM_AT_commands_parser/blob/master/00-GSM_LIBRARY/gsm.c
1.AT指令概述
来源:http://www.rosoo.net/a/201011/10451.html
1.1由来
AT命令集是由拨号调制解调器(MODEM)的发明者贺氏公司(Hayes)为了控制Modem发明的控制协议.AT是Attention的缩写,协议本身采用文本.每个命令均以AT打头,因此得名。
AT指令,用于控制手机GSM模块。其中就包括对SMS的控制。AT指令在此基础上演化并被加入GSM 07.05标准以及现在的GSM07.07标准。在随后的GPRS控制,3G模块,以及工业上常用的PDU,均采用AT命令集来控制,这样AT命令实际在这一些产品上成为事实的标准。
1.2优点
命令简单易懂,并且采用标准串口来收发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的内容。
2.AT指令命令格式
2.1命令格式
AT指令都以”AT”开头,以(即\r,回车符)结束,模块运行后,串口默认的设置为:8位数据位、1位停止位、无奇偶校验位、硬件流控制(CTS/RTS)。
注意为了发送AT命令,最后还要加上 (即\n,换行符)这是串口终端要求。
有一些命令后面可以加额外信息来:如电话号码
每个AT命令执行后,通常DCE都给状态值,用于判断命令执行的结果。
2.2返回格式
AT返回状态包括五种情况 OK,ERROR,命令相关的错误原因字符串和一些的特殊的字符,比如“>”提示输入。
返回状态前后都有一个CR字符.
如 <CR>OK<CR>表示AT命令执行成功.
<CR>ERROR<CR>表示AT命令执行失败
<CR>NO DIAL TONE<CR>只出现在ATD命令返回状态中,表示没有拨号音,这类返回状态要查命令手册
2.3实测
我看大家都是这么说,但我测了一下,我用的模块是SIM5360F,得到了这样的结果。返回的字串中分别以两个回车开头和结尾。有没有知道的,交流下。可能跟具体的产品有关吧。所以建议,使用时还是测一下。
执行AT和AT+CPIN?,返回如下
2.4查询命令
还有一些命令本身是要向DCE查询数据,一般:
(1)、 测试命令(Test Command)在AT指令后面加上“=?”即构成测试命令。例如“AT+CSCS=?”会列举出所有支持的字符集。
(2)、 读取命令(Read Command)在AT指令后面加上“?”即构成读取命令。例如“AT+CSCS?”会列举出当前设置。
数据返回时,一般是+打头命令,返回格式
+命令:命令结果
如:AT+CMGR=0 (获取内存下标为0的信息)
(3)、 执行命令(Execute Command)一般而言在AT指令后加上“=”及命令参数即可。有些命令例如AT+CMGR命令没有参数,直接就可以执行。
注:并不是所有的AT指令都支持(1)和(2)。
3.AT指令发短信两种模式
短信的编码方式有两种:text模式,pdu模式。因此短信的AT指令执行格式也有两种,分别对应text模式和pdu模式。
1 . Text模式
纯文本模式,支持不同的字符集,从技术上说也可用于发送中文短消息,但国内手机基本上不支持,主要用于欧美地区。
2 . Pdu模式
这个是手机默认的编码方式,可以使用任何字符集,其包括三种编码方式:7bit编码,8bit编码,UCS2编码。
7bit编码:ASCⅡ码就是7bit编码。
8bit编码:ASCⅡ字符可以使用7位二进制表示,但是由于计算机的基本处理单位是字节(1byte=8bi