一年前花了50元从朋友那里买了一台二手的motorola L6,虽然别人已经用了几年了,但外观和手感都很好,在这一年多的时间内,我摔过它,拆过它,刷过它(俗称刷机), 到现在都还很好,不愧为品牌机。
最近正在学ARM, 即将做基于ARM平台的GPRS方面应用。在网上查了许多资料,得知ARM与GPRS模块之间的通信是通过串口来实现的,接口是AT指令,就像linux中的shell命令一样。呵呵,说了这么多,大家也许会问,这与L6有什么关系呢?
谈到AT指令集,相信大多数人应该很陌生,我刚开始也是,通过“孤狗”搜索了一下,得知AT指令应用很广。例如,大家也许用过手机电脑终端软件,如motorla的MPT工具,其实它和手机通信的大多是通过AT命令实现的。下图为L6的MPT界面,功能还是很强大的。
谈到这里,我突然想到以前用过一个什么软件,好像有AT这个模式。查看了一下motorla工具,原来是P2Ktools这个工具。这个工具不知道有朋友用过没有,它可以修改手机的设置和读取手机系统内容,举个例子吧,它可以把手机按键顺序给改变,如原来按”1”键显示1,通过它改后,可以按“1”键显示9,强大吧!不过它还有个模式,AT模式,当时不知道怎么用,现在知道呢,该开工呢…….。
在做之前,先了解一下一些名词吧
名词术语
TE:Terminal Equipment 终端设备
TA:Terminal Adapter 终端适配器
DCE:Data Circuit termination Equipment数据电路终按设备
DTE:Data Terminal Equipment 数据终端设备
ME:Mobile Equipment 移动设备
MS:Mobile Station移动台
第一步,把手机线和电脑连接好,会提示你安装驱动,安装好的驱动如下图所示
第二步,打开P2Ktools工具,如下图所示
第三步,选择AT模式。
第四步,切换到终端页面,
下面就开始我们的AT指令学习之旅吧(我们以读取SIM卡内的一条短信为目的)
首先直接点”运行”。在AT指令中,每条指令都有反回值。
接着输入“AT+CMGF=1”点击“运行” 设置消息内容为什么文本模式
接着输入“AT+CSCS=”UCS@””,点击“运行”设置TE字符格式为Ucs2(unicode编码),这样做的目的是我们要读取中文,如果设置“GSM”格式,则读不出中文。
接着输入”AT+CMGL=”REC READ””,点击“运行”读取所有已经接收且已读的短信消息
读出的来内容都是unicode编程,于是在网上找了一下转换工具
我把其中的一条短信的unicode编码按格式输入,如下图所示
转换后的内容如下图
有兴趣朋友可以自己试试,学习一下AT命令,
下面为短信常用AT指令
1. 测试命令(Test Command)
在AT指令后面加上"=?"即构成测试命令。例如"AT+CSCS=?"会列举出所有支持的字符集。
2. 读取命令(Read Command)
在AT指令后面加上"?"即构成读取命令。例如"AT+CSCS?"会列举出当前设置。
3. 执行命令(Execute Command)
一般而言在AT指令后加上"="及命令参数即可。有些命令例如AT+CMGR命令没有参数,直接就可以执行。
AT 测试连接是否正确,正确返回OK
ATE0 关闭回显。程序初始化AT部分首先关闭回显。
ATE1 打开回显。使用超级终端测试命令时打开。
ATZ 在超级终端中输入可见。
AT+CGMI 得到厂商信息
AT+CGMR 得到版本号
AT+CGSN 得到序列号(IMEI)
AT+CIMI 得到手机IMSI号码
AT+CSCS 获取、设置当前字符集。可设置为GSM或UCS2
AT+CBC 获取电量
AT+CCLK 获取设置手机时钟
AT+CNUM 机身号码。分为线路一和线路二
AT+CSQ 当前信号
AT+COPS 网络营运商
AT+CSCA 短信中心号码
AT+CPMS 选择短信储存地点。可选择ME(SIM卡)和MT(机身)
AT+CMGL 列出指定状态的短信息的PDU代码
AT+CMGR 列出指定序号的短信息PDU代码
AT+CMGS 发送短信
AT+CMGD 删除指定的短信
AT+CMGF 短信格式。分为Text模式和PDU模式
AT+CNMI 设置新短消息通知电脑端
AT+CSCA 短信中心
AT+IPR? 显示串口波特率
AT+IPR=19200更改串口波特率为19200
ATD打电话
ATA接电话
ATH挂电话
at+cnmi=2,1,0,0,0 //短信存入SIM卡
at+cnmi=2,2,0,0,0 //短信直接串口输出,不存SIM卡
"AT+CNMI"指令语法为
AT+CNMI=[[,[,[,[,]]]]]
mode - 通知方式:
0 – 不通知TE。
1 – 只在数据线空闲的情况下,通知TE;否则不通知TE。
2 – 通知TE。在数据线被占用的情况下,先缓冲起来,待数据线空闲,再行通知。
3 – 通知TE。在数据线被占用的情况下,通知混合在数据中一起传输。
mt - 消息储存或直接转发到TE:
0 – 储存到默认的内存位置(包括class 3)
1 – 储存到默认的内存位置,并且向TE发出通知(包括class 3)
2 – 对于class 2,储存到SIM卡,并且向TE发出通知;对于其它class,直接将消息转发到 TE
3 – 对于class 3,直接将消息转发到 TE;对于其它class,同mt=1
bm, ds, bfr的含义,请参考相关标准文档。一般不需要去关心它们。
在程序中具体实现时,使用mode=2, mt=1,比较简单。对所有类型的短消息,只要在收到ME送来的"+CMTI"通知后,用"AT+CMGR"指令读取消息内容就行了。
AT&W 保存设置