<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于TMS320的以太網(wǎng)通信程序設計

基于TMS320的以太網(wǎng)通信程序設計

作者: 時(shí)間:2014-04-01 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:文中介紹了 C64155 DSP EMAC接口的構成以及工作原理和關(guān)鍵數據結構,參考相關(guān)的以太網(wǎng)驅動(dòng)程序,完成了基于 DSP的以太網(wǎng)通信程序的設計。該網(wǎng)絡(luò )通信程序實(shí)現了某款信號處理機與上位機之間的高速通信接口。系統測試結果表明,利用實(shí)現的以太網(wǎng)通信接口完全滿(mǎn)足系統設計要求,并且系統具有組成簡(jiǎn)單、系統集成度高等優(yōu)點(diǎn)。該方案在其他多功能信號處理設備方面具有一定的應用價(jià)值。

本文引用地址:http://dyxdggzs.com/article/235605.htm

關(guān)鍵詞: ;DSP;以太網(wǎng)通信;網(wǎng)絡(luò )驅動(dòng)程序

隨著(zhù)以太網(wǎng)技術(shù)的普及和發(fā)展,以太網(wǎng)的通信速率從百兆網(wǎng)逐漸進(jìn)入了千兆網(wǎng),甚至萬(wàn)兆網(wǎng),其通信速率已經(jīng)滿(mǎn)足了常用信號處理機所需要的吞吐率。而以前僅用來(lái)做信號處理的DSP器件逐漸也加入了以太網(wǎng)通信功能,常見(jiàn)的如TI公司的DM642,C6455,C6678等DSP器件都帶有以太網(wǎng)接口,這給一些需要高速通信接口的信號處理板的設計提供了極大的便利。本文利用某處理板上的TI公司高端DSP器件 C6455,完成了信號處理板與人機界面之間的高速以太網(wǎng)通信功能。系統測試結果表明,利用C6455實(shí)現的以太網(wǎng)通信接口完全滿(mǎn)足系統設計要求,并且系統具有組成簡(jiǎn)單、系統集成度高等優(yōu)點(diǎn)。

1 硬件平臺

信號處理板的主要硬件包括兩路高速DAC,兩路高速ADC以及一塊Xilinx V5的FPGA和一塊TMS320 C6455DSP處理器,其中網(wǎng)絡(luò )通信接口部分主要包括C6455、PHY芯片和RJ45接口,如圖1所示。C6455的EMAC接口與信號板上的PHY芯片以GMII方式連接,支持千兆雙工通信模式。

 

 

2 C6455 EMAC接口介紹

C6455的EMAC接口主要由3部分構成,包括MDIO模塊、EMAC模塊、EMAC控制模塊。其中MDIO模塊通過(guò)802.3協(xié)議規定的串行通信接口,完成以太網(wǎng)物理層芯片的配置和管理:EMAC模塊負責以太網(wǎng)數據包的發(fā)送和接收;EMAC控制模塊作為DSP核和EMAC接口之間的橋梁,實(shí)現DSP核對EMAC模塊和MDIO模塊的控制。

如圖2所示,EMAC接口通過(guò)C6455提供的外設總線(xiàn)與DSP核連接,外設總線(xiàn)中的配置總線(xiàn)提供DSP核對EMAC寄存器的訪(fǎng)問(wèn),數據總線(xiàn)完成DSP核與EMAC接口之間的以太網(wǎng)通信包的交換。此外,EMAC控制模塊將EMAC模塊和MDIO模塊產(chǎn)生的18個(gè)中斷信號綜合在一起,對外提供一個(gè)中斷信號,發(fā)往C6455的中斷控制器,成為C6455處理器的第17號系統事件。C6455的DSP核在接到中斷信號后,通過(guò)查詢(xún)EMAC控制模塊提供的中斷狀態(tài)寄存器判斷中斷產(chǎn)生的中斷源。

 

 

