《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 嵌入式uIP TCP/IP協(xié)議棧在基于DSP系統(tǒng)中的應(yīng)用
嵌入式uIP TCP/IP協(xié)議棧在基于DSP系統(tǒng)中的應(yīng)用
來(lái)源:微型機(jī)與應(yīng)用2013年第9期
謝文娣
(安徽新華學(xué)院,安徽 合肥 230088)
摘要: 搭建了一個(gè)基于DSP嵌入式系統(tǒng)的以太網(wǎng)接入硬件平臺(tái),給出了軟件設(shè)計(jì)思路及具體實(shí)現(xiàn)方法,對(duì)開(kāi)源的uIP協(xié)議棧進(jìn)行裁剪和修改,完成了設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)和嵌入式uIP協(xié)議棧的移植,最終實(shí)現(xiàn)了嵌入式系統(tǒng)接入以太網(wǎng)的功能,且其實(shí)現(xiàn)過(guò)程簡(jiǎn)單、成本較低。
Abstract:
Key words :

摘  要: 搭建了一個(gè)基于DSP嵌入式系統(tǒng)的以太網(wǎng)接入硬件平臺(tái),給出了軟件設(shè)計(jì)思路及具體實(shí)現(xiàn)方法,對(duì)開(kāi)源的uIP協(xié)議棧進(jìn)行裁剪和修改,完成了設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)和嵌入式uIP協(xié)議棧的移植,最終實(shí)現(xiàn)了嵌入式系統(tǒng)接入以太網(wǎng)的功能,且其實(shí)現(xiàn)過(guò)程簡(jiǎn)單、成本較低。
關(guān)鍵詞: DSP;uIP協(xié)議棧;接入以太網(wǎng)

 近年來(lái),嵌入式技術(shù)發(fā)展迅速并在許多電子產(chǎn)品(如手持式、便攜式)中都有廣泛的應(yīng)用[1],而嵌入式產(chǎn)品網(wǎng)絡(luò)化是當(dāng)今社會(huì)一股不可抵擋的研究潮流。嵌入式系統(tǒng)必須具有網(wǎng)絡(luò)互連功能才能快速地與設(shè)備通信,以太網(wǎng)是目前使用最廣泛的局域網(wǎng)技術(shù)。由于有些嵌入式系統(tǒng)要求網(wǎng)絡(luò)的實(shí)時(shí)性較高,因此本文使用精簡(jiǎn)TCP/IP協(xié)議棧——uIP協(xié)議棧來(lái)實(shí)現(xiàn)基于DSP的嵌入式系統(tǒng)以太網(wǎng)接入功能,下面詳細(xì)闡述其設(shè)計(jì)與實(shí)現(xiàn)。
1 系統(tǒng)硬件平臺(tái)
 TMS320C5000系列是16 bit定點(diǎn)DSP,通常被應(yīng)用在如VoIP以及IP電話網(wǎng)關(guān)等通信領(lǐng)域中。基于DSP的嵌入式系統(tǒng)中選擇的數(shù)字信號(hào)處理芯片是TI公司的TMS320VC5510芯片,網(wǎng)卡芯片選擇的是由Cirrus Logic公司生產(chǎn)的CS8900AS芯片。系統(tǒng)硬件接口基本結(jié)構(gòu)圖如圖1所示。

 TMS320VC5510芯片是由TI公司生產(chǎn)的第一個(gè)基于定點(diǎn)TMS320C55x核,具有低功耗、高性能的16 bit數(shù)字信號(hào)處理器[2]。Cirrus Logic公司專門(mén)設(shè)計(jì)了以太網(wǎng)控制器CS8900A,這款網(wǎng)卡芯片主要應(yīng)用在對(duì)可靠性要求極高的工業(yè)控制領(lǐng)域中[3]。

 


