AT指令

AT即Attention,AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter, TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。通过TA,TE发送AT指令来控制移动台(Mobile Station,MS)的功能,与GSM 网络业务进行交互。用户可以通过AT指令进行呼叫、短信、电话本、数据业务、传真等方面的控制。

GSM 模块与计算机之间的通信协议是一些AT指令集,AT指令是以AT作首, 字符结束的字符串。每个指令执行成功与否都有相应的返回。其他的一些非预期的信息(如有人拨号进来、线路无信号等),模块将有对应的一些信息提示,接收端可做相应的处理。 

一、AT格式

1. 基本命令格式

AT指令都以“AT”或“at”开头,不区别大小写,以<CR>结束。

AT指令的返回结果都是<CR><LF>开头和结尾。

注:<CR>回车carriage return, 0xd; <LF>换行line feed, 0xa

AT 指令作为一个接口标准,它的指令返回值和格式都是固定的,总体来说有四种形式:

1)无参数指令: 一种简洁的指令,格式: AT[+ |&]<command>
举例: AT+CSQ、 AT&W
注意:部分 AT 指令支持无参数为设置缺省值。

2)查询指令: :查询该指令当前设置的值,格式: AT[+ |&]<command>?
举例: AT+CNMI?

3)帮助指令:列出该指令的可能参数,格式: AT[+ |&]<command>=?
举例: AT+CMGL=?

4)带参数指令:比较常用的一种格式,它为指令提供了强大的灵活性。
格式: AT[+ |&]<command>=<par1>,<par2>,<par3>…
这种指令的返回值根据不同的指令是不一样的,返回值的基本框架格式为:
<CR><LF><回应字串><CR><LF>
<CR><LF><OK/ERROR>[ERROR 信息]<CR><LF>
注:AT 指令缓存最大为 80 字节,假如 AT 指令内容超过的该字节,指令不会被执行且 TA 将返回 ERROR。

2. AT指令返回类型及其结果码

命令返回值包括两部分:返回结果码和返回信息字段。

+CMD1?的返回值 <CR><LF>+CMD1:2,1,10<CR><LF>
+CMD1=?的返回值 <CR><LF>+CMD1: (0-2),(0,1),(0-15)<CR><LF>
最终返回结果 <CR><LF>OK<CR><LF>

此外,模组还有另外两种类型的返回结果码:
1)关于 TA 操作过程的返回结果码,如连接建立 CONNECT
2)事件报告型结果码,当网络侧下发事件时,模组处理事件,并将事件报告用户,如收到短信等

下表是 ITU-T V25Ter specification 的基本的结果码类型:

Result Codes (UNDEFINED)
数字型 字符型
0 OK
1 CONNECT
2 RING
3 NO CARRIER
4 ERROR
6 NO DIAL TONE
7 BUSY
8 NO ANSWER

3. 命令响应超时

高新兴物联模组支持的所有 AT 指令在下发之后,模组内部均需要一定时间进行处理及响应,相应时长取决于具体 AT 指令类型。
与 SIM/UIM 卡及网络没有交互且只在模组内部进行相关设置或者读写的 AT 指令,一般会立即响应并返回。

4. AT命令机制

模组 AT 命令处理机是串行机制,只有在上条 AT 指令处理完毕且返回完整结果码之后才能下发下一条指令,否则可能导致不可知错误。

在命令模式下,当设置为自动波特率时,模组串口及 AP 应用侧之间可能会出现字符丢失。因此,在模组交互前需要通过 AT+IPR 进行波特率设置。

发送AT,带回显返回:

AT<CR>

AT<CR><CR><LF>OK<CR><LF>

0x41 0x54 0xd 0x0
0x41 0x54 0xd 0xd 0xa 0x4f 0x4b 0xd 0xa 0x0

二、常用AT命令

不同产商的AT命令大同小异,但是还是有所区别,如果有不同的就需要看产品手册。

1、基础
检测Module与串口是否连通,能否接收AT命令: AT

打开回显:ATE

查看SIM卡是否到位: AT+CPIN?

测试信号: AT+CSQ

查看运营商: AT+COPS?   // +COPS:0,0”CHN-CUGSM”,2

获取模块标识: AT+CGMM

获取模块厂商标识: AT+CGMI

查看SIM卡是否到位: AT+CPIN?

网络注册,获得手机的注册状态: AT+CREG?  //+CREG:0,1   未初始化为0,0 激活后为0,1或0,5

激活网络:AT+CGACT=1,1

获取SIM卡上IMSI以判断运行商:AT+CIMI

2、拨打电话
拨打电话: ATD电话号码;

来电显示: AT+CLCC(有电话打过来串口会打印RING提示。)

接电话: ATA

挂电话: ATH

挂电话尚未接通的来电: AT+CHUP

3、发短信
短信的编码方式有两种:text模式,pdu模式。因此短信的AT指令执行格式也有两种,分别对应text模式和pdu模式。

1)Text模式

纯文本模式,支持不同的字符集,从技术上说也可用于发送中文短消息,但国内手机基本上不支持,主要用于欧美地区。

2)Pdu模式

这个是手机默认的编码方式,可以使用任何字符集,其包括三种编码方式:7bit编码,8bit编码,UCS2编码。

