计算机应用研究
APPLICATION RESEARCH OF COMPUTERS
2000　Vol.17　No.5　P.38-40



广域网异步通信系统的设计和实现
蒋旭宪　张德运　郑小军
摘  要  广域网路由器异步通信系统是路由器中的一个重要的组成部分，它是家庭计算机用户访问Internet的主要途径之一。从硬件和软件两个方面，详细介绍了广域网路由器异步通信系统的设计和实现。
关键词  广域网路由器  PPP协议   异步通信系统  通用异步收发器
1  绪论
　　当今社会，随着计算机互联网络技术的飞速发展，Internet已经渗透到社会生活的各个方面。由于在Internet上蕴藏了丰富的信息资源，越来越多的人们渴望通过访问Internet来获得自己需要的信息，因而解决用户与Internet的互联问题变得越来越重要和迫切。
　　实现计算机网络互联的方法有多种。在广域网中主要采用：拨号连接，专线连接，公共分组交换数据网，无线网等方法。对于广大的单个计算机用户而言，最常用的上网方法就是拨号上网。本文讨论了适用于这种拨号上网的广域网异步通信网络系统的设计和实现问题。
2  拨号连接的几种方式
　　一般常见的拨号方式有：
　　．远程终端访问服务器方式的拨号连接
　　这种拨号连接的方式应用于单个远程计算机与Internet连接的环境。在这种方式下，通常由网络服务提供者(ISP)提供一与Internet相连的称为通信服务器的主机。单个计算机用户通过远程拨号登录到该通信服务器主机上，作为通信服务器的一台终端在其上操作，达到访问Internet的目的。由于是终端访问方式，因而很难获得齐全的Internet服务。这种方式比较适用于大型集团用户和ISP服务。
　　．路由器入网方式的拨号连接路由器入网方式使得用户直接访问Internet(如图1所示)，因而这种方式获得了广泛的应用。这种连接方式要求服务提供者(ISP)提供一台路由器，该路由器提供若干异步通信口，同步通信口和局域网口。异步通信口的作用就是负责将单个计算机用户通过PSTN连入局域网中。由于此时用户是局域网中的一个合法的用户，因而可以获得普通Internet用户拥有的所有服务。这种方式比较适用于小型团体用户。因而这种方式下的异步通信口的设计和实现是本文的讨论所在。

图1路由器提供拨号连接
　　．按需拨号路由实现的局域网互连
　　按需拨号路由(DDR)是根据用户拨号的需要，路由器自动地拨号与目的局域网建立连接。一旦拨号成功，就会在两个局域网之间建立一条物理连接，实现了两个局域网中的互联。
3  路由器异步通信系统的设计和实现
　　路由器异步通信系统包括硬件系统和软件系统。硬件系统包括数据的发送和接收，MODEM的控制，I/O端口地址的分配，多中断源的中断控制等；软件系统包括异步卡驱动程序的设计以及PPP协议的设计。图2说明了整个路由器异步通信系统的结构。

图2路由器异步通信系统
3.1  硬件系统的设计
　　本异步通信卡为8用户异步卡，可以支持8个异步口同时全双工工作，也就可为8个用户同时提供服务，硬件逻辑框图如图3所示。由图3可见，它的核心是对UART芯片的选择。

图3路由器通信卡的硬件设计
　　UART一般有下面三种不同类型：
　　．最早的UART称为8250，它一般用在IBM的异步通信卡上，它的速度太慢，最大的通信速率为9,600 bps，跟不上AT型计算机中的中档速度，而且这种芯片只有1个字节的内部缓冲。
　　．16450UART是与8250完全兼容的新一代UART，它的速度比8250快得多，最大的通信速率为115,200 bps。但它的最大的缺点是仍然只有1个字节的缓冲区。这在高传送速度及多任务软件中，它仍然会产生覆盖错误。故这种芯片也不适用我们的8端口的要求。
　　．第三种类型是16550。与前两种相比，它的缓冲区扩大为16个字节(称之为FIFO缓冲区)。这意味着在数据发生覆盖前，有1,440微秒的时间接收数据，这显然要比16450有了很大的提高。另外16550的管脚与16450完全兼容，而且生产16550芯片的厂家较多，较易在市场上买到。故在本异步通信卡中，我们就选定了16550芯片。
　　随着科学技术的发展，现在的UART厂商又推出了比16550性能更好的芯片。如：l6650(内带缓冲区32字节)，16750(内带缓冲区64字节)，16850(内带缓冲区128字节)。这样，使得异步通信速率达到了前所未有的高度。
　　16550UART可以完成以下基本功能：
　　．传输速率可在一定的范围内可设置；
　　．字符格式可选择；
　　．有独立的时钟，而不依赖母板的时钟；
　　．具有与MODEM接口和控制的能力；
　　．具有独立的中断优先级控制能力。
　　具体的16500芯片的技术细节可参考[2]。
　　由于异步通信卡采用ISA总线接口为CPU交换信息，且为8个用户提供服务，故需要对相应的地址进行译码，这个可通过译码器和GAL16V8来实现。使用GAL16V8的好处是可以按需要对地址进行分配，以免与其它的I/O地址冲突，这增加了灵活性。另外由于8个端口是相互独立的，所以就有必要对相应的中断源进行判定，以确定是由哪个端口发出的请求。为了印刷电路板的灵活和方便，我们采用了GAL简单的可编程逻辑器件，来产生中断(中断号可根据实际的需要对GAL进行相应的编写)和给出中断源。在印刷电路板的调试当中，GAL的选择确实给了我们很大的方便。
　　电平转换电路是为符合RS232标准所必需的，它主要是为了与MODEM的信号电平相匹配。
　　通过对通用异步通信UART16550芯片寄存器的存取控制，可实现对数据格式、数据长度(5位、6位、7位或8位)、停止位、校验位、传输速率等的设置，通过对MODEM寄存器的配置，可以实现与MODEM的握手交互。时钟可采用1.8432M的晶振。
3.2  软件系统的设计
　　软件系统共分为两级：它们是异步卡驱动程序，PPP驱动程序。异步卡的主要功能是完成与硬件有关的操作。它是整个异步通信系统的起点和终点。它主要向PPP驱动程序提供5方面的基本功能。它们是：数据的接收、数据的发送、各种控制操作、端口的初始化、端口的关闭。只有这些功能的提供才能保证上层PPP协议的正确执行。PPP驱动程序的主要工作是完成PPP协议包的封装，LCP层链路的协商，用户身份的认证以及IPCP层协议的协商。这些状态的转化是通过有限状态机(FSM)紧密地结合在一起的。PPP链路的建立就可以传输上层的IP包了。图4给出了异步通信系统的软件体系结构图。

