ledsup-083a用的網絡芯片是rtl8019as,但是在移植u-boot到開發(fā)板的時候,網絡的移植出了一點問題。所以想看看rtl8019as這個網卡是如何工作的,很不幸的是,正如網絡上很多人說的那樣,rtl8019的文檔及其的爛,真的不是一般的爛。基本上看過它的文檔,跟沒看過沒什么區(qū)別?,F(xiàn)將網絡同步時鐘的網卡工作過程詳細講述一下。
rtl8019as網卡的功能:
一句話來說,網卡所完成的功能就是收發(fā)數據。
接收功能:從網絡上接收數據,然后存儲于網卡內部的RAM(本網卡為16KB)中,然后觸發(fā)中斷,通知CPU來取走數據。
發(fā)送功能:CPU發(fā)送的數據被復制到網卡內部的RAM中,然后網卡自主的在網絡上發(fā)送這些數據。
由此可見,對于程序員來說,網卡其實就是一片內存區(qū)域。程序員對網卡的操作實際上可以認為是對內存的讀寫操作。當網絡上有數據傳來時,LED時鐘網卡存儲這些數據到內存,并通知CPU到內存的相應位置取相應大小的數據。當時鐘CPU想向網絡上傳輸數據時,只需要將數據寫入網卡的內存,然后給網卡一個"發(fā)送"命令即可。就是這么簡單。
很明顯的,網絡數據是一個層次性很強的東西,OSI就規(guī)定了網絡的7層協(xié)議,TCP/IP規(guī)定了5層協(xié)議,從數據上來說,tcp幀作為IP幀的數據被打包進IP幀,而IP幀又作為以太網幀的數據被打包進以太網幀。如上所述,CPU跟網卡的交互就是數據的讀和寫"數據",但是,這個數據到底是什么數據呢?我們該怎么理解從同步時鐘的網卡中接收到的二進制數據呢?我應該認為它是一幀IP幀,還是一幀以太網幀呢?我們寫內存來發(fā)送數據,那么,我們發(fā)送的應該是什么格式的數據呢?我們是打包成IP數據,還是需要打包成以太網數據呢?接收和發(fā)送的數據的幀格式并不一樣,如下圖所示:
由上圖可見,LED電子時鐘只需要將如上圖所示的IP幀寫入RAM中,其余的就叫給網卡去辦就可以了。而接收的數據,其實是一個修改過了的IP幀,整體還是在IP這個層次上。由此可見,對于網絡數據,應用層程序只需要處理到IP層,將數據打包成變形的IP幀即可。至于將IP幀打包成以太網幀然后在網絡上傳輸,這些功能都是時鐘網卡自己完成的。接收數據也是一樣,從網卡的RAM中接收到的數據就是變形的IP幀,至于底層的物理鏈路數據和以太幀的解析,這些都是網卡完成的。也就是說,IP層以下的處理,對于程序員來說,是透明的。
時鐘網絡組件聯(lián)網同步芯片RTL8019AS寄存器介紹:
1、rtl8019as的工作機制以及原理:
網絡時鐘接收:rtl8019as的RAM是一個循環(huán)RAM空間,當網卡從網絡上接收到數據后,會按照RAM地址從小到大依次存放接收到的數據。但是RAM的空間只有16K,而且,有一部分還是劃為用來做發(fā)送緩存,另外的那一部分才是用來做接收緩存的。當網絡上的數據超過了緩存的大小怎么辦呢?這里就需要介紹一些,rtl8019as的RAM是一種循環(huán)RAM,所謂循環(huán)RAM,比如說用來做接收緩存的RAM的頁是從50頁~80頁,接收的數據從第50頁開始存放,一直存放到第80頁。當接收的數據過多,超過了上限的第80頁時,再接收到的數據就會重新從第50頁開始依次從低到高存放!當然,時鐘CPU也在同時的從RAM中讀取走數據,所以只要安排得當,采用循環(huán)RAM,還是有可能不會將原先的數據沖掉的。而且RAM的利用率將會得到提高。那么怎么樣才叫安排得當呢?在實際的機制中,引入了CURR和BNRY這兩個"指針"(兩個實際的寄存器)。這兩個寄存器都是存放的RAM的頁地址(rtl8019as也是以頁為單位存儲的)CURR表示如果網卡接收到了數據,應該從CURR頁開始存放。而且這個CURR寄存器的值是網卡自動為它賦值的,每填滿一個頁,CURR寄存器的值就增加1,表示下一次有數據來的時候從下一個頁開始存放。BNRY表示,CPU已經從RAM中接收的數據,到BNRY頁為止,就是BNRY+1頁的數據還沒有被CPU取走。CPU下來再來取數據的時候就應該從BNRY+1頁來取數據。那么可以想見,當網卡從網絡上接收到數據,已經超過了接收緩沖的上限,重新從下限開始存放的時候,只要我不存放到超過BNRY頁,都是不會引起將原來被有被CPU取走的數據覆蓋的,不是么?正是這樣。這真是一個很好的方法啊。
網絡時鐘發(fā)送:相對于接收,發(fā)送功能就要簡單一點了。應用程序只需要將數據寫入到RAM中,想網卡發(fā)出發(fā)送命令即可完成數據向網絡的發(fā)送了(置RD2,RD1,RD0的值為011即可),當網口通知CPU有數據到來,或者CPU檢測到RAM中有數據需要讀取的時候,設置兩個地址值RSAR和RBCR。RSAR0,1:要讀取的數據的起始地址,RBCR0,1:要讀取的數據的大小(可以以字節(jié)為單位),然后我們從數據寄存器中讀取數據,每讀取一次,數據寄存器中所指向的地址就會增加1。其寄存器變化原理圖如下:
仟漁 |
同類優(yōu)質產品
會員登錄X請輸入賬號 請輸入密碼 請輸驗證碼 提示X您的留言已提交成功!我們將在第一時間回復您~
中美貿易網 設計制作,未經允許翻錄必究 .Copyright(C) http://www.trinidezines.com,All rights reserved. 以上信息由企業(yè)自行提供,信息內容的真實性、準確性和合法性由相關企業(yè)負責,中美貿易網對此不承擔任何保證責任。溫馨提示:為規(guī)避購買風險,建議您在購買產品前務必確認供應商資質及產品質量。 |
所有評論僅代表網友意見,與本站立場無關。