
(3)發(fā)送以太幀。發(fā)送過(guò)程受到四個(gè)寄存器的控制:CRDA0、CRDA1、RBCR0和RBCR1,其中CRDA0和CRDA1寄存器指向待發(fā)送數(shù)據(jù)幀將要寫入到緩存區(qū)環(huán)中的起始地址,而RBCR0和RBCR1指定了待發(fā)送數(shù)據(jù)的長(zhǎng)度。DSP通過(guò)初始化這幾個(gè)寄存器并向RTL8019AS發(fā)出“Remote write”命令來(lái)將數(shù)據(jù)寫到緩存區(qū)環(huán)。Remote DMA通道會(huì)自動(dòng)根據(jù)三個(gè)寄存器來(lái)控制寫入的起始地址和長(zhǎng)度。為了向以太網(wǎng)發(fā)送數(shù)據(jù)幀,DSP只要將控制寄存器CR的TXP置為1即可,RTL8019AS會(huì)自動(dòng)完成數(shù)據(jù)的校驗(yàn)并發(fā)送。
3 TCP/IP協(xié)議的實(shí)現(xiàn)
由于嵌入式硬件上處理資源和實(shí)時(shí)性要求的限制,其TCP/IP協(xié)議的實(shí)現(xiàn)與在通常的計(jì)算機(jī)上實(shí)現(xiàn)是有差別的,要求占用存儲(chǔ)空間盡可能的小,處理速度足夠快,因此一般都要針對(duì)應(yīng)用的特點(diǎn)對(duì)TCP/IP協(xié)議進(jìn)行必要的裁剪與優(yōu)化。
較普遍的TCP/IP協(xié)議嵌入式實(shí)現(xiàn)主要有兩種方案,一是基于各種實(shí)時(shí)操作系統(tǒng)的TCP/IP協(xié)議棧,如VxWorksμC/OS-II、μClinux、CMX-RTOS等嵌入式實(shí)時(shí)操作系統(tǒng)都內(nèi)嵌或有可配置的TCP/IP協(xié)議棧實(shí)現(xiàn)模塊;另外一種方式是直接在嵌入式硬件上實(shí)現(xiàn),如Microchip公司為其PIC單片機(jī)設(shè)計(jì)的TCP/IP協(xié)議棧。對(duì)一些處理任務(wù)比較簡(jiǎn)單而且實(shí)時(shí)性要求很高的系統(tǒng)來(lái)說(shuō),直接實(shí)現(xiàn)的方式是較好的選擇。在本系統(tǒng)中,根據(jù)具體應(yīng)用的特點(diǎn),選擇對(duì)開(kāi)源軟件lwIP(a light-weight implementation of the TCP/IP protocol suite)[4]進(jìn)行適當(dāng)?shù)牟眉艉髮⑵湟浦驳紺5409 DSP上,直接實(shí)現(xiàn)了IP、ARP、TCP、ICMP協(xié)議和以太網(wǎng)驅(qū)動(dòng),代碼長(zhǎng)度28KB,占用數(shù)據(jù)空間9KB。
應(yīng)用層與lwIP協(xié)議棧的接口可以有兩種方式,一是通過(guò)調(diào)用lwIP API函數(shù);二是直接調(diào)用協(xié)議的實(shí)現(xiàn)模塊,即使用原始API函數(shù)。lwIP API函數(shù)為上層應(yīng)用提供了使用協(xié)議棧常態(tài)的順序的編程模式,即基于“open-read-write-close”模式,這是一種類BSD socket的API。而原始API是一種基于回調(diào)(callback)機(jī)制的應(yīng)用程序接口,調(diào)用這種接口使得應(yīng)用層與lwIP協(xié)議棧聯(lián)系得更緊密,要求應(yīng)用程序員對(duì)lwIP的底層機(jī)制了解得更透徹,因此相對(duì)來(lái)說(shuō)編寫程序會(huì)更困難一些,程序代碼也更難理解。然而好處也顯而易見(jiàn)——處理速度更快,占用內(nèi)存更小,對(duì)小型系統(tǒng)而言很有意義。
4 嵌入式WEB數(shù)據(jù)服務(wù)器應(yīng)用
本系統(tǒng)通過(guò)調(diào)用協(xié)議棧的原始應(yīng)用層接口來(lái)實(shí)現(xiàn)嵌入式WEB數(shù)據(jù)服務(wù)器應(yīng)用,其原理如圖3所示。其作用是將傳感器采集到的數(shù)據(jù)或數(shù)據(jù)處理后的信息按照預(yù)先約定的格式存儲(chǔ)在數(shù)據(jù)緩存中,每收到一次網(wǎng)絡(luò)上的主機(jī)發(fā)來(lái)的“Get AE”命令就將處理的結(jié)果發(fā)送出去。ae_init函數(shù)用來(lái)在初始化時(shí)啟動(dòng)數(shù)據(jù)服務(wù)應(yīng)用;在建立TCP連接時(shí)ae_accept函數(shù)用來(lái)在協(xié)議控制塊PCB中注冊(cè)應(yīng)用層處理函數(shù),每次在建立連接時(shí)都會(huì)被協(xié)議棧調(diào)用;ae_recv是實(shí)際的應(yīng)用層處理函數(shù),在每次接收到從對(duì)應(yīng)連接上發(fā)來(lái)的應(yīng)用層命令時(shí),協(xié)議棧都會(huì)調(diào)用它做出合適的處理和響應(yīng),這里主要是用來(lái)向客戶端主機(jī)傳輸傳感器數(shù)據(jù)或信息。在未進(jìn)行優(yōu)化的情況下,在一個(gè)正常工作(有外部Internet連接)的局域網(wǎng)內(nèi),系統(tǒng)能達(dá)到最少110KBps的傳輸速率,基本滿足設(shè)計(jì)要求。若需進(jìn)一步提高傳輸帶寬,可以應(yīng)用100M或更高速度的網(wǎng)卡芯片與DSP進(jìn)行接口。

