Chinaunix首页 | 论坛 | 博客
  • 博客访问: 153750
  • 博文数量: 53
  • 博客积分: 2042
  • 博客等级: 大尉
  • 技术积分: 425
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-15 21:39
文章存档

2011年(6)

2010年(47)

分类: 系统运维

2010-08-12 12:33:09

摘要:在嵌入式系统中,可以利用TCP/IP协议,成功的实现双机网络互连,既提高了数据传输的速度,又保证了数据传输的正确性,同时也扩展了数据传输的有效半径。该文介绍TCP/IP通信模块的硬件构成、功能和以太网接口芯片的驱动方式,完成了以太网硬件电路和驱动的设计。
关键词:TCP/IP协议;电路;驱动

前言

随着Internet 网络软、硬件的快速发展,互联网用户正以指数级增长。而各种家电设备、PDA、仪器仪表、工业生产中数据的采集与控制等设备也正在逐渐走向网络化,以便共享互联网络中庞大的资源。TCP/IP协议已经成为计算机网络互连事实上的标准,每时每刻保证了数据的准确传输。在嵌入式系统中,可以利用TCP/IP协议中的ARP、IP、ICMP、UDP和TCP,成功的实现双机的网络互连[3]。因此,如何在价格低廉、资源有限的嵌入式系统中实现网络通信功能,已经成为嵌入式系统开发人员面临的重要课题。

网卡硬件电路设计

本文所选用的LPC2292嵌入式微处理器是以ARM7TDMI为核心的。ARM7系列微处理器为低功耗的32位RISC处理器,最适合用于对价位和功耗要求较高的消费类应用。

系统的ARM微处理器完成主要的控制工作,而网络接口控制器(NIC)则是网络协议实现的物理媒介及系统与外部通信媒介之间的接口。系统要实现数据传输,这两部分是关键,其他部分则协同这两部分共同完成数据传输。在本文中,ARM微控制器我们选用LPC2292,网络接口控制器我们选用台RTL8019AS。网卡电路的硬件组成如图1所示。

                         

 图 1 网卡电路的硬件组成

在本课题中,LPC2292和RTL8019AS之间的数据传输采用16位模式,使用了D15~D0共16根数据线,读写以字(两个字节)为单位,这样可使系统有更高的数据传输速率,从而提高了系统效率。CPU使用I/O方式来与RTL8019AS交换数据,如上图所示,LPC2292的A5~A1分别与RTL8019AS的SA4~SA0相连,主处理器通过I/O地址对应的寄存器来完成对RTL8019AS的操作。考虑到目前市面上广泛使用的RJ45连接器HR901170A,已经包括了隔离变压器,而且价格也很低,直接利用RJ45连接器,可以避免这部分接口电路的硬件电路错误,保证系统正常工作,而且可降低成本。

在本电路中,由于网络控制器RTL8019AS没有片选输入端,所以我们使用四总线缓冲器74HC125来控制RTL8019AS上的IORB(读)、IOWB(写),SA5和SA6四个管脚,LPC2292的NIC片选信号与74HC125的门控端G相连。

驱动程序软件设计

系统只有硬件还不能工作,必须在硬件和软件协同配合下才能工作[1]。所以,软件设计也是系统开发过程中的重要组成部分。软件设计将从其要实现的功能出发来实现。下面我们先了解一下RTL8019AS内部的物理细节,然后分析如何实现功能。

3.1  RTL8019AS存储器及I/O映射

RTL8019AS的地址范围为0x0000~0x7fff。其中,0x0000~0x00ff是RTL8019AS上EEPROM 9346的映像存储。另外,在RTL8019AS中,内部与NE2000兼容的寄存器也有I/O映射地址,其范围为0x0000~0x001f,具体每个寄存器的地址可参考RTL8019AS内部寄存器表。LPC2292对这些寄存器的操作是将它们作为微处理器的I/O端口设备。

3.2  RTL8019AS内部存储缓冲区管理

RTL8019AS内部有一个容量为8K×2Byte的内部数据缓冲RAM,用来缓冲存储发送和接收的数据分组。RTL8019AS内部的RAM是以256字节为一页,按页存储的结构,RAM地址的高8位又叫页码[2]。把前面的12页用来存放发送的数据包,后面的52页用来存放接收的数据包。为了有效利用缓冲区,RTL8019AS将接收缓冲RAM构成环形缓冲结构。52个这样的缓冲区通过指针控制链接成一条逻辑上的缓冲环。为便于缓冲环读/写操作。还需要两个指针,它们是当前页指针CURR,确定下一包放在何处,起着缓冲环写页指针的作用;边界指针BNRY,指向未经微处理器取走处理的最早到达数据包的起始页,起着缓冲环读页指针的作用。

