当前位置: 代码迷 >> Wireless >> PPP协议搞不定,哪位高手能给点建议啊资料也可以啊
  详细解决方案

PPP协议搞不定,哪位高手能给点建议啊资料也可以啊

热度:2450   发布时间:2013-02-26 00:00:00.0
PPP协议搞不定,谁能给点建议啊,资料也可以啊!
PPP协议搞不定,谁能给点建议啊,资料也可以啊!急!

------解决方案--------------------------------------------------------
完整的AT命令举例
22.1 一个IP PDP上下文的激活
AT+CGDCONT=1,”IP”,”internet”;+GCDCONT=2,”IP”,”abc.com”
OK

ATD*98*1#
CONNECT
其它例子:
AT+CGCLASS=”CG”
OK

+CGREG:1

AT+CGDCONT=1,”IP”,”internet”
OK

AT+CGQREQ=1,1,4,5,2,14
OK
AT+CGQMIN=1,1,4,5,2,14
OK

AT+CGATT=1
OK

AT+CGACT=1,1
OK 

AT+CGDATA=”IP”,1
CONNECT
……
Data transfert
……
+CGEV:NW DETACH
22.2 网络请求
AT+CGAUTO=0
OK
+CRING:GPRS”IP”,”211.45.89.152”
AT+CGANS=1
CONNECT
……
Data tranfert

------解决方案--------------------------------------------------------
摘要:介绍了一种在微控制器(单片机)上实现PPP协议,并使其通过ISP连入Internet的方法。分析了PPP协议,论述了软件系统的层次结构和实现难点,重点介绍了协议的简化方法以适应单片机有限的存储资源。 
关键词:PPP 微控制器 单片机上网 调制解调器
微控制器(也称单片机)把所有常用的资源,如存储器、模数转换器、通用输入输出口、定时器 等,与CPU集成在一个芯片上,具有体积小、功耗低、使用方便的特点,广泛应用于各种嵌入式系统中。随着互联网(Internet)的兴起与普及,使微控 制器也接入到互联网,并通过互联网传送数据。便是实现单片机与互联网通信的前提是需要在单片机上实现多种繁杂的互联网协议。而微器一般处理能力较低、程序 存储器和数据存储器资源有限,这就使微控制器上网变得非常困难。目前,一般采用微控制器直接驱动网卡芯片的方案。网卡芯片封装了底层的以太网协议(如 IEEE802.3),微控制器只需控制网卡芯片并实现传输层与网络层协议(例如TCP、IP协议)即可以上层。但其缺点是必须应用在已经拥有局域网的地 方,且网卡芯片(例如RTL8019等)价格不菲。
本文针对微控制器上网的问题,提出一种大微控制器中实现PPP协议,并通过调制解调器 (MODEM)连接到ISP(Internet Service Provider)实现上网的解决方案:微控制器控制MODEM拨号连接到ISP上,然后根据PPP协议(Point to Point Protocol)进行通信协商、密码认证等握手过程,如果成功就可以通过ISP上网传送数据。这种方案的优点在于:(1)可以应用于任何覆盖电话网的地 区,适用于广大偏远地区;(2)硬件实现比较简单,程序比较短小;(3)只需外接电话线,安装简便。
 
1 硬件连接与底层驱动
微控制器拨号上网解决方案中的硬件连接非常简单,只需使用微控制器的标准串行口和I/O总 线与MODEM相连。为了使程序更为简化,在硬件设计中可以不使用MODEM的硬件握手信号。最终只需四根连接线来控制MODEM(如图1所示):串口发 送(TXD)、串口接收(RXD)、载波检测CD(Carrier Detect)和终端准备DTR(Data Aerminal Ready)信号。CD信号可以检测MODEM是处于数据传送状态还是AT命令传送状态。DRT信号用来通知MODEM传送工作已经结束。微控制器的串行 口和I/O口不能直接与标准MODEM相连,需要使用电压转换芯片,如MAX232等,转换为RS232标准。
为了方便软件编程,需要针对硬件编写一些底层驱动程序。首先是串行口的驱动函数:打开串口 (OpenComm)、关闭串口(CloseComm)、读串口数据(ReadComm)、写串口数据(WriteComm)等。然后在这些串口函数的基 础上编写MODEM的驱动函数。单片机通过串行口控制MODEM,进行拨号、设置等操作。控制方法采用AT命令,例如:ATDT命令用来拨号、ATV命令 控制MODEM返回值的格式等。控制MODEM拨打ISP的电话号码后,MODEM就转入在线模式(On-Line),此时微控制器向串行口发送的所有数 据都会直接传送给ISP主机。同样ISP主机的回答也传回微控制的串行口。可以说此时的MODEM和电话线建立了一个从微控制器到ISP的透明数据连接。 当数据传送完成需要断开连接时,微控制器通知MODEM结束会话,并从在线模式转回普通的命令模式。这可以通过置高MODEM的DTR线完成。同时,处于 在模式下微控制器也要不断检测CD线是否处于高电平,当线路由于异常断开时,CD线会回复到平常的低电平。根据这些操作,编写MODEM驱动函数: (1)MODEM初始化函数(ModemInit);(2)拨号函数(ModemDial);(3)断开与ISP连接(ModemHangUp);(4) 检测MODEM是否处于在线状态(ModemOnLine)等。
这些底层的驱动函数将会使上层协议的编写很方便;更重要的是,它提供了一个硬件抽象层。当底层硬件改动时,只需要对底层的驱动数改动,而上层函数的代码不变。
 