2.1 底層驅(qū)動(dòng)程序的設(shè)計(jì)
 本系統(tǒng)采用查詢方式來(lái)完成CS8900A芯片的軟件編程控制工作。這一工作主要分為以下3個(gè)過(guò)程:
 (1)首先是完成以太網(wǎng)控制芯片的初始化工作,由初始化函數(shù)ethernet_driver_init(void)來(lái)完成發(fā)送/接收配置寄存器的相關(guān)設(shè)置工作,如對(duì)CS8900A進(jìn)行軟件復(fù)位、設(shè)置以太網(wǎng)接口參數(shù)以及設(shè)置以太網(wǎng)的硬件地址。
?。?)若發(fā)送數(shù)據(jù),則由數(shù)據(jù)發(fā)送函數(shù)ethernet_driver_write()先將發(fā)送命令寫(xiě)入CS8900A的TxCMD寄存器中,其次在CS8900A的Txlength寄存器中寫(xiě)入將要發(fā)送的數(shù)據(jù)幀長(zhǎng)度,接著檢查BusStatus寄存器的PPD,待PPD處于空閑狀態(tài)時(shí)將要發(fā)送的數(shù)據(jù)幀寫(xiě)入CS8900A中,最后CS8900A將自動(dòng)決定數(shù)據(jù)幀以相應(yīng)的報(bào)文根據(jù)TxCMD寄存器的設(shè)置向以太網(wǎng)上發(fā)送。
?。?)若以太網(wǎng)接收到數(shù)據(jù)包,則由數(shù)據(jù)接收函數(shù)ethernet_driver_write()讀取數(shù)據(jù)包,CS8900A將根據(jù)接收配置寄存器的設(shè)置自動(dòng)對(duì)接收的報(bào)文進(jìn)行預(yù)處理。
2.2 uIP協(xié)議棧的設(shè)計(jì)
 由瑞典計(jì)算機(jī)科學(xué)學(xué)院的Adam Dunkels開(kāi)發(fā)的uIP協(xié)議棧是一種免費(fèi)的、可實(shí)現(xiàn)的且非常小的TCP/IP協(xié)議棧,它是為8 bit和16 bit處理器專門(mén)設(shè)計(jì)的[5]。uIP協(xié)議棧是使用C語(yǔ)言編寫(xiě)的,它移植起來(lái)方便而且代碼也相當(dāng)簡(jiǎn)潔。uIP協(xié)議棧去掉了完整的TCP/IP中不常用的功能,簡(jiǎn)化了通信流程,占用的資源少,處理速度快。
 基于DSP的嵌入式系統(tǒng)uIP協(xié)議棧中,根據(jù)需要只實(shí)現(xiàn)了ARP、IP、ICMP、UDP協(xié)議。TCP提供面向連接的、可靠的、點(diǎn)對(duì)點(diǎn)的服務(wù)[6],但TCP開(kāi)銷(xiāo)大,傳輸速度慢;雖然UDP是面向無(wú)連接的,由于UDP沒(méi)有可靠性的保證機(jī)制,因此能以較快的速度進(jìn)行數(shù)據(jù)通信;UDP協(xié)議的開(kāi)銷(xiāo)很小,傳輸率比TCP高出很多,實(shí)時(shí)性更強(qiáng),所以u(píng)IP協(xié)議中采用UDP協(xié)議作為運(yùn)輸層協(xié)議。該uIP協(xié)議棧的網(wǎng)絡(luò)體系結(jié)構(gòu)如圖3所示。

