77范文网 - 专业文章范例文档资料分享平台

RTL8019AS使用 - 图文(6)

来源:网络收集 时间:2019-04-15 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

的意思是,从该页开始的页不能做为 接收缓冲区.而PSTART的意思是从这一页开始做为接收缓冲区. 因此PSTART=0x4c ,PSTOP=0x7f+1=0x80,PSTOP被设置为(最后一页的页码+1). 再如: PSTART=0x40 PSTOP=0x60

那么网卡使用0x4000-0x5FFF做为接收缓冲区. 而我的程序的设置是PSTART=0x4c PSTOP=0x80

而页0x40--0x4b共12页做为发送数据缓冲区,为什么用12页,是因为最大的一个数据包是1514字节+4字节校验.一个最大的数据包需要6页=256*6=1536字节.

12页可以放两个最大的包.我们把前6页0x40--0x45称为发送缓冲1,接下来的6页0x46--0x4B称为发送缓冲2.

这两个发送缓冲的作用是:

用户可以将数据包放在发送缓冲1,然后启动发送.发送的过程中,如果用户还有数据包要发,那么这时把要发的数据包放在发送缓冲2(一边发送,一边把下一包放到缓冲区里),等到发完发送缓冲1的数据包就可以马上启动发送缓冲2的数据包.这样可以不断地进行发送数据.

我们设置了接收缓冲区之后,那么接收到的第一个数据包放在哪里呢?这由CURR决定.

控制接收缓冲区的有两个寄存器CURR,BNRY.CURR是网卡写缓冲区的指针,指向此时要写的页. BNRY是读指针,指向用户已经读走的页.

那么要知道网卡正在写哪一个字节的数据,读取CLDA1,CLDA0的值就知道了. 那么如何初始化CURR,BNRY这两个指针呢? 初始化的时候使BNRY=CURR-1页, 例如:

26

CURR=0x4d BNRY=0x4c

要注意的是:如果 CURR=0x4c(第一个接收页) 那么BNRY=0x7f(最后一个接收页) 写成语言就是: BNRY=CURR-1;

if(BNRY<0x4c)BNRY=0x7f; 这就是两者的初始化的关系式.

初始化CURR=0x4d,表示第一个收到的数据包将存放在0x4d00地址开始的缓冲区. 初始化CURR=0x4c,表示第一个收到的数据包将存放在0x4c00地址开始的缓冲区. CURR只初始化一次,以后都不用再去修改它.

我的设置是CURR=0x4d.

网卡收到一个数据包,假如是一个短数据包,只要一页就可以存储的,那么这时候 CURR将会被加一.CURR将等于0x4d+1=0x4e.

假如需要两页来存储,那么CURR将等于0x4d+2=0x4f

如果CURR等于结束页PSTOP,也就是CURR>0x7f时,CURR将被重置成等于PSTART=0x4c. CURR是网卡内部自己控制的.用户不需要干预.

网卡存储一定是按页存储,不满一页,也使用一页,下一包将用下一页开始存储. 举个例子; CURR=0x4f BNRY=0x4e

这时收到一个数据包

这是一个典型的ARP应答包,数据包发往52:54:ab:3d:8e:2c,发送者的网卡地址为 00:d0:09:68:f7:1e ,类型为0806

假设我的网卡地址是52:54:ab:3d:8e:2c,那么可以收到该包 这时

CURR=0x50 BNRY=0x4e

那么收到一包之后BNRY=CURR-2,而不是BNRY=CURR-1,也就是说两个指针差了两页,而不是一页.也就是说当CURR , BNRY 两个指针差2页或2页以上时,表示网卡收到新的数据包.(检查是否有新的数据包要用到这个关系,没有新的数据包时,两者指针只差一页).

,数据包只有60个字节的数据,那么网卡将用CURR指向的页0x4f来存储该包数据. 存储内容如下:

0x4f00:015040005254AB3D8E2C00D00968F71E 0x4f10:0806000108000604000200D00968F71E 0x4f20:C0A800015254AB3D8E2CC0A800070000 0x4f30:00000000000000000000000000000000

27

0x4f40:492E24C8

我们可以看到前面和后面都加了一些东西,中间的才是数据. 共加了8个字节的内容(共用了68个字节). 那么前面的4个字节的含义为:

前面的4个字节为:01504000

第一个字节0x01为接收的状态,也就是RSR(接收状态寄存器的值) 该字节Receive Status含义:

么根据上面的标志位的定义,0x01=0000 0001B,也就是标志位PRX=1 ,表示这个数据包接收良好,没有错误.CRC=0,表示校验正确.PHY=0,表示这不是广播数据包.

第2个字节0x50 Next Packet Pointer,是一个指针,表示下一个数据包将存储在0x50页开始的地址0x5000.事实上等于此时的CURR=0x50.

第3和第4是接收的长度.表示该数据包的长度.这里是0x4000,要注意的是长度的高位和低位是颠倒的:

Receive Byte Count1=0x00 Receive Byte Count0=0x40

长度应该是0x0040=64字节.60字节是内容,4字节校验. 最后面的4个字节 492E24C8就是CRC校验码.

28

RTL8019AS--如何读写网卡的RAM

要接收和发送数据包都必须读写网卡的内部的16k的ram,必须通过DMA进行读和写.网卡的内部ram是一块双端口的16k字节的ram.所谓双端口就是说有两套总线连结到该ram,一套总线A是网卡控制器读/写网卡上的ram,另一套总线B是单片机读/写网卡上的ram.总线A又叫Local DMA,总线B又叫Remote DMA.

上图中虚线框住的部分为Remote DMA,也就是单片机对网卡ram进行读写的总线,对8019来说就是ISA总线.没有框住的部分(左边的部分),就是Local DMA,网卡控制器对网卡ram进行读写的总线. 其中的地址总线没有画出来,只画了数据总线.实际在ram的内部还有一些总线仲裁的逻辑,这里也没有画出来.所谓总线仲裁的逻辑就是为了实现两套总线都能进行对ram的读写,而不互相冲突.

网卡控制器读写网卡ram(Local DMA)的优先级比单片机读写网卡ram的优先级要高.优先级要高的意思是:

1.当两者都要请求控制总线时.Local DMA优先获得控制权.

2.高优先级的Local DMA可以中断Remote DMA,而Remote DMA不能中断Local DMA

3. 在Remote DMA,也就是单片机对网卡ram读写的过程进行中可以被Local DMA中断,Local DMA中断Remote DMA,然后进行Local DMA的数据传输,Local DMA传输完毕之后继续刚才被中断的Remote DMA,以完成Remote DMA的传输.

29

图中的Remote就是Remote DMA的传输,Local burst就是Local DMA的传输.图的左边是一个Remote DMA被Local DMA中断的示意图.Remote DMA是等到Local Burst完成之后才结束该次的传输.被打断多久的时间取决于FT1,FT0(是DCR配置寄存器的位)

30

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库RTL8019AS使用 - 图文(6)在线全文阅读。

RTL8019AS使用 - 图文(6).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/596681.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: