引言
在互联网络和局域网络飞速发展的今天,计算机进行网络互联的同时,各种家电设备、仪器仪表、工业生产中的数据采集和控制正在走向网络化。以太网(Ethemet)由于它的普遍性及低廉的接口价格,因而已经作为一种最通用的网络,广泛应用于生产和生活中。另一方面,嵌入式设备在价格、体积及实时性等方面是通用计算机无法比拟的,也已广泛应用于自动化控制、数据采集、通信网络等领域。因此,嵌入式以太网技术有着广阔的前景,首先要解决的问题就是嵌入式以太网接口问题。
本文基于最常用的嵌入式处理器S3C44B0X和以太网驱动器RTL8019AS来设计了一款嵌入式以太网接口。本设计的特点是,既可仅用于嵌入式以太网驱动设备,方便简单,又可进行扩展其他模块,必要时可以移植操作系统,应用于其他复杂领域。本文从RTL8019AS的内部结构工作原理出发,介绍了基于S3C44B0X的硬件接口电路,详细说明了基于硬件层的驱动程序C语言的设计。
1以太网帧结构
一个标准的以太网物理传输帧由7部分组成:PR(同步位)、SD(分隔位)、DA(目的地址)、SA(源地址位)、TYPE(类型字段)、DATA(数据段)、FCS(帧校验)。
其传输帧结构(及各部分长度)如图1所示。
除了数据段的长度不定外,其他部分的长度固定不变。数据段为46~1500字节。以太网规定整个传输包的最大长度不能超过1514字节(14字节为DA、SA、TYPE),最小不能小于60字节。需填充时,填充字符的个数不包括在长度字段中;超过1 500字节时,需拆成多个帧传送。事实上,发送数据时,PR、SD、FCS及填充字段这几个数据段由以太网控制器自动产生;而接收数据时,PR、SD被跳过,控制器一旦检测到有效的前序字段(即PR、SD),就认为接收数据开始。
2芯片简介
S3C44B0X是三星公司使用ARM7TDMI核生产的16/32位RISC(精简指令集计算机)处理器,它提供了丰富的内置模块,包括:8 kB Cache和内部SRAM,LCD(液晶显示器)控制器,2通道的UART,4通道的DMA(直接存储器存取),存储器管理,带PWM(脉宽调制)的定时器,I/O口,8通道10位的A/D转换器,IIC、IIS总线,同步SIO接口和PLL(锁相环)倍频器,可根据需要进行接口扩展,并且价格低廉,目前已被广泛应用于嵌入式领域中。
RTL8019AS是在嵌入式领域应用广泛且性价比很高的网络控制芯片。RTL8019AS的主要性能有:符号EthernetⅡ与IEEE 802.3(10Base5、10Base2、10BaseT)标准;全双工,收发可同时达到10 Mbit/s的速率;内置16 kB的SRAM,用于收发缓冲,降低对主处理器的速度要求;支持8/16位数据总线,8个中断申请线以及16个I/O基地址选择;支持UTP、AUI、BNC自动检测,还支持对10BaseT拓扑结构的自动极性修正;允许4个诊断LED引脚可编程输出。
RTL8019AS可分为以下几部分功能模块:
a)远程DMA接口:处理器与RTL8019AS收发缓冲的连接通道,处理器只需对远程DMA操作。
b)本地DMA接口:RTL8019AS与网线的连接通道,完成控制器与网线的数据交换。
c)MAC(介质访问控制)逻辑:完成对远程DMA和本地DMA数据包传输、中断的产生等自动控制。
d)地址识别逻辑:将接收到的数据帧中的目的地址和地址寄存器中的地址进行比较,判断其是否为发到本地的帧。
e)CRC(循环冗余校验)产生校验逻辑:在发送数据时,产生CRC码,对接收帧进行CRC。
f)协议PCA:负责实施以太网规范。
RTL8019AS内部有16kB SRAM,分为64页,256字节/页,组成环形队列作为收发缓冲区,只能按页操作,页地址从0x4000~0x7FFF。可以通过相关的寄存器读写操作,可以对缓冲区进行设置及状态的读取。由于接收缓冲区是按页即256 B来操作的,与缓冲区地址有关的寄存器中只需存储缓冲区的高16位地址即可。在本设计中,将前32页(0x400~0x5fff)作为接收缓冲区,将后32页(0x6000~0x7ff)作为发送缓冲区。
RTL8019AS具有32位输入输出地址,地址偏移量为00H~1FH。其中,00H~0FH共16个地址为寄存器地址。远程DMA地址包括10H~17H,都可以用来做远程DMA端口,只要用其中的一个就可以了。复位端口包括18H~1FH共8个地址,功能相同,用于RTL8019AS复位。RTL8019AS的内部I/O基址是00H,但微处理器要访问8019的地址却不是00H,该地址是由处理器与网络控制器的连线决定的。
RTL8019AS寄存器分为4页,即PAGE0~PAGE3,每一页的地址偏移量均为0x00~0x1f由RTL8019AS的CR(命令寄存器)中的PS1、PS0位来决定要访问的页,每一页中的寄存器由SA0~SA3寻址。第0页和第1页的寄存器很重要,用于数据收发的控制和中断管理等,使用前必须对其进行配置。第2页和第3页只用于诊断和其他一些配置,很少使用。
3设计思路
首先,S3C44B0X通过RTL8019AS的I/O口,对其相关寄存器进行配置。在通信时,S3C44B0X与RTL8019AS的收发缓存器的数据交换由远程DMA控制,而RTL81019AS收发缓存器与以太网总线之间的数据交换由它的本地DMA控制。RTL8019AS通过中断的方式通知S3C44B0X数据收发的结果和状态,S3C44B0X通过查询中断状态寄存器的值,作出相应处理。
系统结构如图2所示。
4接口电路设计
接口电路如图3所示。
S3C 44B0X的nOE、nWE分别与RTL8019AS的IORB、IOWB相连,控制数据的读和写操作,低电平有效。RTL8019使用中断0,对应S3C4480的外部中断1。
RTL8019AS RTL8019AS有3种工作方式:
a)跳线方式:I/O和中断由跳线决定;
b)即插即用方式(PNP):由软件进行自动配置,使用这种方法时,系统的启动程序必须包含支持PNP的函数;
c)免跳线方式:I/O和中断由外接的EEPROM93C46中的内容决定。
在本设计中,为了降低启动程序和接口电路的复杂性,选择跳线方式,故JP接高电平。
X1、X2分别为20 MHz晶振的输入输出端。LED0~2分别连接3个发光二极管,指示网络连接、数据传输和发送的情况。 20F001为网卡滤波器,内部包含一对低通滤波器和一对隔离变压器,其输出TX+/-、RX+/-与RJ45的信号口相连。
由于在本设计中RTL8019AS的AEN与S3C44B0X的nGCS2相连,所以对应S3C44B0X的存储器的起始地址0x0600-0000;并且,由于RTL8019AS的IOS0~IOS3接地,在跳线模式下,当IOS0~IOS1为0000时,RTL8019AS的基址为0300H。因此,在本设计中,S3C44B0X访问RTL8019AS的基址就是0x0600-0300。
5驱动程序设计
5.1程序设计思路
在本设计方案中,驱动程序主要包含3个函数,即系统的初始化函数、接收数据包函数、发送数据包函数。 初始化部分完成RTL8019AS在使用之前的初始化工作,包括设置相关工作模式的寄存器、分配和初始化接收和发送缓冲区、初始化网卡接收地址等。
MAR0-MAR7-多点地址寄存器:这8个寄存器的值是根据多播地址数组的值生成的,提供对多播地址的过滤,过滤掉一些不属于自己接收多播数据包。
这里均设为FFH,接所有多播地址的数据包:
下面6条语句设置MAC地址,寄存器为PAR0~PAR5:实际地址寄存器,这些寄存用来对目标地址数据包进行比较,以确定接收或者拒绝接收。地址放在数组add[6]中。
5.2数据的传输和发送
数据的传输和发送由本地DMA传输和与远程DMA传输两部分完成,前者大部分工作由RTL8019AS自动完成,我们要做的是设置收发缓冲区的大小及指针变量,这些工作在RTL8019AS的初始化时已完成,因此只需要编写远程DMA读写函数。对远端DAM口的读写,不同的只是数据传输方向,这里,仅以读操作为例,即编写从RTL8019AS接收缓冲区取数据包到S3C4480X。(注意:远程DMA的写函数,即向RTL8019AS发送缓冲区写数据函数--send_data()省略。)
5.3以太网接口通信函数流程
这里采用中断和查询相结合的方式来决定是否发送和接收数据。当RTL8019AS的ISR(中断状态寄存器)的任意一中断位置位时,S3C4B0X都要对其进行中断相应(在这里只关注第0中断位和第1中断位,即分别反映RTL8019AS已正确接收到数据和已成功发送数据包,因此在初始化函数中将其他位屏蔽)。这时要对ISR进行访问,来判断是何种中断,进而作出相应的响应,如图4所示。
6结束语
本设计经过软硬件的调试,并已成功地进行以太网数据传输。由于S3C4480X出众的性价比及丰富的外围接口,通过扩展本设计可以应用到嵌入式仪器仪表、工业数据采集网络、嵌入式网络控制等许多领域。