嵌入式系统中常见的网卡驱动比较(CS8900A,RTL8019,DM9000) 今天我又看了一些文章,想看看具体DM9000 和CS8900A 有什么区别?在KITL 移植的时候,怎么样才能才能把CS8900A 换成DM9000,因为我的KITL 移植就卡在这里了,我的板子是DM9000 驱动,我当然想在5.0 到6.0 的移植一步到位,可是在移植过程中由于是基于模拟器进行移植的,默认的是CS8900A 网卡驱动,导致KITL 出错,具体怎么改呢?这是一个问题,先留在这里。先把我今天看的一篇文章留在这里! 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 模式下,...