51 单片机 RTL8019AS 网卡驱动程序
原作者::未知 添加时间:2008-01-07原文发表:2008-01-07人气:355来源:网络
我的 SNMP 网管板使用了 RTL8019AS 10M ISA 网卡芯片接入以太网。选它的好处是:
NE2000 兼容,软件移植性好;接口简单不用转换芯片如 PCI-ISA 桥;价格便宜 2.1$/片(我
的购入价为 22 元 RMB/片);带宽充裕(针对 51);较长一段时间内不会停产。8019 有 3 种配
置模式:跳线方式、即插即用 P&P 方式、串行 Flash 配置方式。为了节省成本,我去掉了
9346 而使用 X5045 作为闪盘存储 MAC 地址和其他可配置信息。P&P 模式用在 PC 机中,
这里用不上。只剩下跳线配置模式可用,它的电路设计参考 REALTEK 提供的 DEMO 板图
纸。一天时间就可以完成,相对来说硬件设计比较简单。
与这部分硬件相对应的软件是网卡驱动。所谓驱动程序是指一组子程序,它们屏蔽了底层
硬件处理细节,同时向上层软件提供硬件无关接口。驱动程序可以写成子程序嵌入到应用
程序里(如 DOS 下的 I/O 端口操作和 ISR),也可以放在动态链接库里,用到的时候再动态
调入以便节省内存。在 WIN98 中,为了使 V86、WIN16、WIN32 三种模式的应用程序共存,
提出了虚拟机的概念,在 CPU 的配合下,系统工作在保护模式,OS 接管了 I/O、中断、内
存访问,应用程序不能直接访问硬件。这样提高了系统可靠性和兼容性,也带来了软件编
程复杂的问题。任何网卡驱动都要按 VXD 或 WDM 模式编写,对于硬件一侧要处理虚拟机
操作、总线协议(如 ISA、PCI)、即插即用、电源管理;上层软件一侧要实现 NDIS 规范。
因此在 WIN98 下实现网卡驱动是一件相当复杂的事情。
我这里说的驱动程序特指实模式下的一组硬件芯片驱动子程序。从程序员的角度看,8019
工作流程非常简单,驱动程序将要发送的数据包按指定格式写入芯片并启动发送命令 ,
8019 会自动把数据包转换成物理帧格式在物理信道上传输。反之, 8019 收到物理信号后将
其还原成数据,按指定格式存放在芯片 RAM 中以便主机程序取用。简言之就是 8019 完成
数据包和电信号之间的相互转换:数据包<===>电信号。以太网协议由芯片硬件自动完成,
对程序员透明。驱动程序有 3 种功能:芯片初始化、收包、发包。
以太网协议不止一种,我用的是 802.3。它的帧结构如图 1 所示。物理信道上的收发操作均
使用这个帧格式。其中,前导序列、帧起始位、CRC 校验由硬件自动添加/删除,与上层软
件无关。值得注意的是,收到的数据包格式并不是 802.3 帧的真子集,而是如图 2 所示。明
显地,8019 自动添加了“接收状态、下一页指针、以太网帧长度(以字节为单位)”三个数据
成员(共 4 字节)。这些数据成员的引入方便了驱动程序的设计,体现了软硬件互相配合协
同工作的设计思路。当然,发送数据包的格式是 802.3 帧的真子集,如图 3 所示。