图4异步通信系统的软件体系结构
3.2.1  异步卡驱动程序的设计
　　驱动程序是上层软件和下层硬件的接口，它负责实现从硬件端口收发数据的操作和有关端口配置的操作：包括各个异步口寄存器的初始化和配置参数的设置，相关数据结构的初始化，通过中断从指定的端口发送数据和接收数据等。
　　它的主要模块有：
　　(1)端口的初始化。它在系统启动的时候被调用。主要的操作有：
　　．关闭UART的中断；
　　．清空端口的数据结构；
　　．设置初始化(Initialed)标志。
　　(2)端口的打开。它在系统要求启动某一端口上的服务时被调用。主要的操作有：
　　．检查端口的初始化标志是否合法；
　　．设置相关控制寄存器，规定相应的通信规程；
　　．初始化该端口的数据结构；
　　．中断服务程序的驻留；
　　．设置该端口的打开(Opened)标志。
　　(3)端口的关闭。当相应端口的通信结束时，需要关闭端口。主要的操作有：
　　．关闭该端口的中断；
　　．释放这个端口占用的内存；
　　．清空端口的打开标志。
　　(4)I/O控制模块。当上层需要对下层的某些参数进行设置时，需要调用I/O控制模块。如对端口标识的查询，MODEM接口有关的硬件状态的查询和配置，波特率的设置等。
　　(5)发送模块。主要执行：
　　．关闭该端口的发送中断；
　　．将要发送的数据加在发送队列的最后；
　　．重新打开该端口的发送中断。
　　(6)中断服务模块。它对端口引起中断的原因进行判断，然后进行相应的处理。主要有发送缓冲区空，接收缓冲区满，接收缓冲区发生出错，MODEM状态的改变等。
3.2.2  PPP驱动程序的设计
　　PPP协议具有错误检测功能，支持多种协议，允许在链路建立阶段协商IP地址，以及认证功能。它主要包括三方面的内容：
　　．帧的封装格式。它的任务是将前一帧的帧尾与后一帧的帧头区分开，同时它也提供错误检测功能。
　　．LCP (Link Control Protocol)链路控制协议，包括链路的建立，测试，协商和拆除等。
　　．NCP (Network Control Protocol)网络控制协议，用来协商网络层的选择项。
PPP链路从建立到终止的过程中，经历了几个阶段。如图5所示。

图5PPP链路状态转换图
　　有关PPP协议的细节可参考[3]。由于关于PPP协议的文档比较多，关于它的实现就不再赘述。
4  结束语和进一步的工作展望
　　本文详细地讨论了广域网异步通信系统的设计和实现，包括它的硬件设计和软件驱动程序的编写。通过该异步通信卡，我们实现了与微机之间的直接连接，通过MODEM的直接连接，以及通过电话网拨号通信方式等的实验。同时，我们也看到了系统在以下方面还需得到改进：
　　．异步口的数量需要增加。从现在的8个到16个，32个，甚至是64个。
　　．虽然16550芯片内有16个缓冲区，但中断的处理还是占了CPU的许多时间，这就需要为异步卡增加小型的CPU。这在异步口的数量增加时显得尤其重要。
　　．由于每个异步口需要8个I/O端口，所以，当异步口的数量增加时，会占用过多的I/O端口，故还需设计I/O端口地址复用电路。
蒋旭宪(西安交通大学  西安 710049)
张德运(西安交通大学  西安 710049)
郑小军(西安交通大学  西安 710049)
参考文献
1，张德运. 网络理论及其计算机网络. 西安: 西安交通大学出版社, 1998
2，EXAR ST16C554/554D/68C554产品说明. 1997
3，W.Simpson. The Point-to-point Protocol (PPP). STD50, RFC1661, Daydreamer, July, l994
收稿日期：1999-11-25
