基于S3C44B0X的嵌入式以太网接口设计
在互联网络和局域网络飞速发展的今天,计算机进行网络互联的同时,各种家电设备、仪器仪表、工业生产中的数据采集和控制正在走向网络化。
以太网
(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 中的内容决定。
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
出众的性价比及丰富的外围接口,通过扩展本设计可以应用到嵌入式仪器仪表、工业数据采集网络、嵌入式网络控制等许多领域。
评论