7bit编码:ASCⅡ码就是7bit编码。

8bit编码:ASCⅡ字符可以使用7位二进制表示,但是由于计算机的基本处理单位是字节(1byte=8bit),所以一般在高位补0,用一个字节表示一个ASCⅡ字符。这就是8bit编码。

UCS2编码:处理Unicode字符,使用2个字节来表示一个字符,可以表示世界上所有的字符。发送中文就是使用此编码方式。

发英文短信
设置信息格式: AT+CMGF=1 (格式有TEXT方式和PDU方式。AT+CMGF=1时是TEXT方式,AT+CMGF=0是PDU方式)
发送短信: AT+CMGS="电话号码"
>data       //下一行出现>后面跟的data 为发送内容(以ctrl+z(0x1A)结束)

设置收到短消息提示: AT+CNMI=1,1,2

设置存储区域为SM: AT+CPMS=”SM”

读取短信: AT+CMGR=index(index为读第几条短信)

发中文短信

设置信息格式: AT+CMGF=0

发中文短信这里暂时也不去了解,发中文短信可以参考:https://blog.csdn.net/a_tu_/article/details/47808017

4、+++

命令解释:切换数据模式到 AT 命令状态

命令格式:+++ (+之间间隔 1秒,即+号要分开发不能连续发)

三、手机应用

拨号上网

现在拨号号码一般不太重要,一般都是*99#--------ATD*99#

APN不同:

移动、联通的APN:CMNET
电信:CTNET
-------------------------AT+CGDCONT=1,"IP","CMNET"

ICCID

集成电路卡识别码即SIM卡卡号,相当于手机号码的身份证。 ICCID为IC卡的唯一识别号码,共有20位数字组成,其编码格式为:XXXXXX 0MFSS YYGXX XXXX。分别介绍如下: 前六位运营商代码:中国移动的为:898600;898602;898604;898607 ,中国联通的为:898601、898606、898609,中国电信898603、898611。

有不少丢友通过iccid找回方法找回了自己的iphone,简单的描述就是当窃贼盗取手机之后进行刷机激活,会将手机卡的iccid上传到服务器,通过某种渠道可以查询到刷机时间和iccid,通过运营商解析号码从而了解到手机的去向。但实际上很难翻译成手机号,营业厅一般人员没有权限,即使有,因涉及个人隐私很难查出来。并且,盗窃团伙在进行刷机时大都使用不计名SIM卡或境外卡进行刷机,所以查询所得到的iccid对于找回手机基本没有可利用价值。

IMSI

国际移动用户识别码(IMSI:International Mobile SubscriberIdentification Number)是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。

可通过获取手机的IMSI码判断是中国移动\中国联通\中国电信。

TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        /** 获取SIM卡的IMSI码
         * SIM卡唯一标识:IMSI 国际移动用户识别码(IMSI:International Mobile Subscriber Identification Number)是区别移动用户的标志,
         * 储存在SIM卡中,可用于区别移动用户的有效信息。IMSI由MCC、MNC、MSIN组成,其中MCC为移动国家号码,由3位数字组成,
         * 唯一地识别移动客户所属的国家,我国为460;MNC为网络id,由2位数字组成,
         * 用于识别移动客户所归属的移动网络,中国移动为00,中国联通为01,中国电信为03;MSIN为移动客户识别码,采用等长11位数字构成。
         * 唯一地识别国内GSM移动通信网中移动客户。所以要区分是移动还是联通,只需取得SIM卡中的MNC字段即可
         */
        String imsi = telManager.getSubscriberId();
 if(imsi!=null){
        if(imsi.startsWith("46000") || imsi.startsWith("46002")){//因为移动网络编号46000下的IMSI已经用完,所以虚拟了一个46002编号,134/159号段使用了此编号
         //中国移动
        }else if(imsi.startsWith("46001")){
         //中国联通
        }else if(imsi.startsWith("46003")){
         //中国电信
        }
} 

IMSI共有15位,其结构如下:

MCC+MNC+MSIN ,(MNC+MSIN=NMSI)

MCC:Mobile Country Code,移动国家码,MCC的资源由国际电联(ITU)统一分配和管理,唯一识别移动用户所属的国家,共3位,中国为460;

MNC:Mobile Network Code,移动网络码,共2位,中国移动GSM系统使用00、02,中国联通GSM系统使用01,中国电信CDMA系统使用03,中国移动TD系统使用07,一个典型的IMSI号码为460030912121001;

MSIN:Mobile Subscriber Identification Number共有10位,其结构如下:

EF+M0M1M2M3+ABCD

其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为自由分配。

可以看出IMSI在MSIN号码前加了MCC,可以区别出每个用户的来自的国家,因此可以实现国际漫游。在同一个国家内,如果有多个移动网络运营商,可以通过MNC来进行区别。

IMEI

International Mobile Equipment Identity (国际移动设备标识)

 

参考:

1. AT命令介绍和简单使用

2. AT指令(中文详解版)

3. AT指令(中文详解版)(一)

posted @ 2016-02-24 22:51  yuxi_o  阅读(2808)  评论(0编辑  收藏  举报