3.3  网卡内部的寄存器

RTL8019AS内部的与NE2000兼容的寄存器均为8位寄存器,被映射到4页上,每页有16个寄存器。当前映射页由命令寄存器CR的PS0和PS1位决定,页内寄存器选择由地址线决定。第0页寄存器用于收发过程,第1页寄存器则主要用于RTL8019AS的初始化,第2页寄存器用于环路诊断,第3页寄存器用于某些软件参数设置。

3.4  网卡驱动的软件实现

数据的收发其实就是对RTL8019AS内部的寄存器进行操作的过程,所以首先得对RTL8019AS进行初始化,主要是设置所需的寄存器状态,建立网络接口收发的条件,并对RTL8019AS缓冲区RAM进行划分,建立接收缓冲环。数据的收发就是对前面所介绍的寄存器的读写过程,当然其中还涉及到对RTL8019AS数据缓冲环的操作。网络接口通过两个DMA操作来完成数据的接收和发送。本地DMA完成RTL8019AS和它内部的FIFO之间的数据传送。远程DMA完成RTL8019AS和CPU之间的数据传送。所有这些功能由驱动程序实现,下面将以太网驱动程序进行介绍:

3.4.1  RTL8019AS初始化

RTL8019AS的初始化,其实就是对RTL8019AS内部与NE2000兼容的寄存器的初始化。程序首先设置了ARM芯片LPC2292的I/O口属性。然后对RTL8019AS网络芯片进行复位,包括硬件复位和软件复位。再进入芯片停止状态,对内部寄存器进行设置,包括MAC地址的写入和内部SRAM的分配。最后,使芯片进入运行状态结束初始化。

3.4.2  数据接收过程

RTL8019AS完成初始化后,就处于接收状态,一旦有数据分组到达,就自动执行本地DMA,将RTL8019AS FIFO中的数据送入接收缓冲环,然后向LPC2292申请“数据分组到达”中断请求。同时RTL8019AS内部的寄存器会发生相应变化,如ISR、CURR。CPU响应中断请求(读ISR,以判断中断类型)后,从接收缓冲环中取出数据分组至LPC2292的存储器中,然后对接收缓冲环CURR、BNRY指针内容进行修改,以便RTL8019AS能从网络上正确接收后续分组。启动远程DMA后,LPC2292不断读写RTL8019AS的数据端口(BASE_ADDR+10H),就能成功执行远程DMA操作,完成CPU与RTL8019AS缓冲RAM之间数据的交换。

接收函数总是把所有数据报都读出来后才退出,而接收缓冲区没有指示哪些报未被处理。因此,如果接收到的数据报(指放在网络接口芯片内部缓存的)来不及处理,那么可能会发生丢包现象,所以对处理速度慢的机器需要设置更多的接收缓冲区。几乎接收函数的所有代码都属于临界区代码。函数一开始就进入临界区。如果网络接口芯片是处于复位状态,则对网络芯片进行初始化然后退出。

3.4.3数据发送过程

在说明数据发送过程之前,先讨论一下RTL8019AS网络芯片的发送缓冲区问题。在初始化RTL8019AS芯片时把内部的16KB SRAM分为两个部分,3KB空间用于发送数据,13KB空间用来接收数据。而3KB的发送缓冲区可以保存2个完整的以太网帧,可以看作2个发送缓冲区,这样就可以轮流对这两个发送缓冲区进行操作。

首先,数据发送函数通过传递的参数计算出需要发送的数据总长度。然后选择一个RTL8019AS网络芯片内部的发送缓冲区,把数据都发送到RTL8019AS的发送缓冲区,设置芯片发送的起始地址(即发送缓冲区的起始地址)。最后发送数据。如果发送失败则重发。重发次数最多为6次,6次以后就退出。程序流程图如图2所示。

                                        图2 驱动程序发送函数流程图

结论

本文详细介绍了TCP/IP通信模块的硬件构成、功能和以太网接口芯片的驱动方式,完成了以太网硬件电路和驱动程序的 。

本文作者创新点:经过实际测试,该系统克服了传统通信方式自动化程度低、处理能力有限、通信方式落后的缺点,在信息处理、网络通信等性能上有了显著提高。

参考文献

[1]马忠梅等. ARM嵌入式处理器结构与应用基础. 北京:北京航空航天大学出版社,2002,1-90

[2]宁立革,孙鹤旭,林涛,张妍.基于嵌入式操作系统的USB驱动程序开发[J].微计算机信息,2005,5:105-107

[3]全成斌. 嵌入式系统以太网驱动程序的设计方法. 小型微型计算机系统,2002,23(9):1029-1032

阅读(1803) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~