2.3 uIP協(xié)議棧的實(shí)現(xiàn)
 uIP協(xié)議棧的實(shí)現(xiàn)主要集中在uip.c的源文件里,代碼簡(jiǎn)潔。圖4所示為uIP整個(gè)系統(tǒng)的主程序流程圖。在這個(gè)主程序流程圖中,初始化工作是由底層硬件完成的,主要是對(duì)物理層的一些接口進(jìn)行配置和綁定。uIP協(xié)議棧接收數(shù)據(jù)包的過(guò)程實(shí)際上就是對(duì)數(shù)據(jù)包進(jìn)行解析,當(dāng)網(wǎng)絡(luò)驅(qū)動(dòng)設(shè)備發(fā)送數(shù)據(jù)包過(guò)來(lái)時(shí),首先讀取數(shù)據(jù)包判斷是IP包還是ARP包,如果是ARP包,則進(jìn)行ARP處理;若是IP包,則判斷其上層協(xié)議是UDP協(xié)議還是ICMP協(xié)議,再分別對(duì)其進(jìn)行處理。當(dāng)有數(shù)據(jù)發(fā)送時(shí),網(wǎng)絡(luò)驅(qū)動(dòng)設(shè)備的硬件將自行判別數(shù)據(jù)包并且完成數(shù)據(jù)包的封裝工作。

2.3.1 ARP協(xié)議
 ARP協(xié)議是由源文件Uip_arp.c實(shí)現(xiàn)的,其中包含uip_arp_init()、uip_arp_timer()、uip_arp_update()、uip_arp_arpin()和uip_arp_out()5個(gè)函數(shù)。uip_arp_init()完成ARP的初始化工作,初始化ARP首部、入口地址等。uip_arp_timer()完成動(dòng)態(tài)映射表的老化功能,這個(gè)函數(shù)每10 s被調(diào)用一次,若動(dòng)態(tài)映射表里的映射關(guān)系在連續(xù)20 min內(nèi)沒(méi)有發(fā)生變化,則其映射將失效。uip_arp_update()完成動(dòng)態(tài)映射表的更新功能。void uip_arp_arpin()對(duì)接收到的ARP分組進(jìn)行處理。uip_arp_out()完成ARP請(qǐng)求的自動(dòng)發(fā)送功能,它是在即將發(fā)送一個(gè)IP分組前被調(diào)用。
2.3.2 IP協(xié)議
 IP協(xié)議由ip_recv和ip_send兩個(gè)函數(shù)段來(lái)實(shí)現(xiàn)。ip_send函數(shù)段完成IP數(shù)據(jù)包的發(fā)送功能,接收上層協(xié)議傳送過(guò)來(lái)的數(shù)據(jù)包加上IP首部進(jìn)行封裝,然后設(shè)置srcipaddr、destipaddr、proto及ipchksum,最后交給下層協(xié)議處理好發(fā)送;ip_recv函數(shù)段完成IP數(shù)據(jù)包的接收功能,當(dāng)收到數(shù)據(jù)包時(shí)首先判斷其vhl、length、destipaddr及ipchksum是否正確,然后根據(jù)IP報(bào)文首部的類型碼將該數(shù)據(jù)包交給相應(yīng)的上層協(xié)議處理。
2.3.3 ICMP協(xié)議
 ICMP協(xié)議主要由標(biāo)志段icmp_input實(shí)現(xiàn)。ICMP協(xié)議在實(shí)現(xiàn)時(shí)比較簡(jiǎn)單,具體操作是將ICMP的報(bào)文字段從回送類型變成回送應(yīng)答類型,再另外計(jì)算checksum并修改checksum字段。
2.3.4 UDP協(xié)議
 UDP協(xié)議主要由函數(shù)udpfound和udpsend兩個(gè)標(biāo)志段實(shí)現(xiàn)。udpfound函數(shù)段負(fù)責(zé)處理收到的UDP數(shù)據(jù),包括取出源IP地址、目的地址和源端口,并判斷它的端口號(hào)和校驗(yàn)和是否都正確,如果正確再獲取目的端口,調(diào)用應(yīng)用程序?qū)邮盏降臄?shù)據(jù)包進(jìn)行相應(yīng)處理,否則丟棄。udpsend函數(shù)段完成UDP數(shù)據(jù)包的發(fā)送功能,如果接收到來(lái)自應(yīng)用程序的數(shù)據(jù),而這時(shí)又有數(shù)據(jù)要發(fā)送,那么首先分配空間給待發(fā)送的數(shù)據(jù),然后拷貝數(shù)據(jù)到UDP數(shù)據(jù)包的數(shù)據(jù)部分,并對(duì)UDP首部各個(gè)字段對(duì)應(yīng)的源端口號(hào)和目的端口號(hào)進(jìn)行設(shè)置,最后再調(diào)用ip_send函數(shù)將欲發(fā)送的數(shù)據(jù)交給IP協(xié)議發(fā)送。