在嵌入式系統(tǒng)中實(shí)現(xiàn)以太網(wǎng)接口的主要困難:一是合適的接口芯片較少,集成的方案(即處理器內(nèi)嵌以太網(wǎng)接口)成本又相對(duì)較高;二是TCP/IP協(xié)議棧的實(shí)現(xiàn)。隨著嵌入式系統(tǒng)網(wǎng)絡(luò)應(yīng)用的發(fā)展,第一個(gè)困難會(huì)隨著芯片技術(shù)的發(fā)展逐漸解決,而對(duì)于第二個(gè)困難,使用開(kāi)源代碼是一個(gè)經(jīng)濟(jì)的合適選擇。目前,對(duì)大多數(shù)應(yīng)用來(lái)說(shuō),本文的系統(tǒng)都是一個(gè)可行的低成本方案,能夠滿足一定的數(shù)據(jù)傳輸率要求,且因?yàn)镃5409 DSP接口還有帶寬裕量,系統(tǒng)具有較高的可擴(kuò)展性,可以連接更快傳輸率的以太網(wǎng)芯片。本文設(shè)計(jì)的嵌入式WEB數(shù)據(jù)服務(wù)器,已在一個(gè)聲發(fā)射(AE)傳感器數(shù)據(jù)采集及分析系統(tǒng)中得到使用并達(dá)到了預(yù)期的效果。
參考文獻(xiàn)
[1] 曹宇, 魏豐,胡士毅. 用51單片機(jī)控制RTL8019AS實(shí)現(xiàn)以太網(wǎng)通訊. 電子技術(shù)應(yīng)用, 2003,29(1):21-23.
[2] TMS320VC5409 Fixed-point digital signal processor datasheet. Texas Instruments Inc, 2000.
[3] RTL8019AS datasheet. RealTek Semiconductor Corp, 2005, 8.
[4] Adam Dunkels. Design and implementation of the lwIP TCP/IP stack.http://www.sics.se/
~adam/lwip/doc/lwip.pdf, 2001, 2.





