📄 8019 isa网卡上网开发套件.htm
字号:
lang=EN-US style="FONT-SIZE: 10pt">(1-3</SPAN><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">天到</SPAN><SPAN
lang=EN-US style="FONT-SIZE: 10pt">)</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><O:P> </O:P></SPAN></P></TD>
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=66>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><FONT
color=#ff0000><SPAN lang=EN-US
style="FONT-SIZE: 10pt">35.00</SPAN><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">元</SPAN>
<SPAN lang=EN-US
style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><O:P></O:P></SPAN></FONT></P></TD>
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=114>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center>500g<SPAN
lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><O:P>以下</O:P>
</SPAN></P></TD></TR>
<TR style="HEIGHT: 18.75pt">
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=224>
<P class=MsoNormal><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> 邮政</SPAN><SPAN
lang=EN-US style="FONT-SIZE: 10pt">EMS</SPAN><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">特快专递</SPAN><SPAN
lang=EN-US style="FONT-SIZE: 10pt">(1-3</SPAN><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">天到</SPAN><SPAN
lang=EN-US style="FONT-SIZE: 10pt">)</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><O:P> </O:P></SPAN></P></TD>
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=66>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><FONT
color=#ff0000><SPAN lang=EN-US
style="FONT-SIZE: 10pt">45.00</SPAN><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">元</SPAN>
<SPAN lang=EN-US
style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><O:P></O:P></SPAN></FONT></P></TD>
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=114>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center>500g<SPAN
lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><O:P>以上</O:P>
</SPAN></P></TD></TR>
<TR style="HEIGHT: 18.75pt">
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=224>
<DIV align=center><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman">
国内快递公司投递(2天内到)</SPAN> </DIV></TD>
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=66>
<P align=center><FONT color=#ff0000>35.00</FONT> </P></TD>
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=114> 1000g</TD></TR>
<TR style="HEIGHT: 18.75pt">
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=224>
<P class=MsoNormal><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> 邮政</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">快递包裹</SPAN><SPAN
lang=EN-US>(8</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">天左右到</SPAN><SPAN
lang=EN-US>)</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><O:P> </O:P></SPAN></P></TD>
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=66>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><FONT
color=#ff0000><SPAN lang=EN-US
style="FONT-SIZE: 10pt">25.00</SPAN><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">元</SPAN>
<SPAN lang=EN-US
style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><O:P></O:P></SPAN></FONT></P></TD>
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=114>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">每多一套加</SPAN><SPAN
lang=EN-US>8</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">元</SPAN>
<SPAN lang=EN-US
style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><O:P></O:P></SPAN></P></TD></TR>
<TR style="HEIGHT: 18.75pt">
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=224 height=28>
<P class=MsoNormal><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> 邮政</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">普通包裹</SPAN><SPAN
lang=EN-US>(20</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">天左右到</SPAN><SPAN
lang=EN-US>)</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><O:P> </O:P></SPAN></P></TD>
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=66 height=28>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><FONT
color=#ff0000>20.00元<SPAN lang=EN-US
style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><O:P>
</O:P></SPAN></FONT></P></TD>
<TD
style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; HEIGHT: 18.75pt"
width=114 height=28>
<P class=MsoNormal style="TEXT-ALIGN: center"
align=center>邮费,邮局包装盒费用</P></TD></TR></TBODY></TABLE>
<P align=center> </P>
<P align=center> </P>
<P align=center> </P>
<P align=left>NE2000网卡芯片驱动程序<BR>xutaol@163.com 2002/10/20</P>
<P>我的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板图纸。一天时间就可以完成,相对来说硬件设计比较简单。<BR>与这部分硬件相对应的软件是网卡驱动。所谓驱动程序是指一组子程序,它们屏蔽了底层硬件处理细节,同时向上层软件提供硬件无关接口。驱动程序可以写成子程序嵌入到应用程序里(如DOS下的I/O端口操作和ISR),也可以放在动态链接库里,用到的时候再动态调入以便节省内存。在WIN98中,为了使V86、WIN16、WIN32三种模式的应用程序共存,提出了虚拟机的概念,在CPU的配合下,系统工作在保护模式,OS接管了I/O、中断、内存访问,应用程序不能直接访问硬件。这样提高了系统可靠性和兼容性,也带来了软件编程复杂的问题。任何网卡驱动都要按VXD或WDM模式编写,对于硬件一侧要处理虚拟机操作、总线协议(如ISA、PCI)、即插即用、电源管理;上层软件一侧要实现NDIS规范。因此在WIN98下实现网卡驱动是一件相当复杂的事情。<BR>我这里说的驱动程序特指实模式下的一组硬件芯片驱动子程序。从程序员的角度看,8019工作流程非常简单,驱动程序将要发送的数据包按指定格式写入芯片并启动发送命令,8019会自动把数据包转换成物理帧格式在物理信道上传输。反之,8019收到物理信号后将其还原成数据,按指定格式存放在芯片RAM中以便主机程序取用。简言之就是8019完成数据包和电信号之间的相互转换:数据包<===>电信号。以太网协议由芯片硬件自动完成,对程序员透明。驱动程序有3种功能:芯片初始化、收包、发包。<BR>以太网协议不止一种,我用的是802.3。它的帧结构如图1所示。物理信道上的收发操作均使用这个帧格式。其中,前导序列、帧起始位、CRC校验由硬件自动添加/删除,与上层软件无关。值得注意的是,收到的数据包格式并不是802.3帧的真子集,而是如图2所示。明显地,8019自动添加了“接收状态、下一页指针、以太网帧长度(以字节为单位)”三个数据成员(共4字节)。这些数据成员的引入方便了驱动程序的设计,体现了软硬件互相配合协同工作的设计思路。当然,发送数据包的格式是802.3帧的真子集,如图3所示。<BR><BR>---------------------------------------------------------------------------------------------------<BR>|前导位PR|帧起始位SD|目的IP地址DA|源IP地址SA|类型TYPE/长度LEN|数据域DATA|
填充PAD
|校验FCS|<BR>---------------------------------------------------------------------------------------------------<BR>62bit
2bit 48bit 48bit 16bit <=1500字节 DATA小于46字节补0 32bit<BR>TYPE说明:0800
IP包;0806 ARP包;814C
SNMP包;8137:IPX/SPX<BR>小于0600H值用于IEEE802帧,表示数据包长度。<BR>DATA说明:DA+SA+TYPE=14字节+DATA=1514字节,即最大传输包长度<=1514<BR>PAD说明:最小包长度不小于60字节,最小DATA长度46字节,不够的补0。<BR>图1
802.3帧结构<BR><BR>------------------------------------------------------------------------------------------------------<BR>|接收状态|下一页指针|以太网帧长度|目的IP地址DA|源IP地址SA|类型TYPE/长度LEN|数据域DATA|填充PAD|校验FCS|<BR>------------------------------------------------------------------------------------------------------<BR>8bit
8bit 16bit 48bit 48bit 16bit <=1500字节 可选 32bit<BR>图2
RTL8019AS接收包帧结构<BR><BR>-------------------------------------------------------------<BR>|目的IP地址DA|源IP地址SA|类型TYPE/长度LEN|数据域DATA|填充PAD|<BR>-------------------------------------------------------------<BR>48bit
48bit 16bit <=1500字节 可选 <BR>图3
RTL8019AS发送包帧结构<BR><BR>有了收发包的格式,如何发送和接收数据包呢?如图4所示,先将待发送的数据包存入芯片RAM,给出发送缓冲区首地址和数据包长度(写入TPSR、TBCR0,1),启动发送命令(CR=0x3E)即可实现8019发送功能。8019会自动按以太网协议完成发送并将结果写入状态寄存器。如图5所示,接收缓冲区构成一个循环FIFO队列,PSTART、PSTOP两个寄存器限定了循环队列的开始和结束页,CURR为写入指针,受芯片控制,BNRY为读出指针,由主机程序控制。根据CURR==BNRY+1?可以判断是否收到新的数据包,新收到的数据包按图2格式存于以CURR指出的地址为首址的RAM中。当CURR==BNRY时芯片停止接收数据包。如果做过FPGA设计,用过VHDL,可以想象到硬件芯片的工作原理。此处,设计2个8bit寄存器和一个2输入比较器,当收到数据包时,接收状态机根据当前状态和比较器结果决定下一个状态,如果CURR=BNRY,进入停收状态;反之,CURR按模增1。8019数据手册没有给出硬件状态机实现方法,说明也很简略,往往要通过作实验的方法推理出工作过程。比如,ISR寄存器不只和中断有关,当接收缓冲溢出时,如果不清ISR(写入FFH),芯片将一直停止接收。在流量较大时溢出经常发生,此时不清ISR,就会导致网卡芯片死机。<BR><BR>双口RAM<BR>----------
---------- - ---------- -<BR>PSTART--->| | TPSR--->| | |
RSAR0,1--->| | |<BR>FIFO开始页---------- 发首址 ---------- | 远端DMA ----------
|<BR>| ... | | | | 首地址 | | |<BR>---------- ---------- | ----------
|<BR>CURR--->| | | ... | TBCR0,1 | ... | RBCR0,1<BR>写页指针 ----------
---------- | 发送数目 ---------- | 远端DMA<BR>| ... | | | | | | |
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -