基于DSP的上網(wǎng)方案的軟硬件設計與實(shí)現
摘要: 介紹了TMS320VC33芯片與RTL8019網(wǎng)卡的硬件接口電路的設計以及網(wǎng)卡驅動(dòng)程序的開(kāi)發(fā),并將TCP/IP協(xié)議嵌入到TMS320VC33芯片中;討論了TCP/IP協(xié)議簇的分層次實(shí)現,并根據應用的需要對DSP中實(shí)現的TCP/IP協(xié)議進(jìn)行了必要的簡(jiǎn)化,實(shí)現了DSP的上網(wǎng)功能。
本文引用地址:http://dyxdggzs.com/article/88279.htm關(guān)鍵詞: TCP/IP協(xié)議 DSP 嵌入式系統
隨著(zhù)現代網(wǎng)絡(luò )技術(shù)的發(fā)展,嵌入式系統如單片機、DSP等系統對接入網(wǎng)絡(luò )的需求日益增加,例如具有遠程抄表功能的電表系統、可以進(jìn)行遠程控制的信息家電系統等。本文采用TI公司的TMS320VC33 DSP芯片設計與Realtek公司的RTL8019網(wǎng)卡的硬件接口電路,并在DSP中用軟件實(shí)現TCP/IP協(xié)議,使DSP芯片具備上網(wǎng)功能,從而可以用計算機通過(guò)網(wǎng)卡與DSP電路板進(jìn)行大量數據交換并對其進(jìn)行控制。
1 硬件設計
DSP與網(wǎng)卡的硬件接口電路圖如圖1所示。
DSP的數據總線(xiàn)低16位接ISA網(wǎng)卡的16位數據線(xiàn),ISA網(wǎng)卡的IOCS16線(xiàn)接高電平,設置網(wǎng)卡為16位的模式。
網(wǎng)卡共有20根地址線(xiàn)。將A7~A8、A10~A19接地,A0~A6和A9分別接DSP的A0~A7,用到的網(wǎng)卡地址為0240H~025FH,映射到DSP的Page3空間,地址映射為C000C0H~C000DFH。
DSP的Reset信號用于復位網(wǎng)卡,由于DSP的Reset信號低有效,而網(wǎng)卡的Reset信號高有效,故中間應接非門(mén)。
DSP的Page3和R/W信號用于選通網(wǎng)卡的讀寫(xiě)信號IOR、IOW,實(shí)現的邏輯關(guān)系如圖2所示。
IRQ9是網(wǎng)卡的中斷9,通過(guò)非門(mén)后接DSP的INT1引腳。
RTL8019網(wǎng)卡有三種工作方式:
第一種為跳線(xiàn)方式,網(wǎng)卡的I/O和中斷由跳線(xiàn)決定;
第二種為即插即用方式,由軟件進(jìn)行自動(dòng)配置plug and play;
第三種為免跳線(xiàn)方式,網(wǎng)卡的I/O和中斷由外接的93C46里的內容決定。
計算機上一般實(shí)現的是即插即用方式,為了降低軟件編程的復雜度,將網(wǎng)卡設置為跳線(xiàn)方式。
上述所有的譯碼邏輯都在EPM7128中實(shí)現。
74ALVC164245是總線(xiàn)驅動(dòng)芯片,可實(shí)現3.3V到5V的電平轉換。由于TMS320VC33和EPM7128是3.3V的器件,而ISA總線(xiàn)是5V的,所以信號線(xiàn)不能直接連接,需要通過(guò)74ALVC164245進(jìn)行電平轉換和隔離。
2 軟件設計
2.1 網(wǎng)卡硬件驅動(dòng)程序的設計
網(wǎng)卡驅動(dòng)程序主要包括以下幾部分:
(1)NIC的初始化
NIC是網(wǎng)絡(luò )接口控制芯片,它負責網(wǎng)絡(luò )上數據的接收和發(fā)送。為了能夠使NIC啟動(dòng)并處于準備接收或準備發(fā)送數據的狀態(tài),必須對相關(guān)的寄存器進(jìn)行初始化。這些寄存器包括CR、DCR、RBCR、PSTART、PSTOP、ISR、IMR、PAR0~PAR5、MAR0~MAR7、CURR、TCR、RCR等。
(2)中斷服務(wù)程序
中斷服務(wù)程序一般完成兩項任務(wù):一是設置中斷標志,以使相關(guān)程序能以此發(fā)現發(fā)生了中斷;二是取得中斷狀態(tài)寄存器的值,并將引起中斷的具體原因提交給相應的程序,這一過(guò)程也是通過(guò)設置中斷原因標志完成的。需要注意的是,中斷服務(wù)程序開(kāi)始的時(shí)候要保護中斷現場(chǎng),待程序處理完成后要恢復中斷現場(chǎng);中斷服務(wù)程序應盡可能短小,以便在盡可能短的時(shí)間內執行完成,因此需要將一些不必要的工作交給其它程序來(lái)完成。
(3)幀發(fā)送程序
在網(wǎng)絡(luò )中,幀傳輸的過(guò)程是:發(fā)送方將待發(fā)送的數據按幀格式要求封裝成幀,然后通過(guò)網(wǎng)卡將幀發(fā)送到網(wǎng)絡(luò )的傳輸線(xiàn)上;接收方根據接收到的幀的目的地址確定是否將該幀提交給上層應用程序。幀的發(fā)送是指將待發(fā)送的數據以幀的形式發(fā)送到網(wǎng)絡(luò )傳輸線(xiàn)上,因此,幀的發(fā)送過(guò)程應該包括以下幾個(gè)步驟:
?、傺b幀;
?、趯腿隢IC的發(fā)送緩沖區;
?、鄢跏蓟l(fā)送控制寄存器;
?、軉?dòng)NIC將該幀發(fā)送到網(wǎng)絡(luò )傳輸線(xiàn)上。
(4)幀接收程序
幀接收是指將網(wǎng)絡(luò )上的數據幀接收并緩存于網(wǎng)卡的接收緩沖環(huán)中,然后由主機程序將緩存于接收緩沖環(huán)的幀讀走并存入內存中以備程序使用。從中可以看出,幀的接收過(guò)程分成兩步:
?、俚谝徊接蒒IC通過(guò)本地DMA將幀存入接收緩沖環(huán);
?、诘诙绞峭ㄟ^(guò)遠程DMA并在主機的配合下將接收緩沖環(huán)中的幀讀入內存。
2.2 TCP/IP協(xié)議的實(shí)現
2.2.1 DSP中與PC機中實(shí)現TCP/IP協(xié)議的不同
TCP/IP協(xié)議最先是在UNIX系統中實(shí)現的,后來(lái)在LINUX、DOS和WINDOWS系統中也實(shí)現了TCP/IP。但是,在UNIX上實(shí)現的TCP/IP協(xié)議的源代碼并不能直接移植到DSP上來(lái),這是因為PC機和DSP存在著(zhù)巨大的差異。
PC機的運算速度非???一般都有一個(gè)多任務(wù)的操作系統,可以多任務(wù)并行執行,通過(guò)硬中斷與軟中斷、消息隊列和各種插口實(shí)現TCP/IP各協(xié)議層之間的通信和整個(gè)網(wǎng)絡(luò )的通信。而DSP運行速度相對較慢,缺乏多任務(wù)操作系統的平臺,只能通過(guò)順序執行加硬件中斷的方式來(lái)實(shí)現,并且因其還要同時(shí)執行數據采集、串口中斷等任務(wù),所以中斷程序應盡量短,只完成設置各種狀態(tài)的標志位,而將相對較慢的網(wǎng)絡(luò )數據包的處理放在主程序中執行,以減少各種任務(wù)之間的沖突。
PC機的內存非常大,現在一般都可達到32~128M的存儲容量,可以動(dòng)態(tài)地分配和釋放內存,很容易實(shí)現存儲器緩存mbuf、網(wǎng)絡(luò )控制塊ncb等鏈狀結構,且可隨意增刪;同時(shí)能維持多條網(wǎng)絡(luò )連接,由于計算機處理速度快,幾乎不用考慮緩沖區溢出的問(wèn)題。而DSP內部RAM一般只有十幾K,加上外部擴展的RAM也只能達到幾十K的容量,一個(gè)最大的以太網(wǎng)數據包就有1.5K左右,如果也按PC機的內存管理方式和數據結構,使用mbuf鏈,RAM肯定不夠用,因此只能在RAM中分配一個(gè)固定的1514字節的區段來(lái)存放接收到的以太網(wǎng)數據包,接收一包處理一包。
PC機中TCP/IP協(xié)議都是分層次實(shí)現的,相互之間都是通過(guò)參數傳遞進(jìn)行聯(lián)系,這樣有利于提高程序的模塊化和獨立性。而在DSP中,由于參數傳遞會(huì )占用過(guò)多的程序空間,且降低DSP的執行速度,所以應盡量減少參數傳遞,轉而使用全局變量和外部變量等來(lái)達到值的傳遞,因此各程序間的依賴(lài)程度大,往往會(huì )共享某一些變量和數據。
PC機上實(shí)現了比較完整的TCP/IP協(xié)議。而在DSP中,由于運算速度和內存的限制,不可能支持所有的協(xié)議,一般只實(shí)現需要的部分,不需要的協(xié)議一概都不支持;而且即使需要的協(xié)議也不用像在PC機上實(shí)現那么復雜,可以根據硬件的具體情況和實(shí)現的需求進(jìn)行必要的簡(jiǎn)化。
2.2.2 TCP/IP協(xié)議的具體實(shí)現
TCP/IP協(xié)議是一個(gè)協(xié)議簇,包含了很多協(xié)議,在DSP上實(shí)現的所有協(xié)議如圖3所示,通??煞譃樗膶?不包括物理層)。
根據DSP的結構特點(diǎn)和所需要實(shí)現的功能,在DSP中實(shí)現了ARP(地址解析協(xié)議)、IP(網(wǎng)際協(xié)議)、ICMP(Internet控制報文協(xié)議)、UDP(用戶(hù)數據報協(xié)議)和TCP(傳輸控制協(xié)議),并對它們進(jìn)行了簡(jiǎn)化。
在鏈路層中實(shí)現了ARP。每種網(wǎng)絡(luò )都有自己的尋址機制,以太網(wǎng)是通過(guò)以太網(wǎng)地址即通常所說(shuō)的網(wǎng)卡硬件地址MAC進(jìn)行尋址的,每個(gè)網(wǎng)卡出廠(chǎng)時(shí)都有一個(gè)唯一的MAC地址。IP地址則僅僅是對于TCP/IP協(xié)議簇有意義的地址,是一種虛擬地址。當賦予IP地址的IP包要在以太網(wǎng)中傳播時(shí),必須將IP地址轉化為以太網(wǎng)地址才能進(jìn)行正確的傳輸。ARP協(xié)議就是將32位的IP地址動(dòng)態(tài)地映射為48位的以太網(wǎng)地址,從而保證網(wǎng)絡(luò )的正確傳輸。ARP協(xié)議由兩個(gè)文件arpin.c和arpout.c實(shí)現。arpin.c負責接收網(wǎng)絡(luò )上廣播的arp包,判斷arp包的類(lèi)型是網(wǎng)絡(luò )上其它機子的請求包還是返回本機的響應包,判斷其合法性并進(jìn)行相應的處理;arpout.c負責主機向網(wǎng)絡(luò )發(fā)送數據報時(shí)發(fā)送arp請求包以及被arpin.c調用響應收到的arp請求包。
在網(wǎng)絡(luò )層中實(shí)現了IP和ICMP。IP協(xié)議是TCP/IP協(xié)議簇中最核心的協(xié)議,它提供無(wú)連接的數據報傳送服務(wù),所有上層協(xié)議都要以IP數據包格式傳輸。IP協(xié)議由兩個(gè)文件ipin.c和ipout.c實(shí)現。ipin.c負責接收IP數據包,收到IP包后,首先判斷其版本號、數據長(cháng)度、目的地址、檢驗和是否正確,再根據IP首部的協(xié)議類(lèi)型字段的值交給相應的上層協(xié)議處理;ipout.c負責發(fā)送IP數據包,接收上層協(xié)議傳遞下來(lái)的數據,加上20字節的IP首部,正確設置源IP地址和目的IP地址、協(xié)議類(lèi)型,計算檢驗和,交給下面的鏈路層發(fā)送。PC機上的IP數據包,當它的長(cháng)度超過(guò)網(wǎng)絡(luò )的MTU時(shí),允許對它分段;在DSP中,則不支持IP數據包分段,也不支持IP選項字段。ICMP協(xié)議負責傳遞差錯報文以及其它需要注意的信息,且由ICMP首部8位的類(lèi)型字段和8位的代碼字段決定信息的種類(lèi)。在DSP中只實(shí)現了對回顯請求(類(lèi)型代碼為80)報文的處理,從IP層收到ICMP包后,判斷其類(lèi)型代碼段是否為80。如果是,將這兩個(gè)字段設置為00(回顯應答),計算檢驗和,再交給IP層發(fā)送;如果不是,則予以丟棄。從而實(shí)現了對ping功能的支持。
在運輸層實(shí)現了UDP和TCP。
UDP協(xié)議是一種面向無(wú)連接的不可靠的協(xié)議,用兩個(gè)文件udpin.c和udpout.c來(lái)實(shí)現。udpin.c實(shí)現對udp包輸入的處理,判斷其端口號、檢驗和是否正確,正確則將其數據交給相應端口的應用程序,不正確則丟棄;udpout.c實(shí)現對udp包輸出的處理,從應用程序接收數據,設置相應的源端口號和目的端口號,再交給IP層發(fā)送。值得注意的是,計算UDP包的檢驗和與計算IP包的檢驗和是不一樣的,IP包的檢驗和只覆蓋了IP包的首部,而UDP包的檢驗和則覆蓋了UDP包的首部和所有的數據。UDP包計算檢驗和時(shí)還引入了一個(gè)12字節的偽首部,包括4字節的源IP地址、4字節的目的IP地址、1字節的零段、1字節的協(xié)議段和兩字節的檢驗和,其目的是讓UDP兩次檢查數據是否正確地到達了目的地。
TCP協(xié)議與UDP協(xié)議雖然同是運輸層協(xié)議,但是它提供一種面向連接的可靠的字節流服務(wù)。TCP協(xié)議是所有協(xié)議中最復雜、也是最難實(shí)現的一塊,主要由tcpin.c、tcpout.c、tcptimer.c和tcpstatem.c四個(gè)文件分塊實(shí)現,并根據具體應用的需要進(jìn)行簡(jiǎn)化。TCP的控制塊tcb用結構體來(lái)實(shí)現,每一個(gè)tcb包含一條TCP連接的所有控制和狀態(tài)信息,全部的tcb形成了一個(gè)雙向鏈表,有利于在所有TCP連接中進(jìn)行搜索。tcptimer.c負責管理TCP協(xié)議中的各種狀態(tài)信息,它內含前向后向指針,使之形成定時(shí)器超時(shí),PC機上的TCP協(xié)議包含快慢兩個(gè)定時(shí)器,這里僅僅實(shí)現了一個(gè)500ms的慢速定時(shí)器,因為沒(méi)有快速定時(shí)器,所以不支持ACK報文延遲,收到一幀即立即發(fā)送ACK;tcpstatem.c是TCP的狀態(tài)機函數,根據TCP連接所處的不同狀態(tài)以及發(fā)生的事件來(lái)決定TCP連接的狀態(tài)變遷;tcpout.c負責tcp報文的發(fā)送,典型的發(fā)送過(guò)程是當接收到上層應用程序的數據時(shí),首先發(fā)送SYN幀,與目標節點(diǎn)三次握手建立連接,之后加上TCP首部,交給下層IP模塊發(fā)送,并通過(guò)重傳定時(shí)器實(shí)現超時(shí)重發(fā)、持續定時(shí)器發(fā)送窗口探測幀等功能,待所有數據發(fā)送完畢并得到確認后發(fā)送FIN幀,通過(guò)四次握手關(guān)閉連接,tcpout.c還可在不同狀態(tài)和事件下被其它程序調用發(fā)送ACK幀、RST幀等其它TCP報文;tcpin.c負責接收從下層IP模塊接收到的TCP數據包,并根據TCP連接的狀態(tài)信息以及TCP首部的各個(gè)標志位進(jìn)行分支處理,將數據交給對應端口的上層應用程序,并調用其它函數實(shí)現對TCP包的響應和狀態(tài)變遷。在PC機上往往可以同時(shí)維護多條TCP連接;但在DSP上,由于DSP速度和RAM容量的限制,只支持一條TCP連接;這樣大大簡(jiǎn)化了程序的復雜度,同時(shí)也滿(mǎn)足了實(shí)際需要,如果今后有需要,還可以進(jìn)行擴展。
綜上所述,TCP/IP協(xié)議的具體處理流程如圖4所示。
本文通過(guò)DSP與網(wǎng)卡的硬件接口的設計及編程,使DSP實(shí)現了基于以太網(wǎng)的TCP/IP通信,從而使DSP可以通過(guò)網(wǎng)線(xiàn)進(jìn)行聯(lián)網(wǎng),并可以實(shí)時(shí)地與計算機進(jìn)行通信,交換大量的數據和控制信息。本文所介紹的技術(shù)已經(jīng)在作者參加的國家“973”項目“復雜自然環(huán)境時(shí)空定量信息的獲取與融合處理的理論與應用”的硬件設計中得到應用,并運行良好。
參考文獻
1 W. Richard Stevens著(zhù),陸雪瑩等譯.TCP/IP詳解二:實(shí)現. 北京:機械工業(yè)出版社,2000
2 RTL8019芯片技術(shù)資料. Realtek公司, 1995
3 TMS320VC33芯片技術(shù)資料. Ti公司, 2001
4 劉國福,張 屺,王光明. 基于DSP的10Mbit/s共享以太網(wǎng)絡(luò )的設計. 電子技術(shù),2001(7):5~7
5 李 明,康靜秋,賈智平. 嵌入式TCP/IP協(xié)議棧的研究與開(kāi)發(fā). 計算機工程與應用, 2002(16)
tcp/ip相關(guān)文章:tcp/ip是什么
評論