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