Skyeye项目仿真8019设计方案.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Skyeye项目仿真8019设计方案 杨晔 yangye@163.net 2003.1 这个文件是我们为Skyeye项目(/~skyeye)设计仿真RTL8019网络芯片时的设计方案,用户也可以当成Skyeye中8019芯片的说明书看。本设计方案完全基于真实的RTL8019(NE2000兼容),但作了部份简化。 一方面参考linux和其它系统的ne2000驱动,另一方面参考bochs中的网络仿真,再做了一点简化。目前有一些表示状态的寄存器我没写,因为参考了很多8019驱动的程序,都没用到这些寄存器。总之简化有个原则:把虚拟网卡的驱动放到真实8019网卡上去,也直接能用就行了!(但不保证其它系统的驱动能直接在Skeye中用!) 当然这都是指硬件部份了。 此外文档里可能还有错误,请大家参考着8019和dm9008的datasheet看看,寄存器定义以8019的为准,dm9008有所不同。如果发现有错误或有疑问,可以与我或Skyeye小组的其它成员联系。 用户的使用原则是: 如果为Skyeye写网络驱动,以本文档为主要参考,辅以8019和dm9008的datasheet。 如果为真实的RTl8019或其它ne2000网络芯片写驱动,本文档只能作为辅助。 一 虚拟网卡内存 1 分析 8位模式下,网卡含有8K字节的RAM,地址为0x4000-0x5fff(指的是网卡上的存储地址,而不是ISA总线的地址,是网卡工作用的存储器),每256个字节称为一页,共有64页。页的地址就是地址的高8位,页地址为0x00--0xff 。 首先看一下0x40-0x5f页,这8k的ram的一部分用来存放接收的数据包,一部分用来存储待发送的数据包,具体由驱动编写者自己决定。(一般发包只要能容纳一个最大的以太网包就可以了,所以定义为0x40-0x45页,即0x4000-0x45ff,约1.5k。剩下的都用来收包). 这个图是抄来的,按照网卡手册上8位工作模式下只能是4000-5fff,16位模式才能用到6000-7fff的RAM,所以我们还是按照手册上来吧。 再看一下第0页,也就是图中的PROM,Prom内容是网卡在上电复位的时候从93C46里读出来的,其中0x00-0x0B(工作于8位DMA模式)用于存放本节点MAC地址,奇偶地址内容是重复放置的。如:MAC地址00 00 12 34 56 78存放在0x00-0x0B中为00 00 00 00 12 12 34 34 56 56 78 78,单地址和双地址的内容是重复的.一般使用偶数地址的内容,这主要是为了同时适应8位和16位的dma。8019芯片外接一块93c46 eeprom,上电时自动从93c46里把MAC地址读入到PROM中,所以为虚拟网卡写驱动,只要在init函数中读PROM中的MAC地址,并写入工作寄存器PAR0-PAR5就可以了。网卡工作时的地址判断依据就是这几个寄存器,与PROM及93c46无关。PROM的其它地址不能使用。 2 总结 虚拟网卡要模拟的内存共两块, 0x0000-0x000B,12字节,页号为0x00。存放MAC地址 0x4000-0x5FFF 8192字节,页号为0x40-0x60(只用到0x5f,0x60为结束边界),用于存放收发的数据包缓冲,具体收发各多少由驱动程序初始化决定。 驱动对网卡内存的读写是通过一个数据寄存器进行的,方式是DMA,DMA的长度、起始地址等由控制寄存器决定。 二 虚拟网卡寄存器 首先再解释一下Remote DMA和Local DMA。 Local DMA Remote DMA 以太网 网卡 RAM host主机 即Local DMA是网卡自动收发数据到/从网卡的RAM,而Remote DMA是CPU主动从网卡的RAM读写数据到/从CPU的RAM。具体的读写其实可以分为三种: CPU读/写数据到网卡 控制寄存器为 RBCR0,RBCR1:存放要读写数据的长度 RSAR0,RSAR1:存放数据在网卡RAM中存放的起始地址(而不是页号,但通常还是以某页的00为起始,如0x4000) CR: 向命令寄存器发出Remote DMA开始指令 然后就可以通过数据寄存器也就是读写端口0x10去读写数据了,宽度为8位。 网卡发数据到以太网 CPU把数据用Remote DMA 发到网卡后,就可以让网卡用Local DMA向外发数据了。 控制寄存器为: TPSR : 网卡要发送的数据在网卡RAM中的起始页号。所以发送的数据只能从某页的开头存放。 TBCR0,TBCR1:

文档评论(0)

docindoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档