(转)嵌入式系统中常见的网卡驱动比较(CS8900A,RTL8019,DM9000)

news/2024/11/16 18:46:47/

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。

 

    电路连接如下:

 

  

 

CS8900AIO模式特点就是这个PacketPage结构,使用PacketPagePointerPacketPageData 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-SA4CPUA0-A4连接,SA8-SA9接高电平,其余地址线接低。ARMA22nGCS3信号的连接,确定地址映射在系统的哪个Bank,从而确定基地址。如若A22SA8nGCS3SA5,那么寻址范围就是0x8340001F0x83400000

 

 

 

 

 

驱动特点是,对其寄存器的访问与CPU对自己内对存访问几乎一样。寄存器采用了分页技术,每页寄存器的便宜都是001F这样使硬件连接简单。另外RTL8019BROM接口,可以接非易失存储器,复位时可以读取其内部数据,十分方便。

 

由于类似同意编址,而不像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(地址允许)是输入引脚片选信号。SA4SA9是地址总线49,AEN低且SA9SA8,SA7SA6SA5SA4为低时,DM9000被选中。DM9000默认I/0基地址为300H

 

CMD引脚用于设置COMMAND模式,CMD为高时,选择数据端口。CMD为低时,选地址端口。数据端口和地址端口的地址码由下式决定:

 

DM9000地址端口=高位片选地址+300H+0H

 

DM9000数据端口=高位片选地址+300H+4H

 

其中,高位片选地址由S3C2410的NGCS3提供,32156_2009081512241515lL8

原文出处:http://bbs.ednchina.com/BLOG_ARTICLE_252721.HTM

转载于:https://www.cnblogs.com/lihaiping/archive/2013/03/25/DM9000.html


http://www.ppmy.cn/news/249140.html

相关文章

Linux-2.6.20的cs8900驱动分析(一)

本博客转载于:http://blog.chinaunix.net/xmlrpc.php?rblog/article&uid22535114&id1773574 一、初始化阶段 网络初始化被调用的路径为: init->do_basic_setup->do_initcalls->net_olddevs_init->ethif_probe2->probe_list2-&g…

NANO2410 CS8900 debugging

1. 内核启动过程中CS8900驱动始终没有加载 最终发现跟device注册有关,修改mach_smdk2410.c文件如下: /* CS8900 */static struct resource s3c_cs89x0_resources[] {[0] DEFINE_RES_MEM(0x19000000, SZ_1M),[1] DEFINE_RES_IRQ(IRQ_EINT9), };stati…

Linux-2.6.20的cs8900驱动分析(三)

本博客转载于:http://blog.chinaunix.net/xmlrpc.php?rblog/article&uid22535114&id1773576 三、net_rx和net_send_packet 3.1 net_rx 在这部分将介绍cs8900驱动的两个最重要的函数,内核通过该两个函数实现了数据的收发。net_rx函数的主要功能是…

CS8900A网络驱动程序移植

上图为开发板上的网卡原理图,可得到: 1.CS8900A的访问基址为0x19000000 2.总线位宽为16 3.中断引脚为EINT9 驱动文件drivers/net/cs89x0.c既可以编进内核,也可以编译为一个可加载模块。编译进内核时,它的入口函数为cs89x0_pro…

LT8900低成本的无线电收发器 2.4G射频芯片 CMOS射频收发器

LT8900低成本的2.4GHz无线电收发器 概述 LT8900是一个低成本,完全集成CMOS射频收发器,GFSK数据调制解调器,和数据包框架,优化用于中GHz ISM波段。 它包含发射接收射频合成器,和数字调制解调器功能,少数外…

中兴服务器售后,中兴全兼容智能视讯服务器ZXMVC8900

全兼容智能视讯服务器ZXMVC8900 中兴全兼容智能视讯服务器ZXMVC8900采用电信交换机架构设计,全面支持ITU-T H.323、H.320协议,可通过不同网络(IP、ISDN、DDN、SDH、ATM、卫星等)接入用户终端,并组织召开视频会议。 XMVC8900具有全兼容各种网络…

STM32驱动JQ8900语音模块

上次写了esp32驱动JQ8900模块,我做设计一般会把外设先在esp32上实现一般,再移植到比较复杂的stm32上去。直接上正常运行的干货代码。 文章目录 一、硬件准备二、程序编写1.jq8900.c2.jq8900.h3.main.c 三、音频替换总结 一、硬件准备 STM32F10x系列任意…

Linux 下 cs8900a 的移植说明

Linux 下 cs8900a 的移植说明 为 cs8900a 建立编译菜单 1. 拷贝到文件把 cs8900a 的压缩包拷贝到 arm 用户下的 dev_home/localapps/ [armlocalhost localapps]$ tar xzvf cs8900a.tar.gz [armlocalhost localapps]$cd cs8900a [armlocalhost cs8900a]$cp cs8900a.c $KERNEL/l…