3 系統(tǒng)仿真
 利用計(jì)算機(jī)進(jìn)行仿真時(shí),在uIP協(xié)議棧中,將目標(biāo)機(jī)(也就是開(kāi)發(fā)板)的IP地址設(shè)置成129.27.137.103,區(qū)別于PC的129.27.137.104,即構(gòu)成局域網(wǎng)使得它們能在同一個(gè)網(wǎng)段內(nèi)進(jìn)行通信。假設(shè)已經(jīng)建立了一條成功的通信鏈路,這時(shí)應(yīng)該出現(xiàn)當(dāng)服務(wù)器發(fā)出命令,目標(biāo)機(jī)立即會(huì)給出回應(yīng)這樣的結(jié)果。DOS操作系統(tǒng)下ICMP測(cè)試圖如圖5所示。從圖5中可以得知,發(fā)送的4個(gè)ICMP數(shù)據(jù)包均得到了回應(yīng),其中最長(zhǎng)的回應(yīng)時(shí)間為18 ms,最短的回應(yīng)時(shí)間不到1 ms,平均回應(yīng)時(shí)間為10 ms。這時(shí)說(shuō)明開(kāi)發(fā)板與計(jì)算機(jī)建立了一條可靠的連接,ping通信成功,為系統(tǒng)各功能的實(shí)現(xiàn),提供了可靠的基礎(chǔ)。

 本文利用計(jì)算機(jī)進(jìn)行了仿真測(cè)試,完成了DSP與PC的ping通信,實(shí)現(xiàn)了基于DSP的嵌入式系統(tǒng)接入以太網(wǎng)的功能。但仍需解決的問(wèn)題是,由于UDP協(xié)議不可靠、面向無(wú)連接,難免會(huì)出現(xiàn)數(shù)據(jù)包亂序到達(dá)、數(shù)據(jù)包丟失的現(xiàn)象。因此針對(duì)這些現(xiàn)象可以對(duì)數(shù)據(jù)進(jìn)行一些處理,如對(duì)每一組數(shù)據(jù)進(jìn)行順序標(biāo)記,這樣可以在應(yīng)用層發(fā)現(xiàn)數(shù)據(jù)的丟失和亂序,從而予以更正;在數(shù)據(jù)包前后加一校驗(yàn)碼保證接收數(shù)據(jù)正確等,這將在后續(xù)工作中討論。
參考文獻(xiàn)
[1] 王采蓮,郭志強(qiáng).嵌入式TCP/IP協(xié)議棧在指揮網(wǎng)絡(luò)中的實(shí)現(xiàn)[C].AECC專題學(xué)術(shù)研討會(huì)論文集,2007,20(5):162-163.
[2] TI.TMS320VC5510AI DataSheet[Z].2004.
[3] Cirrus Logic. CS8900A Product Data Sheet[EB/OL]. [2007-08-01]http://www.cirrus.corn.
[4] 岳世為,尹為民.uIP協(xié)議棧在基于DSP以太網(wǎng)通信系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)與數(shù)字工程,2010,38(1):187.
[5] DUNKELS A. The uIP Embedded TCP/IP Stack[EB/OL]. [2006-06-01]http://www.Sics.se.
[6] [阿根廷]Scaglia Sergio.嵌入式Internet TCP/IP基礎(chǔ)、實(shí)現(xiàn)及應(yīng)用[M].潘琢金,徐蕾,拱長(zhǎng)青,等,譯.北京:北京航空航天大學(xué)出版社,2008.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。