APP下载

应用RTL8019AS的嵌入式设备网络化软件实现

2009-12-04冯翠丽长江大学计算机科学学院湖北荆州434023

长江大学学报(自科版) 2009年4期
关键词:字节寄存器数据包

冯翠丽 (长江大学计算机科学学院,湖北 荆州 434023)

应用RTL8019AS的嵌入式设备网络化软件实现

冯翠丽 (长江大学计算机科学学院,湖北 荆州 434023)

嵌入式设备的网络化是当前研究的一个热点问题,其实现方式可以用微处理器直接驱动网卡芯片来接入Internet。详细分析了嵌入式系统中微处理器驱动RTL8019AS的设计思路,提出了一种实现方法,给出了总的程序流程图和关键函数的实现流程图,并作了测试试验。试验结果表明,该方法是可行的。

嵌入式网络;驱动程序;RTL8019AS

嵌入式设备的网络化已是大势所趋[1~3],且嵌入式设备网络化有很多方案[4,5],其中最直接的方式就是采用微处理器直接驱动网卡芯片来实现[5,6]。对于目前大量存在的嵌入式设备来说,选择这种方案有成本低的优势[6]。然而,采用该方案的一个关键问题就是要研究驱动程序的设计思路和方法。为此,笔者结合嵌入式Web服务器,给出了一种实现方法,为嵌入式设备低成本接入Internet打下了良好的基础。

1 设计思路

RTL8019AS驱动设计原理图如图1所示。RTL8019AS的内部有一个双端口的RAM[7](图1的“RTL8019AS片内RAM区”),该RAM和2条数据总线进行交互,它与内部总线(图1中“RTL8019AS内部总线”)的交互被称为Local DMA通道,而与外部数据总线的交互被称为Remote DMA通道。Local DMA完成RTL8019AS(以下简称“芯片”)与网络的数据交换,而Remote DMA负责芯片与微处理器的数据交换。

图1 RTL8019AS驱动设计原理图

从应用程序的角度来看[5,8],当网络上有数据来临时,芯片会自动启动Local DMA写,来完成一系列操作:将收到物理信号还原成数据并过滤(不符合要求的数据包将被拒收)、将数据按照一定的格式存入事先设置好的接收缓存中、设置与接收数据相关的寄存器、产生中断等等。值得注意的是,该组操作是在没有微处理器的参与下,芯片自动完成的。因此,在启用芯片接收数据之前,系统必须指定其片内某块RAM区域作为接收缓存区,此区域的首尾地址分别由PSTART[7](页面开始寄存器)和PSTOP(页面停止寄存器)给出。

图2 3个驱动函数及其与应用程序的关系图

同理,在启用芯片发送数据前,系统必须指定其片内某块RAM区域作为发送缓存区,该区域的首地址由TPSR(传送页面开始寄存器)给出,该区域长度的高低字节分别由TBCR1 (传输字节计算寄存器)和TBCR0给出。

2 设计实现

由上述设计原理,设计的驱动程序总的流程图如图2所示。设计了3个驱动接口函数:初始化函数(Init_Rtl8019AS)、接收驱动函数(Recv_Rtl8019AS)和发送驱动函数(Send_Rtl8019AS)。

2.1读写寄存器函数

微处理器对芯片的各种操作都是通过读写寄存器来完成的[8~10],读写寄存器是对芯片最基本的操作。为了减少函数嵌套,加快访问速度,笔者采用了宏定义而非函数来读写寄存器。

其中,BASE_ADDR是系统分配给芯片的微处理器I/O基地址,应根据系统的实际硬件连线来定义。将微处理器的0XFFE0~0XFFFF地址[11]空间分配给了芯片,因此应定义为#define BASE_ADDR 0xFFE0。Reg是被访问的寄存器,是一个相对偏移量[7]。XBYTE是Keil C51中I/O访问的关键字。所有函数都是在德国Keil Software公司的uVision2开发平台中用C语言实现的,故可移植性好。

2.2初始化函数

初始化芯片的主要作用是在启动芯片之前配置相关的寄存器和片内RAM收/发缓存区,并按照一定的要求来启动它。在执行此函数后,芯片将处于接收/发送数据包的状态。

2.3接收驱动函数

实现接收驱动函数的关键是先分清几种帧格式。在芯片物理信道上收发的数据包都是IEEE 802.3的帧格式[5],其结构如图3(a)所示。其中,数据域最少46字节,至多1500字节。如数据不足46字节,则用零补足,超过1500字节时,需要拆成多个帧;前导序列(Preamle)、帧起始位(SFD)和CRC校验都由硬件自动添加/删除,与上层应用软件无关。然而,微处理器从芯片片内RAM中读到的数据包帧格式并不是图3(a)所示的格式,而是图3(b)所示的帧格式。由该图可知,芯片自动添加了接收状态、下一页指针和以太网帧长度(以字节为单位)这3个数据成员,它们的引入方便了驱动程序的设计。

