專利名稱:一種嵌入式系統(tǒng)中以太網(wǎng)接口實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種計(jì)算網(wǎng)絡(luò)中通信節(jié)點(diǎn)的以太網(wǎng)接口實(shí)現(xiàn)方法,具體地說,本發(fā)明涉及一種嵌入式系統(tǒng)中以太網(wǎng)接口實(shí)現(xiàn)方法。
背景技術(shù):
隨著DSP功能的增強(qiáng),應(yīng)用范圍越來越廣?;贒SP的嵌入式系統(tǒng)應(yīng)用越來越多。同時(shí),計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)迅猛發(fā)展,已經(jīng)充斥到工作生活的各個(gè)角落。嵌入式系統(tǒng)的網(wǎng)絡(luò)應(yīng)用已經(jīng)很普遍?,F(xiàn)在,終端設(shè)備使用最普遍、性價(jià)比最高的網(wǎng)絡(luò)當(dāng)然是以太網(wǎng)。這就產(chǎn)生一種需求為一個(gè)嵌入式終端設(shè)備,設(shè)計(jì)一套穩(wěn)定高效的以太網(wǎng)接口。
支持以太網(wǎng)接口的嵌入式系統(tǒng)基礎(chǔ)硬件架構(gòu)如圖1,處理器(GPP或者DSP)是系統(tǒng)的核心,時(shí)鐘電路、復(fù)位電路、電源系統(tǒng)、隨機(jī)訪問存儲(chǔ)器(RAM)、閃存(FLASH ROM)是基礎(chǔ)外圍設(shè)備,通過以太網(wǎng)接口控制器(NICNetwork InterfaceController)建立系統(tǒng)與以太網(wǎng)的聯(lián)系。NIC要能夠支持按照存儲(chǔ)器方式訪問的ISA等總線。如此,處理器可以直接通過外部存儲(chǔ)器接口總線訪問控制NIC,而不需要復(fù)雜的接口設(shè)備在二者之間進(jìn)行匹配。此結(jié)構(gòu)基本能夠適用于所有通用數(shù)字信號(hào)處理器。
支持以太網(wǎng)接口的嵌入式系統(tǒng)軟件基本架構(gòu)如圖2。圖中列出了這個(gè)嵌入式系統(tǒng)中與以太網(wǎng)通信相關(guān)的基本模塊,其他功能根據(jù)具體應(yīng)用進(jìn)行擴(kuò)展。整個(gè)系統(tǒng)在實(shí)時(shí)操作系統(tǒng)(RTOS)控制下運(yùn)行。以太網(wǎng)通信接口依靠硬件層的NIC、板級(jí)支持包的NIC驅(qū)動(dòng)、TCP/IP協(xié)議棧的NIC驅(qū)動(dòng)接口三部分來實(shí)現(xiàn)。這三部分實(shí)際是被一套貫穿其中的流程協(xié)調(diào)工作,完成以太網(wǎng)幀收發(fā)等功能。
現(xiàn)有技術(shù)中,NIC在系統(tǒng)中的監(jiān)控方式通常采用查詢方式或者中斷方式。查詢方式就是主控處理器,定期或者不定期地檢查NIC的工作狀態(tài),根據(jù)檢查結(jié)果再進(jìn)行數(shù)據(jù)接收和發(fā)送等工作。使用查詢方式,能夠簡(jiǎn)化系統(tǒng)設(shè)計(jì),且工作穩(wěn)定。但是,因?yàn)榫W(wǎng)絡(luò)通信是一個(gè)隨機(jī)過程,所以使用查詢方式,如果查詢頻率高,會(huì)浪費(fèi)處理器資源,降低系統(tǒng)效率;查詢頻率低,又會(huì)對(duì)NIC上出現(xiàn)的狀態(tài)不能及時(shí)反應(yīng),增大網(wǎng)絡(luò)通信延遲,影響實(shí)時(shí)性能。
在中斷方式下,系統(tǒng)通常不會(huì)直接去檢查NIC的工作狀態(tài),也不會(huì)直接在NIC上有任何收發(fā)操作。只有收到NIC發(fā)來的中斷信息,系統(tǒng)獲悉了NIC的工作狀態(tài),才會(huì)由操作系統(tǒng)調(diào)度相應(yīng)任務(wù)完成相應(yīng)功能。這樣,只要中斷響應(yīng)速度和系統(tǒng)調(diào)度速度夠快,就能夠比較實(shí)時(shí)地處理以太網(wǎng)接口上的隨機(jī)事件,并且相對(duì)減輕處理器負(fù)擔(dān)。但這種方式,相對(duì)查詢方式增加了復(fù)雜性,而且完全依靠中斷觸發(fā),是一種被動(dòng)的單線聯(lián)系,降低了系統(tǒng)穩(wěn)定性和可靠性。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種嵌入式系統(tǒng)中以太網(wǎng)接口實(shí)現(xiàn)方法,該方法應(yīng)用在嵌入式系統(tǒng)網(wǎng)絡(luò)通信終端,是一種硬件中斷、查詢、軟中斷結(jié)合使用的以太網(wǎng)幀收發(fā)控制流程,簡(jiǎn)便易用。
為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明提供的嵌入式系統(tǒng)中以太網(wǎng)接口實(shí)現(xiàn)方法包括以太網(wǎng)幀接收方法和以太網(wǎng)幀發(fā)送方法,所述以太網(wǎng)幀接收方法包括如下步驟11)接收任務(wù)處于等待狀態(tài)下,NIC內(nèi)部為空,沒有任何網(wǎng)絡(luò)數(shù)據(jù);12)當(dāng)NIC一次收到一幀或多幀數(shù)據(jù)時(shí),觸發(fā)處理器相應(yīng)中斷,處理器啟動(dòng)該中斷服務(wù)例程觸發(fā)接收任務(wù)從NIC的接收緩存取出一幀數(shù)據(jù);13)接收任務(wù)接收一幀數(shù)據(jù)完畢后,通過檢查NIC接收狀態(tài)相關(guān)寄存器或者NIC接收緩存使用情況,判斷終端是否從網(wǎng)上新收數(shù)據(jù);14)若沒有新收數(shù)據(jù),接收任務(wù)回到等待狀態(tài);若仍有新收數(shù)據(jù),觸發(fā)NIC接收事件對(duì)應(yīng)軟中斷,啟動(dòng)步驟12)中相同的中斷服務(wù)例程,系統(tǒng)開始下一個(gè)以太網(wǎng)幀的接收;所述以太網(wǎng)幀發(fā)送方法包括如下步驟21)發(fā)送任務(wù)等待發(fā)送通道可用;22)發(fā)送任務(wù)準(zhǔn)備發(fā)送數(shù)據(jù),并將待發(fā)送數(shù)據(jù)復(fù)制到發(fā)送通道的緩存;23)發(fā)送任務(wù)啟動(dòng)發(fā)送過程;24)發(fā)送任務(wù)檢查接收通道狀態(tài),通過檢查NIC接收狀態(tài)相關(guān)寄存器或者NIC接收緩存使用情況,判斷終端是否從網(wǎng)上收到新數(shù)據(jù);25)如果未接收到任何以太網(wǎng)數(shù)據(jù),直接退出;如果收到以太網(wǎng)幀,就觸發(fā)以太網(wǎng)接收事件對(duì)應(yīng)軟中斷。
上述技術(shù)方案中,所述步驟12)中,還包括如下子步驟121)TCP/IP協(xié)議棧收到數(shù)據(jù)后,轉(zhuǎn)發(fā)到上層應(yīng)用的網(wǎng)絡(luò)緩存;122)當(dāng)層應(yīng)用網(wǎng)絡(luò)緩存耗盡時(shí),通知協(xié)議棧停止向上轉(zhuǎn)發(fā),數(shù)據(jù)暫時(shí)保存在TCP/IP協(xié)議棧的網(wǎng)絡(luò)緩存;123)當(dāng)TCP/IP協(xié)議棧網(wǎng)絡(luò)緩存耗盡時(shí),協(xié)議棧停止從NIC接收數(shù)據(jù),網(wǎng)路發(fā)來的以太網(wǎng)幀暫存在NIC內(nèi)部RAM;124)待TCP/IP協(xié)議棧的網(wǎng)絡(luò)數(shù)據(jù)報(bào)緩存釋放出空間,再開始接收NIC中的數(shù)據(jù)報(bào)。
本發(fā)明的優(yōu)點(diǎn)是能夠適應(yīng)各種傳輸控制(Transmission Control ProtocolTCP)與網(wǎng)絡(luò)(Internet ProtocolsIP)協(xié)議棧和以太網(wǎng)接口控制器(NICNetwork InterfaceController),而且在不增加處理器負(fù)擔(dān)的情況下,提高網(wǎng)絡(luò)接口模塊工作的穩(wěn)定性,還能夠在一定程度內(nèi)解決小規(guī)模系統(tǒng)網(wǎng)絡(luò)緩沖不足的問題。
圖1是支持以太網(wǎng)接口的嵌入式系統(tǒng)基礎(chǔ)硬件架構(gòu)示意圖;圖2是支持以太網(wǎng)接口的嵌入式系統(tǒng)軟件基本架構(gòu)示意圖;圖3是本發(fā)明中以太網(wǎng)幀接收方法流程圖;圖4是本發(fā)明中以太網(wǎng)幀發(fā)送方法流程圖。
具體實(shí)施例方式
本方法采用了中斷和查詢結(jié)合使用的辦法,完成以太網(wǎng)數(shù)據(jù)報(bào)的收發(fā)。
接收流程如圖3。數(shù)據(jù)報(bào)接收過程中,本方法也采用了中斷(只打開NIC的接收中斷)。在協(xié)議棧對(duì)NIC驅(qū)動(dòng)的接口上運(yùn)行一個(gè)負(fù)責(zé)以太網(wǎng)幀接收的任務(wù)。當(dāng)NIC成功接收到一個(gè)以太網(wǎng)幀,就會(huì)向處理器發(fā)出中斷信號(hào),然后相應(yīng)的中斷服務(wù)例程就會(huì)發(fā)出信號(hào),通知接收任務(wù)。接收任務(wù)收到這個(gè)信號(hào)之后,就會(huì)從NIC讀出一個(gè)以太網(wǎng)幀。通常,系統(tǒng)如果收到一個(gè)接收中斷,就會(huì)從NIC中取出一個(gè)或者多個(gè)以太網(wǎng)幀,然后等待下次NIC接收中斷發(fā)生,再重新開始。然而,某些協(xié)議棧的設(shè)計(jì),使得接收任務(wù)每次只能接收一幀,但很多NIC收到一個(gè)或者一批幀,都是只發(fā)出一次中斷信號(hào)。所以,為了適應(yīng)這種單幀接收的協(xié)議棧,就要對(duì)NIC的中斷控制和狀態(tài)寄存器進(jìn)行一系列的維護(hù)工作,保證NIC能夠?yàn)槭盏降拿總€(gè)幀向系統(tǒng)發(fā)出中斷請(qǐng)求,增加程序設(shè)計(jì)的復(fù)雜性,同時(shí)也增加了不可靠性。
本方法在采用NIC硬件中斷的同時(shí),采用了查詢和軟中斷的辦法來解決這個(gè)問題。具體步驟如圖311)接收任務(wù)處于等待狀態(tài)下,NIC內(nèi)部為空,沒有任何網(wǎng)絡(luò)數(shù)據(jù);12)當(dāng)NIC一次收到一幀或多幀數(shù)據(jù),會(huì)觸發(fā)處理器相應(yīng)中斷,處理器啟動(dòng)該中斷服務(wù)例程觸發(fā)接收任務(wù)從NIC的接收緩存取出一幀數(shù)據(jù);13)接收任務(wù)接收一幀數(shù)據(jù)完畢后,通過檢查NIC接收狀態(tài)相關(guān)寄存器或者NIC接收緩存使用情況,判斷終端是否從網(wǎng)上新收數(shù)據(jù);14)若沒有新收數(shù)據(jù),接收任務(wù)回到等待狀態(tài);若仍有新收數(shù)據(jù),觸發(fā)NIC接收事件對(duì)應(yīng)軟中斷,會(huì)啟動(dòng)步驟12)中相同的中斷服務(wù)例程,系統(tǒng)很快就會(huì)開始下一個(gè)以太網(wǎng)幀的接收。
本方法以太網(wǎng)幀發(fā)送過程如圖4,具體步驟如下21)發(fā)送任務(wù)等待發(fā)送通道可用;22)發(fā)送任務(wù)準(zhǔn)備發(fā)送數(shù)據(jù),并將待發(fā)送數(shù)據(jù)復(fù)制到發(fā)送通道的緩存;23)發(fā)送任務(wù)啟動(dòng)發(fā)送過程;24)發(fā)送任務(wù)檢查接收通道狀態(tài),通過檢查NIC接收狀態(tài)相關(guān)寄存器或者NIC接收緩存使用情況,判斷終端是否從網(wǎng)上收到新數(shù)據(jù);25)如果未接收到任何以太網(wǎng)數(shù)據(jù),直接退出;如果收到以太網(wǎng)幀,就觸發(fā)以太網(wǎng)接收事件對(duì)應(yīng)軟中斷。
通常,NIC都是全雙工或者半雙工方式工作,系統(tǒng)對(duì)NIC接收和發(fā)送分別有不同的控制流程,互不干涉。本方法在發(fā)送過程中加入一個(gè)特殊環(huán)節(jié),就是在發(fā)送過程結(jié)束的時(shí)候,主動(dòng)檢查NIC的工作狀態(tài),判斷是否接收到新以太網(wǎng)幀。如果有,就觸發(fā)一個(gè)NIC設(shè)備對(duì)應(yīng)的軟中斷。通過增加這極少量的程序,就可以為被動(dòng)的中斷單線觸發(fā)接收過程,增加一條主動(dòng)查詢渠道,消除了完全被動(dòng)接收不可靠的隱患,提高以太網(wǎng)通信接口的健壯性。因?yàn)橹灰到y(tǒng)上層應(yīng)用運(yùn)行正常,就會(huì)有很多以太網(wǎng)幀發(fā)送機(jī)會(huì),通過上述方法就能保證底層NIC的接收中斷不會(huì)得不到響應(yīng)。從而,只要上層應(yīng)用正常運(yùn)行,底層以態(tài)網(wǎng)的通信功能就不會(huì)因?yàn)檐浖收隙V构ぷ?。而且,這種不定期的查詢,不會(huì)像周期性查詢方式給處理器帶來過多的負(fù)擔(dān),就能夠發(fā)現(xiàn)NIC出現(xiàn)的異常,及時(shí)恢復(fù)其正常工作。
嵌入式系統(tǒng)中,特別是這種基于DSP的嵌入式系統(tǒng)中,存儲(chǔ)資源非常有限,而TCP/IP協(xié)議棧內(nèi)網(wǎng)絡(luò)數(shù)據(jù)報(bào)需要比較多的緩存空間,涉及到網(wǎng)絡(luò)通信的上層應(yīng)用(如VoIP的jitter buffer等)也需要較大的緩存空間。通常,TCP/IP協(xié)議棧內(nèi)緩存用盡時(shí),如果網(wǎng)路上有新的數(shù)據(jù)報(bào)到來,就直接丟棄。對(duì)于UDP數(shù)據(jù)報(bào),這就無法再次獲得。在實(shí)時(shí)通信應(yīng)用中,網(wǎng)絡(luò)抖動(dòng)會(huì)因此而造成大量數(shù)據(jù)報(bào)丟失。本方法提出一種方法,能夠提高NIC內(nèi)部RAM利用率,來緩解系統(tǒng)緩存的不足。具體辦法如下121)TCP/IP協(xié)議棧收到數(shù)據(jù)后,轉(zhuǎn)發(fā)到上層應(yīng)用的網(wǎng)絡(luò)緩存;122)上層應(yīng)用網(wǎng)絡(luò)緩存耗盡,就通知協(xié)議棧停止向上轉(zhuǎn)發(fā),暫時(shí)保存在TCP/IP協(xié)議棧的網(wǎng)絡(luò)緩存;123)如果TCP/IP協(xié)議棧網(wǎng)絡(luò)緩存耗盡,協(xié)議棧就停止從NIC接收數(shù)據(jù),網(wǎng)路發(fā)來的以太網(wǎng)幀暫存在NIC內(nèi)部RAM,而不是被直接丟棄。通常NIC帶有數(shù)K字節(jié)內(nèi)部RAM;124)待TCP/IP協(xié)議棧的網(wǎng)絡(luò)數(shù)據(jù)報(bào)緩存釋放出空間,再開始接收NIC中的數(shù)據(jù)報(bào)。
如此,上層應(yīng)用、協(xié)議棧、NIC三層上的網(wǎng)絡(luò)數(shù)據(jù)緩存得到了聯(lián)合利用,就能夠更好的克服網(wǎng)絡(luò)抖動(dòng),利用NIC的內(nèi)部RAM補(bǔ)充系統(tǒng)存儲(chǔ)資源的不足。
權(quán)利要求
1.一種嵌入式系統(tǒng)中以太網(wǎng)接口實(shí)現(xiàn)方法,包括以太網(wǎng)幀的接收和以太網(wǎng)幀的發(fā)送,其特征在于,所述以太網(wǎng)幀的接收包括如下步驟11)接收任務(wù)處于等待狀態(tài)下,以太網(wǎng)接口控制器內(nèi)部為空,沒有任何網(wǎng)絡(luò)數(shù)據(jù);12)當(dāng)以太網(wǎng)接口控制器一次收到一幀或多幀數(shù)據(jù)時(shí),觸發(fā)處理器相應(yīng)中斷,處理器啟動(dòng)該中斷服務(wù)歷程觸發(fā)接收任務(wù)從以太網(wǎng)接口控制器的接收緩存取出一幀數(shù)據(jù);13)接收任務(wù)接收一幀數(shù)據(jù)完畢后,通過檢查NIC接收狀態(tài)相關(guān)寄存器或者NIC接收緩存使用情況,判斷終端是否從網(wǎng)上新收數(shù)據(jù);14)若沒有新收數(shù)據(jù),接收任務(wù)回到等待狀態(tài);若仍有新收數(shù)據(jù),觸發(fā)以太網(wǎng)接口控制器接收事件對(duì)應(yīng)軟中斷,啟動(dòng)步驟12)中相同的中斷服務(wù)例程,系統(tǒng)開始下一個(gè)以太網(wǎng)幀的接收;所述以太網(wǎng)幀的發(fā)送包括如下步驟21)發(fā)送任務(wù)等待發(fā)送通道可用;22)發(fā)送任務(wù)準(zhǔn)備發(fā)送數(shù)據(jù),并將待發(fā)送數(shù)據(jù)復(fù)制到發(fā)送通道的緩存;23)發(fā)送任務(wù)啟動(dòng)發(fā)送過程;24)發(fā)送任務(wù)檢查接收通道狀態(tài),通過檢查NIC接收狀態(tài)相關(guān)寄存器或者NIC接收緩存使用情況,判斷終端是否從網(wǎng)上收到新數(shù)據(jù);25)如果未接收到任何以太網(wǎng)數(shù)據(jù),直接退出;如果收到以太網(wǎng)幀,就觸發(fā)以太網(wǎng)接收事件對(duì)應(yīng)軟中斷。
2.按權(quán)利要求1所述的嵌入式系統(tǒng)中以太網(wǎng)接口實(shí)現(xiàn)方法,其特征在于,所述步驟12)中,還包括如下子步驟121)TCP/IP協(xié)議棧收到數(shù)據(jù)后,轉(zhuǎn)發(fā)到上層應(yīng)用的網(wǎng)絡(luò)緩存;122)當(dāng)上層應(yīng)用網(wǎng)絡(luò)緩存耗盡時(shí),通知協(xié)議棧停止向上轉(zhuǎn)發(fā),數(shù)據(jù)暫時(shí)保存在TCP/IP協(xié)議棧的網(wǎng)絡(luò)緩存;123)當(dāng)TCP/IP協(xié)議棧網(wǎng)絡(luò)緩存耗盡時(shí),協(xié)議棧停止從以太網(wǎng)接口控制器接收數(shù)據(jù),網(wǎng)路發(fā)來的以太網(wǎng)幀暫存在以太網(wǎng)接口控制器內(nèi)部RAM;124)待TCP/IP協(xié)議棧的網(wǎng)絡(luò)數(shù)據(jù)報(bào)緩存釋放出空間,再開始接收NIC中的數(shù)據(jù)報(bào)。
全文摘要
本發(fā)明涉及一種嵌入式系統(tǒng)中以太網(wǎng)接口實(shí)現(xiàn)方法,包括以太網(wǎng)幀接收方法和以太網(wǎng)幀發(fā)送方法,其中接收方法是一種硬件中斷、軟件中斷和查詢結(jié)合使用的方法,發(fā)送方法是一種變向查詢的方法。本發(fā)明的優(yōu)點(diǎn)是能夠適應(yīng)各種傳輸控制與網(wǎng)絡(luò)協(xié)議棧和以太網(wǎng)接口控制器,而且在不增加處理器負(fù)擔(dān)的情況下,提高網(wǎng)絡(luò)接口模塊工作的穩(wěn)定性,還能夠在一定程度內(nèi)解決小規(guī)模系統(tǒng)網(wǎng)絡(luò)緩沖不足的問題。
文檔編號(hào)H04L29/06GK101035142SQ20061005682
公開日2007年9月12日 申請(qǐng)日期2006年3月7日 優(yōu)先權(quán)日2006年3月7日
發(fā)明者朱曉東, 張建東, 王勁林, 張武, 鄧峰, 齊東向, 葉曉舟, 武曉華, 曾學(xué)文 申請(qǐng)人:中國(guó)科學(xué)院聲學(xué)研究所, 北京中科智網(wǎng)科技有限公司