引自:http://blog.ednchina.com/gurongjiang/245620/message.aspx
今天我又看了一些文章,想看看具体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 的内部寄存器进行配置,非常方便。
其中 CS8900_BASE 为基址与硬件连接有关。硬件原理图决定在 S3C2410 的地址空间中 ,CS8900A 的基地址为 x19000000 。那么在 I/O 模式下 ,CS8900A 的内部寄存器默认基地址为 0x300h, 在 S3C2410 的地址空间中的地址为 0x19000300 。
#define CS8900_BASE 0x19000300
完成以上,下面的驱动就非常好写了,用网卡挂起函数示例:
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 结构,因此驱动写起来更加容易,但是 多一个页确定函数 :
寄存器配置函数:
页面切换方法:
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 提供 , 即为 :0X100000000H 。
驱动编写特点 : 采用一个 CMD 信号来控制是对 DM9000 读还是写 , 架构非常简单 , 容易理解 . 有点类似 CS8900A 的 PacketPage 结构 .
驱动关键如下 :
读端口与写端口的宏
配置寄存器的函数 :
其中 DM9000_IO 就是 DM9000 的基地址 , 由高位片选地址 +300H+0H,CMD 接了 A2, 所以 DM9000_DATA 就是 DM9000_IO+4, 即是高位片选地址 +300H+4H.
挂起函数示例
总结 : 可以看出 CS8900A 的接线最为复杂需要将地址线全部接上 ,CS8900A 支持内存模式和 IO 模式 ; rtl8019 功能较 CS8900A 强大 , 提供了 BROM 接口 , 采用寄存器统一编址 , 驱动简单 . 接线相对简单只要若干根地址线 ;DM9000, 功能最强大 , 自适应以太网速度 (10M/100M). 接线最为简单只要一个地址线 + 一个片选线 .