文章来源:http://blogold.chinaunix.net/u1/56388/showart_1121149.html
1 AT 指令简介
AT 指令集一般指专门用来控制调制解调器的指令集。该指令集最初由美国 Hayes 公司推出,专门用于数据传输通信领域,目前己成为全球通用的标准,任何与 Hayes 兼容的调制解调器都可使用这些指令。
AT 指令是以 AT 开头、结尾的特定字符串, AT 后面紧跟的字母和数字表明 AT 指令的具体功能。 AT 指令具有以下特点:
①几乎所有的 AT 指令 ( 除了 “A/” 及 “+++” 两个指令外 ) 都以一个特定的命令前缀开始,以一个命令结束标志符结束。命令前缀一般由 AT 两个字符组成,命令结束符通常为。
②每一条 AT 指令执行完后,调制解调器都会返回一个结果 ,以对接收到的命令作出应答。
指令集分成标准 AT 指令集 (Standard V . 25ter ATCommands) 、 AT 增强指令集 (AT Commands for En-hanced Functions) 和传真指令集 (AT Commands forFAX) 等。根据具体的产品,不同的厂商还会设计特殊的指令集供设置使用,例如奉系统中使用的无线 GSM 模块,根据 ETSI-GSM07 . 07 和 ETSI-GSM07 . 05 协议,给调制解调器增加了一些扩充指令。
2 登录 GGSN 的过程
系统的一个难点是微控制器登陆 GPRS 网关( GGSN )并与网关通过 LCP 、 PAP 、 IPCP 协议进行协商的过程。 LCP 、 PAP 与 IPCP 协议的帧结构大同小异 , 最常用的为请求( REQ )、同意( ACK )和拒绝( NAK )三种帧。微控制器与 GGSN 各为一方进行协商 , 任何一方都可以发送 REQ 帧请求某方面的配制 , 另一方觉得配置不能接受会回应 NAK 帧 , 如果可以则回应 ACK 帧。为了节省资源 , 我们只处理这三种数据帧 , 其它链路问题都由微控制器在程序控制下自己重新拨号解决。
协商过程大致描述如下:在拨号成功连接后 ,GGSN 首先会返回一个 PAP REQ 数据帧。我们发送一个空 LCP REQ 帧 , 以强迫进行协议协商阶段。随后 ,GGSN 发送 LCP 设置帧 , 我们拒绝所有的设置并请求验证模式。 GGSN 选择 CHAP 或 PAP 方式验证 , 我们只接受 PAP 方式。然后 , 进行 PAP 验证用户名和密码过程 , 在 GPRS 中用户名与密码都为空 , 如果成功 ,GGSN 会返回 IPCP 报文分配动态 IP 地址。此时 , 就完成了与 GGSN 的协商过程。协商过程的状态转换如图 4 所示。
3 软件设置
硬件连接完成后 , 在进行 GPRS 上网操作之前 , 首先要对 GPRS 模块进行一定的设置。 主要的设置工作有:
① 设置通信波特率。可以使用 “AT+IPR=115200” 命令,把波特率设为 115 200 bps 或者其他速率。 SIMCOM 模块默认为 ll5200 bps 。
② 设置接入网关 , 通过 AT+ CGDCONT=1, “IP”, “CMNET” 命令设置 GPRS 接入网关为移动梦网。
③设置移动终端的类别 , 通过 AT+CGCLASS=“B” 设置移动终端的类别为 B 类 , 即同时监控多种业务 ; 但只能运行一种业务 , 即在同一时间只能使用 GPRS 上网 , 或者使用 GSM 的语音通信。
④ 测试 GPRS 服务是否开通 , 使用 AT+CGACT=1,1 命令激活 GPRS 功能。如果返回 OK, 则 GPRS 连接成功 ; 如果返回 ERROR, 则意味着 GPRS 失败。这时应检查一下 SIM 卡的 GPRS 业务是否已经开通 ,GPRS 模块天线是否安装正确等问题。
中国移动在 GPRS 与 Internet 网中间建立了许多相当于 ISP 的网关支持节点( GGSN ) , 以连接 GPRS 网与外部的 Internet 网。 GPRS 模块可以通过拨 “*99***1#” 登录到 GGSN 上动态分配到 Internet 网的 IP 地址。其间 GPRS 模块与网关的通信要符合点对点协议( Point to Point Protocol, PPP ) , 其中身份验证时用户名、密码都为空。使用 PPP 协议登录上之后 , 就可以通过 GGSN 接上 Internet 了。
GPRS Moderm 实现 TCP 连接的 AT 指令主要操作步骤:
AT/r
AT+ccid/r // 检测是否装有 SIM 卡
AT+cgmr/r // 检测软件版本, 5.0 以上的才有 GPRS 功能支持
AT+csq/r // 检测信号质量,确定是否可以登陆上网络;若返回 10--31 , 0 之间的信号数字则继续,
如果信号是 99 , 99 ,则应该考虑不停的的让模块去搜寻网络。
AT+CGCLASS="B"/r // 设置模块工作类型
AT+CGDCONT=1,"IP","CMNET"/r
AT+CGATT=1 // 激活 PDP ,获得 IP
AT+CIPCSGP=1,"CMNET"/r
AT+CIPSTART="TCP",211.147.18.79,1433/r
AT+CIPSEND/r
> // 返回 “>” 后输入要传输的数据,再发送 CTRL+Z, 即将所要发送的数据发送到指定 IP 的服务器上
AT+CIPCLOSE/r // 只有在 TCP/UDP 处于 CONNECT OK 的状态下才返回 OK, 否则返回 ERROR
AT+CIPSHUT/r // 关闭移动场景