包緩存描述符(Packet Buffer Descriptors)在C6455的網(wǎng)絡(luò )通信中起到關(guān)鍵的作用,應用程序和EMAC接口之間的信息交換主要是通過(guò)包緩存描述符來(lái)實(shí)現。包緩存描述符的結構如圖3所示,每個(gè)包緩存描述符大小為16個(gè)字節,其中各個(gè)域的意義如下:Next Descriptor Poin ter表示指向下一個(gè)描述符的指針,這樣多個(gè)包緩存描述符可以形成一個(gè)單向鏈表;Buffer Pointer表示指向接收或者發(fā)送數據內存空間的指針,EMAC模塊根據該指針,啟動(dòng)內部的DMA引擎將數據放入到內部FIFO以便發(fā)送,或者從內部FIFO讀出到該地址,以便應用程序處理;Buffer Offset表示從Buffer Pointer指向的地址到有效數據之間的距離;Buffer Length表示該緩存器指向數據的大小;Flags表示該緩存器指向的數據是否是應用程序數據包的起始包,或是結束包;Packets Length表示應用程序數據包的總長(cháng)度,應用程序包可能是由一個(gè)或者多個(gè)包緩存描述符構成。

 

 

EMAC模塊以鏈表的形式處理包緩存描述符,描述符鏈表的第一個(gè)地址需要寫(xiě)入EMAC的頭描述符寄存器(head descriptor pointer),EMAC從頭描述符寄存器指向的描述符開(kāi)始,逐個(gè)處理鏈表中所有的描述符,直到遇到Next Descriptor Pointer為零的描述符。當鏈表中所有的描述符都處理完成時(shí),EMAC向DSP核發(fā)出一個(gè)中斷,并將處理完的最后一個(gè)描述符的地址寫(xiě)入發(fā)送/接收完成寄存器,DSP核通過(guò)中斷和完成寄存器與EMAC進(jìn)行發(fā)送或接收數據的同步。

3 以太網(wǎng)通信程序設計

文中設計的以太網(wǎng)通信程序是基于TI公司提供的DSP操作系統DSP/BIOS之上,由該操作系統提供時(shí)鐘定時(shí)、任務(wù)同步、硬件中斷管理等功能。如圖4所示,以太網(wǎng)通信程序主要由DSP/BIOS操作系統、網(wǎng)絡(luò )驅動(dòng)程序和用戶(hù)程序構成。DSP/BIOS操作系統為其他模塊提供定時(shí)、任務(wù)同步等服務(wù);網(wǎng)絡(luò )驅動(dòng)程序完成以太網(wǎng)通信功能;用戶(hù)程序負責解釋并執行人機界面發(fā)送的命令和數據。網(wǎng)絡(luò )驅動(dòng)程序主要包括以太網(wǎng)硬件驅動(dòng)程序和幾個(gè)基本的網(wǎng)絡(luò )協(xié)議,包括ICMP,ARP和UDP協(xié)議,其中,以太網(wǎng)硬件驅動(dòng)程序的設計是文中描述的重點(diǎn),其主要包括MDIO驅動(dòng)程序與EMAC驅動(dòng)程序。MDIO驅動(dòng)程序完成C6455 EMAC與物理芯片的交互,而EMAC驅動(dòng)程序為用戶(hù)程序提供了以太網(wǎng)通信接口。

 

 

3.1 MDIO驅動(dòng)模塊的設計

MDIO模塊主要負責搜索、配置和監控外部以太網(wǎng)物理收發(fā)芯片。該模塊主要包括如下幾個(gè)部分:MDIO硬件初始化;PHY芯片搜索和配置;PHY芯片狀態(tài)監控。詳細的設計描述如下:

3.1.1 MDIO硬件初始化

MDIO硬件初始化包括如下步驟:

1)讀取C6455設備狀態(tài)寄存器(DEVSTFAT)中的MACSEL位,確定EMAC與PHY芯片之間的連接方式。文中所涉及的信號處理板上的C6455 EMAC與PHY芯片之間采用GMII方式連接。

2)初始化MDIO狀態(tài)機,將狀態(tài)機置為初始化狀態(tài)。

