嵌入式系统中常见的网卡驱动比较

上传人:pu****.1 文档编号:564850756 上传时间:2024-02-12 格式:DOCX 页数:6 大小:82.99KB
返回 下载 相关 举报
嵌入式系统中常见的网卡驱动比较_第1页
第1页 / 共6页
嵌入式系统中常见的网卡驱动比较_第2页
第2页 / 共6页
嵌入式系统中常见的网卡驱动比较_第3页
第3页 / 共6页
嵌入式系统中常见的网卡驱动比较_第4页
第4页 / 共6页
嵌入式系统中常见的网卡驱动比较_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《嵌入式系统中常见的网卡驱动比较》由会员分享,可在线阅读,更多相关《嵌入式系统中常见的网卡驱动比较(6页珍藏版)》请在金锄头文库上搜索。

1、嵌入式系统中常见的网卡驱动比较(CS8900A,RTL8019,DM9000)今天我又看了一些文章,想看看具体DM9000和CS8900A有什么区别?在KITL移植的时候,怎么样才能才能把CS8900A换成DM9000,因为我的KITL移植就卡在这里了,我的板子是DM9000驱动,我当然想在5.0到6.0的移植一步到位,可是在移植过程中由于是基于模拟器进行移植的,默认的是CS8900A网卡驱动,导致KITL出错,具体怎么改呢?这是一个问题,先留在这里。先把我今天看的一篇文章 留在这里!1. CS8900ACS8900芯片是Cirrus Logic公司生产的一种局域网处理芯片,在嵌入 式领域中使

2、用非常常见。它的封装是100-pin TQFP,内部集成了在片RA M、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

3、个寄存器 被映射到2410地址空间的16个连续地址。当CS8900A上电后,寄存器默 认的基址为0x300h。电路连接如下:S3C241OCSS900APE63745RJ 斎CS8900A的IO模式特点就是这个PacketPage结构,使用PacketP agePointer 和 PacketPageData Port 这两个寄存器对 CS8900A 的内部 寄存器进行配置,非常方便。#define CS8900_PPTR *(volatileCS8900_REG*) (CS8900_BASE+0x05*CS8900_OFF)/PacketPagePointer 的定义*)(CS8900_BA

4、SE+0x06*CS8900_OFF)32位模式,读寄存器的数据/ regno为要读的寄存器偏移地址/返回要读寄存器的数据/写寄存器#define CS8900_PDATA volatile CS8900_REG /PacketPageData Port通过如下函数对cs8900a设置get_reg(int regno)CS8900_PPTR = regno;return (unsigned short) CS8900_PDATA;static void put_reg(int regno, unsigned short val)CS8900_PPTR = regno;CS8900_PDATA

5、 = 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);/ 禁止网卡/* sh

6、utdown to show ChipID or kernel wouldnt find he cs8900 . */ get_reg_init_bus(PP_ChiplD);2. rt18019RTL8019AS是高度集成以太网控制器,为了提供完全解决即插即用方 案,RTL8019AS在集成10BASET收发器,BNC,和AUI接口之间的自动 检测功能。此外,8条IRQ总线和16条基本地址总线为大资源情况下提 供了宽松的环境。RTL8019AS 支持16k,32k,和64k字节BROM 和闪存接口。它仍 然提供页面模式功能,这种功能能支持在仅 16k字节内存系统空间下的4 M字节的BROM.

7、此外,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,那么寻址范围就是0x8340001F0x83400000。IOAO-IOA15TXD

8、10B1010B7IOBOI0B110B210B8VCCMAX232TPOUT15忖SA0-SA4IORB10WB AW-A10 KSTDRV IRQM 1OCS16BA7ASA9-A8AENRJ4593C46GNDvcc驱动特点是,对其寄存器的访问与CPU对自己内对存访问几乎一样。寄存器采用了分页技术,每页寄存器的便宜都是001F。这样使硬件连接简单。另外RTL8019有BROM接口,可以接非易失存储器,复位时可以 读取其内部数据,十分方便。由于类似同意编址,而不像CS8900A那样采用PacketPage结构,因 此驱动写起来更加容易,但是 多一个页确定函数:寄存器配置函数:static