2 软件整体结构
2.1 软件层次结构
程序中的所有代码都由C语言编写,采用分层结构,从底到上分别为:串口驱动层、MODEM 驱动层、PPP协议层、IP协议层、UDP协议层与应用层。上层函数的实现需要应用到底层函数,而底层函数的任务就是为上层函数提供服务,最终完成应用层 任务,传送数据。各层的主要函数如图2所示。
可以看出,为了尽量简化,在传输层使用了UDP协议而非TCP协议。其实大多数情况下使用无线连接的UDP协议已经足够,而且会使程序大幅简化。
2.2 串口接收中断的处理
为了节省代码空间,软件未使用实时操作系统,例如μC/OS等, 而是利用多个有了状态机来控制程序的运行。其中最重要的就是MODEM状态机。MODEM可以处在两个状态:命令状态和在线状态。当处于命令状态时,串行 口接收MODEM的返回值信息。而当微控制器进行拨号命令之后,MODEM转而处于在线状态,此时微控制器与ISP直接连接,它们之间的通信要符合PPP 报文协议。因此,串行口接收的是PPP报文。在本程序中,串口使用中断接收模式,因此在串口接收中断处理函数中,首先要判断MODEM是处于命令状态还是 在线状态。如果处于在线状态,则要按照PPP报文格式处理。找到一个完整的PPP报文后则通知主循环处理。中断处理程序的总体结构如下:
void serial0() interrupt 4 using 2
{//串行口中断处理函数
unsigned char c;
EA=0;
if(RI)
{
RI=0;
c=SBUF;//获得串口数据
if(ModemState==COM)
ProModemCommand(c);//处于命令状态
Else
ProPPPReceive(c);//处于在线状态,寻找完整的PPP报文
}
}
 
3 PPP协议的实现
PPP(Point to Point Protocol)是数据链路层协议中的一种,是目前应用最广的一种广域网协议。PPP协议假定两个对等实体间有一个双向全双工的连接,而且数据包按顺序 投递,这正好符合串行口的通信方式。PPP协议不需要差错控制、排序和流量控制,易于实现,而且支持对多种高层协议(如IP、TCP、UDP)的复用。所 以使用PPP拨号上网是微控制器实现Internet连接的最佳选择。大部分的ISP也正是通过PPP协议提供网络服务的。
PPP协议的帧结构如图3(a)所示。串口中断程序以包起始和结束符来判断是否有完整的 PPP包,并对PPP包的内容进行校验以确定数据包的完整性和正确性。然后在主循环中进入PPP报文解板模块,在护号后初次与ISP通信阶段,系统首先要 与ISP进行通信链路的协商,即协商点到点的各种链路参数配置。协商过程遵守LCP(Link Control Protocol)、PAP(Password Authentication Protocol)和IPCP(Internet Protocol Control Protocol)等协议。其中LCP协议用于建立、构造、测试链路连接;PAP协议用于处理密码验证部分;IPCP协议用于设置网络协议环境,并分配 IP地址。协商机制用有限状态机模型来实现。一旦协商完成,链路已经创建,IP地址已经分配就可以按照协商的标准进行IP报文的传输了。根据应用的不 同,IP报文中可以携带UDP报文也可以是TCP或ICMP报文。本系统正是采用UDP报文传送数据信息的。数据传输完成后,下位机会向ISP发送LCP 的断开连接报文以终止网络连接。
  相关解决方案