3)配置MDIO訪(fǎng)問(wèn)PHY芯片的時(shí)鐘并使能MDIO模塊。

3.1.2 PHY芯片搜索和配置

由于PHY芯片的搜索過(guò)程并無(wú)確定的時(shí)間,因此PHY芯片搜索和配置的實(shí)現采用狀態(tài)機來(lái)實(shí)現,該狀態(tài)機每隔100 ms根據查詢(xún)到的PHY芯片的狀態(tài)完成相應的操作并更新到下一狀態(tài),如圖5所示。PHY芯片的搜索經(jīng)過(guò)芯片復位,通信速率自協(xié)商等過(guò)程,最終與通信對端建立以太網(wǎng)物理層連接。

 

 

3.1.3 PHY芯片狀態(tài)監控

在以太網(wǎng)物理層鏈路的建立后,有可能由于用戶(hù)拔出網(wǎng)線(xiàn)、對端機器改變通信接口速率等情況而導致鏈路狀態(tài)改變,因此MDIO模塊需要每隔一段時(shí)間對網(wǎng)絡(luò )進(jìn)行監控。文中設計的狀態(tài)監控模塊由DSP/BIOS操作系統每隔100 ms查詢(xún)一次網(wǎng)絡(luò )狀態(tài),狀態(tài)監控程序一旦發(fā)現鏈路狀態(tài)有所變化,則根據引起鏈路變化的不同原因,進(jìn)入相應的處理流程。該流程如圖5中“鏈路連接”狀態(tài)以及相應的轉移狀態(tài)所示。

3.2 EMAC驅動(dòng)模塊的設計

EMAC驅動(dòng)模塊主要負責以太網(wǎng)數據包的接收和發(fā)送,它是以太網(wǎng)驅動(dòng)程序的主要組成部分。該模塊主要包括如下幾個(gè)部分:EMAC硬件初始化;EMAC接收模塊;EMAC發(fā)送模塊。各個(gè)模塊詳細的設計描述如下:

3.2.1 EMAC硬件初始化

EMAC硬件初始化主要的目的是將EMAC模塊置于就緒狀態(tài),此時(shí)EMAC已經(jīng)可以接收和發(fā)送以太網(wǎng)數據包。初始化過(guò)程主要包括如下步驟:

1)禁止EMAC中斷,復位EMAC的HDP寄存器、統計寄存器等,設置EMAC的MAC地址,掛接應用程序提供的回調函數等操作。

2)根據需求為發(fā)送模塊和接收模塊分配相應的包緩存描述符,并初始化接收模塊的包緩存描述符,使之指向應用程序提供的數據接收存儲塊。文中設計的以太網(wǎng)驅動(dòng)程序為接收模塊分配了32個(gè)包緩存描述符,為發(fā)送模塊分配了480個(gè)包緩存描述符,為發(fā)送和接收模塊共分配了64塊存儲塊,每個(gè)存儲塊大小為4 096個(gè)字節。圖6是接收模塊初始化完成后,接收描述符和接收存儲塊之間的關(guān)系。

 

 

如圖6,文中用EMAC_Ch_Struct結構體涵蓋了接收模塊所用到的鏈表指針。其中,DescQueue表示空的接收存儲塊鏈表,EMAC在接收到一塊數據時(shí),啟動(dòng)EMAC內部的DMA,將數據放入當前描述符指向的存儲塊,并通過(guò)中斷通知應用程序有數據到達;pDescFirst指向接收描述符鏈表的首地址,pDescLast指向接收描述符鏈表的末地址;pDescRead指向第一個(gè)可使用的描述符;pDescWrite指向最后一個(gè)可使用的描述符;

3)配置MAC的是否為多播地址,使能以太網(wǎng)中斷,EMAC處于就緒狀態(tài)。

3.2.2 EMAC接收模塊

