ledsup-083a用的网络芯片是rtl8019as,但是在移植u-boot到开发板的时候,网络的移植出了一点问题。所以想看看rtl8019as这个网卡是如何工作的,很不幸的是,正如网络上很多人说的那样,rtl8019的文档及其的烂,真的不是一般的烂。基本上看过它的文档,跟没看过没什么区别。现将网络同步时钟的网卡工作过程详细讲述一下。
rtl8019as网卡的功能:
一句话来说,网卡所完成的功能就是收发数据。
接收功能:从网络上接收数据,然后存储于网卡内部的RAM(本网卡为16KB)中,然后触发中断,通知CPU来取走数据。
发送功能:CPU发送的数据被复制到网卡内部的RAM中,然后网卡自主的在网络上发送这些数据。
由此可见,对于程序员来说,网卡其实就是一片内存区域。程序员对网卡的操作实际上可以认为是对内存的读写操作。当网络上有数据传来时,LED时钟网卡存储这些数据到内存,并通知CPU到内存的相应位置取相应大小的数据。当时钟CPU想向网络上传输数据时,只需要将数据写入网卡的内存,然后给网卡一个"发送"命令即可。就是这么简单。
很明显的,网络数据是一个层次性很强的东西,OSI就规定了网络的7层协议,TCP/IP规定了5层协议,从数据上来说,tcp帧作为IP帧的数据被打包进IP帧,而IP帧又作为以太网帧的数据被打包进以太网帧。如上所述,CPU跟网卡的交互就是数据的读和写"数据",但是,这个数据到底是什么数据呢?我们该怎么理解从同步时钟的网卡中接收到的二进制数据呢?我应该认为它是一帧IP帧,还是一帧以太网帧呢?我们写内存来发送数据,那么,我们发送的应该是什么格式的数据呢?我们是打包成IP数据,还是需要打包成以太网数据呢?接收和发送的数据的帧格式并不一样,如下图所示:
由上图可见,LED电子时钟只需要将如上图所示的IP帧写入RAM中,其余的就叫给网卡去办就可以了。而接收的数据,其实是一个修改过了的IP帧,整体还是在IP这个层次上。由此可见,对于网络数据,应用层程序只需要处理到IP层,将数据打包成变形的IP帧即可。至于将IP帧打包成以太网帧然后在网络上传输,这些功能都是时钟网卡自己完成的。接收数据也是一样,从网卡的RAM中接收到的数据就是变形的IP帧,至于底层的物理链路数据和以太帧的解析,这些都是网卡完成的。也就是说,IP层以下的处理,对于程序员来说,是透明的。
时钟网络组件联网同步芯片RTL8019AS寄存器介绍:
1、rtl8019as的工作机制以及原理:
网络时钟接收:rtl8019as的RAM是一个循环RAM空间,当网卡从网络上接收到数据后,会按照RAM地址从小到大依次存放接收到的数据。但是RAM的空间只有16K,而且,有一部分还是划为用来做发送缓存,另外的那一部分才是用来做接收缓存的。当网络上的数据超过了缓存的大小怎么办呢?这里就需要介绍一些,rtl8019as的RAM是一种循环RAM,所谓循环RAM,比如说用来做接收缓存的RAM的页是从50页~80页,接收的数据从第50页开始存放,一直存放到第80页。当接收的数据过多,超过了上限的第80页时,再接收到的数据就会重新从第50页开始依次从低到高存放!当然,时钟CPU也在同时的从RAM中读取走数据,所以只要安排得当,采用循环RAM,还是有可能不会将原先的数据冲掉的。而且RAM的利用率将会得到提高。那么怎么样才叫安排得当呢?在实际的机制中,引入了CURR和BNRY这两个"指针"(两个实际的寄存器)。这两个寄存器都是存放的RAM的页地址(rtl8019as也是以页为单位存储的)CURR表示如果网卡接收到了数据,应该从CURR页开始存放。而且这个CURR寄存器的值是网卡自动为它赋值的,每填满一个页,CURR寄存器的值就增加1,表示下一次有数据来的时候从下一个页开始存放。BNRY表示,CPU已经从RAM中接收的数据,到BNRY页为止,就是BNRY+1页的数据还没有被CPU取走。CPU下来再来取数据的时候就应该从BNRY+1页来取数据。那么可以想见,当网卡从网络上接收到数据,已经超过了接收缓冲的上限,重新从下限开始存放的时候,只要我不存放到超过BNRY页,都是不会引起将原来被有被CPU取走的数据覆盖的,不是么?正是这样。这真是一个很好的方法啊。
网络时钟发送:相对于接收,发送功能就要简单一点了。应用程序只需要将数据写入到RAM中,想网卡发出发送命令即可完成数据向网络的发送了(置RD2,RD1,RD0的值为011即可),当网口通知CPU有数据到来,或者CPU检测到RAM中有数据需要读取的时候,设置两个地址值RSAR和RBCR。RSAR0,1:要读取的数据的起始地址,RBCR0,1:要读取的数据的大小(可以以字节为单位),然后我们从数据寄存器中读取数据,每读取一次,数据寄存器中所指向的地址就会增加1。其寄存器变化原理图如下:
仟渔 | https:/// |
所有评论仅代表网友意见,与本站立场无关。