图3 2种帧格式

接收函数的实现过程如图4所示。其中,参数**pBuf是将要接收的数据包在系统RAM中的首地址,图中的远程DMA I/O口即是偏移量为0X10H的RAM单元[7]。由图可知,该函数主要有如下几个作用:

1)确定本次接收数据的长度,将高低字节分别赋值给RBCR1(字节计数器)和RBCR0;

2)确定本次接收数据的首地址(在接收缓存中),将高低字节分别赋值给RSAR1(始地址寄存器)和RSAR0;

3)启动Remote DMA读命令,在微处理的参与下将数据从芯片的片内接收缓存拷贝到系统的RAM中。

2.4发送函数的实现

发送驱动函数的详细流程见图5所示。其中,参数*pBuf是将要发送的数据包在系统RAM中的首地址,Len为该数据包的字节数。该函数主要有如下几个作用:

1)确定芯片片内发送缓存中的空闲区域的首地址Addr,并将高低字节分别赋值给RSAR1和RSAR0;

2)确定本次发送数据的长度Len,将高低字节分别赋值给RBCR1和RBCR0;

3)启动Remote DMA写命令,在微处理的参与下将数据从系统的RAM中拷贝到芯片的片内发送缓存。

3 测试结果分析

这里采用的测试方法是将该系统与PC机在RJ-45口及串口分别对接[11]。测试工具有Keil C51x编译器、编程器、串口精灵、Sniffer Pro。

3.1接收驱动测试

测试接收驱动时,首先在PC机上利用Ping程序向网络中发送数据,这些数据可以被Sniffer抓取,同时,将系统接收到的数据经串口通过串口精灵输出到PC机上,测试结果如图6所示。由图6可知,串口输出的数据(图中被选中部分)与Sniffer抓取的数据一致,表明芯片的接收驱动能正确地工作。

3.2发送驱动测试

图7 发送驱动测试

测试发送驱动时,先让芯片每隔1s钟向网络中发送长度为100字节的数据帧,内容为数字0~9循环出现,同时在PC机上利用Sniffer抓取网络中数据帧,测试结果如图7所示。一共显示了5个数据帧,且每个帧间隔1s,其中帧的内容是数字0~9循环出现,共100个字符。这表明芯片的发送驱动能正确地工作。

4 结 语

笔者详细地阐述了利用微处理器控制RTL8019实现设备网络化时驱动程序设计思路及关键函数的实现,最后给出了相应的测试结果。测试结果表明,笔者的设计思路是可行的。

[1]史晋芳,张华,吴健.基于嵌入式的数控网络化技术研究[J].机械设计与制造,2007,(8):154~155.

[2]宫晨,应腾云,颜钢锋.基于嵌入式的家电网络控制系统[J].计算机应用,2007,(5):49~51.

[3]陈立家,焦战立,熊文龙.基于精简TCP/IP协议栈网络服务器的实现[J].武汉理工大学学报, 2007, 31(3):565~568.

[4]王艳芬,刘增环,马佩军,等.RTL8019AS及其在嵌入式以太网中的应用[J].中国农村水利水电, 2007,(5):136~137.

[5]陈传虎.以太网控制芯片RTL8019AS数据帧分析[J].科技资讯,2007,(9):93~94.

[6] 任会平,王平,徐橼.低成本嵌入式web服务器的研究[J].微计算机信息,2008,24(10-2):23~25.

[7] Realtek.RTL8019AS Data Sheet [M].TaiWan: Realtek,2001.

[8]王晓静.用单片机实现以太网卡通讯设计[J].科技信息(计算机与信息技术), 2007,(34):96~116.

[9]孙静,朱继萍,邱军兴.嵌入式以太网通讯模块的设计[J].西安文理学院学报, 2007,10(4):70~73.

[10]苏锦秀,杨庆江,张广璐.以太网控制芯片RTL8019AS详细配置[J].现代电子技术2007,22(261):151~153.

[11]刘波涛,冯翠丽,王青海,等.应用RTL8019AS的嵌入式Web服务器硬件实现[J].长江大学学报(自科版),2008, 5(1):N75~78.

[编辑] 易国华

TP393

A

1673-1409(2009)02-N087-04

2009-02-26

冯翠丽(1980-),女,2003年大学毕业,讲师,现主要从事网络技术方面的研究工作。

猜你喜欢

字节寄存器数据包
STM32和51单片机寄存器映射原理异同分析
基于Jpcap的网络数据包的监听与分析
No.8 字节跳动将推出独立出口电商APP
Lite寄存器模型的设计与实现
No.10 “字节跳动手机”要来了?
SmartSniff
简谈MC7字节码
高速数模转换器AD9779/AD9788的应用
移动IPV6在改进数据包发送路径模型下性能分析
一种可重构线性反馈移位寄存器设计