EMAC接收模塊主要由EMAC中斷來(lái)驅動(dòng)。當EMAC硬件接收完一個(gè)或多個(gè)包數據時(shí),會(huì )向DSP核發(fā)出一個(gè)接收完成中斷。DSP核在接收到中斷后,調用應用程序提供的接收數據回調函數處理接收到的數據,并返回給中斷服務(wù)程序一個(gè)空閑的存儲塊,中斷服務(wù)程序將該存儲塊重新鏈接到接收存儲塊鏈表,完成接收數據流程。

3.2.3 EMAC發(fā)送模塊

EMAC發(fā)送模塊主要由一個(gè)發(fā)送接口函數ethSendPacket(char*Buffer,int Length)構成,用戶(hù)程序通過(guò)調用該函數完成以太網(wǎng)數據的發(fā)送。該函數參數中,Buffer表示應用程序需要發(fā)送的數據,Length表示發(fā)送數據的長(cháng)度。該函數首先將Buffer中的數據拷貝到空閑的存儲塊,并將該儲存塊加入如圖7所示的WaitQueue隊列中,WaitQueue隊列表示等待加入EMAC發(fā)送隊列(DescQueue)的存儲塊。ethSendPacket函數接著(zhù)檢查EMAC發(fā)送隊列DescQueue是否有空閑的發(fā)送描述符,如果有,將WaitQueue鏈表中的存儲塊加入到DeseQueue。EMAC硬件將通過(guò)相應的描述符,將DescQueue中的數據發(fā)送出去。

 

 

當數據發(fā)送完成后,EMAC向DSP核發(fā)出一個(gè)發(fā)送完成中斷。發(fā)送完成中斷服務(wù)程序將發(fā)送后的存儲塊從DescQueue中移除并交還給應用程序,然后將使用過(guò)的發(fā)送描述符置為空閑狀態(tài),以便下次發(fā)送數據時(shí)使用。

3.3 ARP/ICMP/UDP網(wǎng)絡(luò )協(xié)議模塊的設計

為了與上位機完成網(wǎng)絡(luò )通信,信號處理機還必須提供基本的網(wǎng)絡(luò )通信協(xié)議。文中在設計時(shí),主要提供了ARP/ICMP/UDP 3種網(wǎng)絡(luò )協(xié)議。ARP協(xié)議主要完成信號處理機IP地址和MAC地址的轉換;ICMP協(xié)議主要完成測試信號處理機與上位機之間的網(wǎng)絡(luò )連通性;UDP協(xié)議主要完成實(shí)際指令和數據的通信。

文中簡(jiǎn)化了這些網(wǎng)絡(luò )協(xié)議模塊的設計,設計的主要思路是解析3種協(xié)議的包格式,并根據不同協(xié)議,封裝相應的回應包,發(fā)送給上位機。在UDP協(xié)議設計中,為了保證數據能夠準確送達上位機,加入了CRC校驗和出錯重傳機制。協(xié)議處理流程如圖8所示。

 

 

4 結束語(yǔ)

文中以為核心芯片,通過(guò)對C6455 EMAC硬件的研究,參考相關(guān)的以太網(wǎng)驅動(dòng)程序,完成了C6455的以太網(wǎng)通信程序的設計。結果表明,文中設計的以太網(wǎng)驅動(dòng)程序以及網(wǎng)絡(luò )協(xié)議模塊較好的滿(mǎn)足了處理機對實(shí)時(shí)高效數據通信的基本需求,省卻了對信號處理機硬件的修改,降低了系統的復雜度,為其他項目的開(kāi)發(fā)提供了很好的借鑒。

但在對信號處理機網(wǎng)絡(luò )吞吐性能的測試過(guò)程中發(fā)現實(shí)際的網(wǎng)絡(luò )吞吐速率與千兆以太網(wǎng)的理論速率還是有較大的差距。如何進(jìn)一步優(yōu)化驅動(dòng)程序的架構和關(guān)鍵數據結構的算法,以便進(jìn)一步提高網(wǎng)絡(luò )吞吐率,是筆者下一步的研究方向。

數字通信相關(guān)文章:數字通信原理


通信相關(guān)文章:通信原理




關(guān)鍵詞: TMS320 C6455

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>