9、unsigned char get_reg (unsigned int regno)/得至V寄存器的值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);/ 挂

10、起网卡3. DM9000该DM9000是一款完全集成的和符合成本效益单芯片快速以太网 MAC 控制器与一般处理接口,一个10/100M自适应的PHY和4K DWORD值的 SRAM。它的目的是在低功耗和高性能进程的 3.3V与5V的支持宽容。DM9000还提供了介质无关的接口,来连接所有提供支持介质无关接 口功能的家用电话线网络设备或其他收发器。该DM9000支持8位,16位和32 -位接口访问内部存储器,以支持不同的处理器。随着其成本的降低和功能的强大越来越被广泛使用。对DM9000读写操作,首先对DM9000正确寻址。AEN(地址允许)是输 入引脚片选信号。SA4SA9是地址总线49位,当

11、AEN低且SA9和SA 8高,而SA7、SA6、SA5、SA4为低时,则DM9000被选中。DM9000默认 I/0基地址为300H。CMD引脚用于设置COMMAND模式,CMD为高时,选择数据端口。C MD为低时,选地址端口。数据端口和地址端口的地址码由下式决定:DM9000地址端口 =高位片选地址+300H+0HDM9000数据端口 =高位片选地址+300H+4H其中,高位片选地址由S3C2410的NGCS3提供,即为:0X100000000H。驱动编写特点:采用一个CMD信号来控制是对DM9000读还是写,架 构非常简单,容易理解有点类似CS8900A的PacketPage结构驱动关键如

12、下:读端口与写端口的宏#define DM9000_outb(d,r) ( *(volatile u8 *)r = d )#define DM9000_outw(d,r) ( *(volatile u16 *)r = d )#define DM9000_outl(d,r) ( *(volatile u32 *)r = d )#define DM9000_inb(r) (*(volatile u8 *)r)#define DM9000_inw(r) (*(volatile u16 *)r)#define DM9000_inl(r) (*(volatile u32 *)r)配置寄存器的函数:sta

13、tic u8DM9000_ior(int reg)/ 读寄存器的值DM9000_outb(reg, DM9000_Q);/类似 cs8900a 把寄存器索引写道 DM9000_IOreturn DM9000_inb(DM9000_DATA);/读取 DM9000_DATA 即是寄存器的数值static voidDM9000_iow(int reg, u8 value)DM9000_outb(reg, DM9000_Q);DM9000_outb(value, DM9000_DATA);/ 给寄存器赋值其中DM9000_IO就是DM9000的基地址,由高位片选地址+300H+0H, CMD接了 A

14、2,所以DM9000_DATA就是DM9000_IO+4,即是高位片选地址 +300H+4H.挂起函数示例voideth_halt(void)DM9000_iow(DM9000_GPR,0x01);/*Power-DownPHY */DM9000_iow(DM9000_IMR,0x80);/*Disable allinterrupt */DM9000_iow(DM9000_RCR,0x00);/*Disable RX*/总结:可以看出CS8900A的接线最为复杂需要将地址线全部接上,CS8 900A支持内存模式和10模式;rtl8019功能较CS8900A强大,提供了 BR OM接口,釆用寄存

15、器统一编址,驱动简单接线相对简单只要若干根地址线; DM9000,功能最强大,自适应以太网速度(10M/100M)接线最为简单只要一 个地址线+一个片选线.这3个多月事情总是不怎么顺,其中之一是mcf52277的项目 其dm9000总是 不正常,第一版是因为没有注意coldfire是大端处理器,导致原理图上52277和 dm9000之间的16位数据总线高8位和低8位颠倒了,这个错误我以为是可以 用软件修正的,但修正后仍然不是很正常,ping还比较正常,但tftp不行。于是重做了一板,修正了大小端问题,但发现还是老问题,dm9000驱动看了 N 遍,研究生搞的有些没有信心了,各种可能都试了,还是不行。看来还是板子布 线的问题可能性比较大,原先以为dm9000这种东西布线没有太多讲究,以前 用别的以太网片子也没特别注意,一直很正常,可能dm9000比较娇气。52277这个项目在开始评估的时候犯了重大错误,本来用52277来做的最大原 因是它集成了 lcd con

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号