标题:
嵌入式系统中常见的网卡驱动比较(CS8900A,RTL8019,DM9000)
[打印本页]
作者:
m1_ljp
时间:
2013-3-15 14:00
标题:
嵌入式系统中常见的网卡驱动比较(CS8900A,RTL8019,DM9000)
1.
CS8900A
CS8900
芯片
是
Cirrus Logic
公司生产的一种局域网处理芯片,在
嵌入式
领域中使用非常常见。它的封装是
100-pin TQFP
,内部集成了在片
RAM
、
10BASE-T
收发滤波器,并且提供
8
位和
16
位两种接口。
CS8900
与
ARM
芯片按照
16
位方式连接,
网卡
芯片复位后默认工作方式为
I/O
连接,基址是
300H
。
CS8900A
还提供其它性能和配置选择
.
它独特的
Packet Page
结构
可自动适应网络通信量
模式
的改变和现有
系统
资源
,
从而提高系统效率。
MCU
与
CS8900A
的数据传输有三种模式
:I/O
模式
,
存储器模式和
DMA
模式
.
本
设计
采用
CS8900A
默认的
I/O
模式
,
因为
I/O
模式简单易用
.
在
I/O
模式下
,
通过访问
8
个
16
位的
寄存器
来访问
PacketPage
结构
,
这
8
个寄存器被映射到
2410
地址空间的
16
个连续地址。当
CS8900A
上电后
,
寄存器默认的基址为
0x300h
。
电路连接如下:
CS8900A
的
IO
模式特点就是这个
PacketPage
结构
,使用
PacketPagePointer
和
PacketPageData Port
这两个寄存器对
CS8900A
的内部寄存器进行配置,非常方便。
#define CS8900_PPTR
*(volatileCS8900_REG*) (CS8900_BASE+0x05*CS8900_OFF)
//PacketPagePointer
的定义
#define CS8900_PDATA
*(volatile CS8900_REG *)(CS8900_BASE+0x06*CS8900_OFF)
//PacketPageData Port
通过如下函数对
cs8900a
设置
get_reg(int regno)
//32
位模式
,
读寄存器的数据
{
CS8900_PPTR = regno;
// regno
为要读的寄存器偏移地址
return (unsigned short) CS8900_PDATA;
//
返回要读寄存器的数据
}
static void put_reg(int regno, unsigned short val)
//
写寄存器
{
CS8900_PPTR = regno;
CS8900_PDATA = val;
//
写寄存器
}
其中
CS8900_BASE
为基址与硬件连接有关。硬件原理图决定在
S3C2410
的地址空间中
,CS8900A
的基地址为
x19000000
。那么在
I/O
模式下
,CS8900A
的内部寄存器默认基地址为
0x300h,
在
S3C2410
的地址空间中的地址为
0x19000300
。
#define CS8900_BASE 0x19000300
完成以上,下面的
驱动
就非常好写了,用网卡挂起函数示例:
void eth_halt( void )
{
/* disable transmitter/receiver mode */
put_reg(PP_LineCTL, 0);
//
禁止网卡
/* "shutdown" to show ChipID or kernel wouldn't find he cs8900 ... */
get_reg_init_bus(PP_ChipID);
}
2.
rtl8019
RTL8019AS
是高度集成以太网控制器,为了提供完全解决即插即用方案,
RTL8019AS
在集成
10BASET
收发器,
BNC,
和
AUI
接口之间的自动检测功能。此外,
8
条
IRQ
总线和
16
条基本地址总线为大资源情况下提供了宽松的环境。
RTL8019AS
支持
16k
,
32k
,和
64k
字节
BROM
和闪存接口。它仍然提供页面模式功能,这种功能能支持在仅
16k
字节内存系统空间下的
4M
字节的
BROM.
此外,
BROM
的无用命令被用来释放
BROM
内存空间。
RTL8019AS
用
16k
字节
SRAM
设计在单片芯片上,它的设计不仅提供了更多友好的功能,而且节省了
SRAM
存储资源。
RTL8019
选择的端口
I/O
基地址为
300H
。它的地址偏移量共
32
个
,
用到的地址空间为
300H-31FH,
将地址线
SA0-SA4
与
CPU
的
A0-A4
连接
,SA8-SA9
接高电平
,
其余地址线接低。
ARM
的
A22
和
nGCS3
信号的连接
,
确定地址映射在系统的哪个
Bank
上
,
从而确定基地址。如若
A22
接
SA8
,
nGCS3
接
SA5
,那么寻址范围就是
0x8340001F
~
0x83400000
。
驱动特点是,对其寄存器的访问与
CPU
对自己内对存访问几乎一样。
寄存器采用了分页
技术
,每页寄存器的便宜都是
00
~
1F
。
这样使硬件连接简单。另外
RTL8019
有
BROM
接口,可以接非易失存储器,复位时可以读取其内部数据,十分方便。
由于类似同意编址,而不像
CS8900A
那样采用
PacketPage
结构,因此驱动写起来更加容易,但是
多一个页确定函数
:
寄存器配置函数:
static unsigned char get_reg (unsigned int regno)
//
得到寄存器的值
{
return (*(unsigned char *) regno);
}
static void put_reg (unsigned int regno, unsigned char val) //
给寄存器赋值
{
*(volatile unsigned char *) regno = val;
}
页面切换方法:
put_reg (RTL8019_COMMAND, RTL8019_PAGE0);
网卡挂起函数示例:
void eth_halt (void)
{
put_reg (RTL8019_COMMAND, 0x01);
//
挂起网卡
}
3.
DM9000
该
DM9000
是一款完全集成的和符合成本效益单芯片快速以太网
MAC
控制器与一般处理接口,一个
10/100M
自适应的
PHY
和
4K DWORD
值的
SRAM
。它的目的是在低功耗和高性能进程的
3.3V
与
5V
的支持宽容。
DM9000
还提供了介质无关的接口,来连接所有提供支持介质无关接口功能的家用电话线网络设备或其他收发器。该
DM9000
支持
8
位,
16
位和
32 -
位接口访问内部存储器,以支持不同的
处理器
。
随着其成本的降低和功能的强大越来越被广泛使用。
对
DM9000
读写操作
,
首先对
DM9000
正确寻址。
AEN(
地址允许
)
是输入引脚片选信号。
SA4
~
SA9
是地址总线
4
~
9
位
,
当
AEN
低且
SA9
和
SA8
高
,
而
SA7
、
SA6
、
SA5
、
SA4
为低时
,
则
DM9000
被选中。
DM9000
默认
I/0
基地址为
300H
。
CMD
引脚用于设置
COMMAND
模式
,CMD
为高时
,
选择数据端口。
CMD
为低时
,
选地址端口。数据端口和地址端口的地址码由下式决定
:
DM9000
地址端口
=
高位片选地址
+300H+0H
DM9000
数据端口
=
高位片选地址
+300H+4H
其中,高位片选地址由S3C2410的NGCS3提供
,
</
32156_2009081512241515lL8
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0