新聞中心

EEPW首頁 > 設(shè)計應(yīng)用 > 基于TMS320 C6455的以太網(wǎng)通信程序的設(shè)計

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

作者: 時間:2016-10-10 來源:網(wǎng)絡(luò) 收藏

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

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

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

本文引用地址:http://2s4d.com/article/201610/306487.htm

a.JPG



2 C6455 EMAC接口介紹
C6455的EMAC接口主要由3部分構(gòu)成,包括MDIO模塊、EMAC模塊、EMAC控制模塊。其中MDIO模塊通過802.3協(xié)議規(guī)定的串行通信接口,完成以太網(wǎng)物理層芯片的配置和管理:EMAC模塊負責以太網(wǎng)數(shù)據(jù)包的發(fā)送和接收;EMAC控制模塊作為DSP核和EMAC接口之間的橋梁,實現(xiàn)DSP核對EMAC模塊和MDIO模塊的控制。
如圖2所示,EMAC接口通過C6455提供的外設(shè)總線與DSP核連接,外設(shè)總線中的配置總線提供DSP核對EMAC寄存器的訪問,數(shù)據(jù)總線完成DSP核與EMAC接口之間的以太網(wǎng)通信包的交換。此外,EMAC控制模塊將EMAC模塊和MDIO模塊產(chǎn)生的18個中斷信號綜合在一起,對外提供一個中斷信號,發(fā)往C6455的中斷控制器,成為C6455處理器的第17號系統(tǒng)事件。C6455的DSP核在接到中斷信號后,通過查詢EMAC控制模塊提供的中斷狀態(tài)寄存器判斷中斷產(chǎn)生的中斷源。

b.JPG


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

c.JPG


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

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

d.JPG


3.1 MDIO驅(qū)動模塊的設(shè)計
MDIO模塊主要負責搜索、配置和監(jiān)控外部以太網(wǎng)物理收發(fā)芯片。該模塊主要包括如下幾個部分:MDIO硬件初始化;PHY芯片搜索和配置;PHY芯片狀態(tài)監(jiān)控。詳細的設(shè)計描述如下:
3.1.1 MDIO硬件初始化
MDIO硬件初始化包括如下步驟:
1)讀取C6455設(shè)備狀態(tài)寄存器(DEVSTFAT)中的MACSEL位,確定EMAC與PHY芯片之間的連接方式。文中所涉及的信號處理板上的C6455 EMAC與PHY芯片之間采用GMII方式連接。
2)初始化MDIO狀態(tài)機,將狀態(tài)機置為初始化狀態(tài)。
3)配置MDIO訪問PHY芯片的時鐘并使能MDIO模塊。
3.1.2 PHY芯片搜索和配置
由于PHY芯片的搜索過程并無確定的時間,因此PHY芯片搜索和配置的實現(xiàn)采用狀態(tài)機來實現(xiàn),該狀態(tài)機每隔100 ms根據(jù)查詢到的PHY芯片的狀態(tài)完成相應(yīng)的操作并更新到下一狀態(tài),如圖5所示。PHY芯片的搜索經(jīng)過芯片復(fù)位,通信速率自協(xié)商等過程,最終與通信對端建立以太網(wǎng)物理層連接。

e.JPG


3.1.3 PHY芯片狀態(tài)監(jiān)控
在以太網(wǎng)物理層鏈路的建立后,有可能由于用戶拔出網(wǎng)線、對端機器改變通信接口速率等情況而導(dǎo)致鏈路狀態(tài)改變,因此MDIO模塊需要每隔一段時間對網(wǎng)絡(luò)進行監(jiān)控。文中設(shè)計的狀態(tài)監(jiān)控模塊由DSP/BIOS操作系統(tǒng)每隔100 ms查詢一次網(wǎng)絡(luò)狀態(tài),狀態(tài)監(jiān)控程序一旦發(fā)現(xiàn)鏈路狀態(tài)有所變化,則根據(jù)引起鏈路變化的不同原因,進入相應(yīng)的處理流程。該流程如圖5中“鏈路連接”狀態(tài)以及相應(yīng)的轉(zhuǎn)移狀態(tài)所示。
3.2 EMAC驅(qū)動模塊的設(shè)計
EMAC驅(qū)動模塊主要負責以太網(wǎng)數(shù)據(jù)包的接收和發(fā)送,它是以太網(wǎng)驅(qū)動程序的主要組成部分。該模塊主要包括如下幾個部分:EMAC硬件初始化;EMAC接收模塊;EMAC發(fā)送模塊。各個模塊詳細的設(shè)計描述如下:
3.2.1 EMAC硬件初始化
EMAC硬件初始化主要的目的是將EMAC模塊置于就緒狀態(tài),此時EMAC已經(jīng)可以接收和發(fā)送以太網(wǎng)數(shù)據(jù)包。初始化過程主要包括如下步驟:
1)禁止EMAC中斷,復(fù)位EMAC的HDP寄存器、統(tǒng)計寄存器等,設(shè)置EMAC的MAC地址,掛接應(yīng)用程序提供的回調(diào)函數(shù)等操作。
2)根據(jù)需求為發(fā)送模塊和接收模塊分配相應(yīng)的包緩存描述符,并初始化接收模塊的包緩存描述符,使之指向應(yīng)用程序提供的數(shù)據(jù)接收存儲塊。文中設(shè)計的以太網(wǎng)驅(qū)動程序為接收模塊分配了32個包緩存描述符,為發(fā)送模塊分配了480個包緩存描述符,為發(fā)送和接收模塊共分配了64塊存儲塊,每個存儲塊大小為4 096個字節(jié)。圖6是接收模塊初始化完成后,接收描述符和接收存儲塊之間的關(guān)系。

f.JPG


如圖6,文中用EMAC_Ch_Struct結(jié)構(gòu)體涵蓋了接收模塊所用到的鏈表指針。其中,DescQueue表示空的接收存儲塊鏈表,EMAC在接收到一塊數(shù)據(jù)時,啟動EMAC內(nèi)部的DMA,將數(shù)據(jù)放入當前描述符指向的存儲塊,并通過中斷通知應(yīng)用程序有數(shù)據(jù)到達;pDescFirst指向接收描述符鏈表的首地址,pDescLast指向接收描述符鏈表的末地址;pDescRead指向第一個可使用的描述符;pDescWrite指向最后一個可使用的描述符;
3)配置MAC的是否為多播地址,使能以太網(wǎng)中斷,EMAC處于就緒狀態(tài)。
3.2.2 EMAC接收模塊
EMAC接收模塊主要由EMAC中斷來驅(qū)動。當EMAC硬件接收完一個或多個包數(shù)據(jù)時,會向DSP核發(fā)出一個接收完成中斷。DSP核在接收到中斷后,調(diào)用應(yīng)用程序提供的接收數(shù)據(jù)回調(diào)函數(shù)處理接收到的數(shù)據(jù),并返回給中斷服務(wù)程序一個空閑的存儲塊,中斷服務(wù)程序?qū)⒃摯鎯K重新鏈接到接收存儲塊鏈表,完成接收數(shù)據(jù)流程。
3.2.3 EMAC發(fā)送模塊
EMAC發(fā)送模塊主要由一個發(fā)送接口函數(shù)ethSendPacket(char*Buffer,int Length)構(gòu)成,用戶程序通過調(diào)用該函數(shù)完成以太網(wǎng)數(shù)據(jù)的發(fā)送。該函數(shù)參數(shù)中,Buffer表示應(yīng)用程序需要發(fā)送的數(shù)據(jù),Length表示發(fā)送數(shù)據(jù)的長度。該函數(shù)首先將Buffer中的數(shù)據(jù)拷貝到空閑的存儲塊,并將該儲存塊加入如圖7所示的WaitQueue隊列中,WaitQueue隊列表示等待加入EMAC發(fā)送隊列(DescQueue)的存儲塊。ethSendPacket函數(shù)接著檢查EMAC發(fā)送隊列DescQueue是否有空閑的發(fā)送描述符,如果有,將WaitQueue鏈表中的存儲塊加入到DeseQueue。EMAC硬件將通過相應(yīng)的描述符,將DescQueue中的數(shù)據(jù)發(fā)送出去。

g.JPG


當數(shù)據(jù)發(fā)送完成后,EMAC向DSP核發(fā)出一個發(fā)送完成中斷。發(fā)送完成中斷服務(wù)程序?qū)l(fā)送后的存儲塊從DescQueue中移除并交還給應(yīng)用程序,然后將使用過的發(fā)送描述符置為空閑狀態(tài),以便下次發(fā)送數(shù)據(jù)時使用。
3.3 ARP/ICMP/UDP網(wǎng)絡(luò)協(xié)議模塊的設(shè)計
為了與上位機完成網(wǎng)絡(luò)通信,信號處理機還必須提供基本的網(wǎng)絡(luò)通信協(xié)議。文中在設(shè)計時,主要提供了ARP/ICMP/UDP 3種網(wǎng)絡(luò)協(xié)議。ARP協(xié)議主要完成信號處理機IP地址和MAC地址的轉(zhuǎn)換;ICMP協(xié)議主要完成測試信號處理機與上位機之間的網(wǎng)絡(luò)連通性;UDP協(xié)議主要完成實際指令和數(shù)據(jù)的通信。
文中簡化了這些網(wǎng)絡(luò)協(xié)議模塊的設(shè)計,設(shè)計的主要思路是解析3種協(xié)議的包格式,并根據(jù)不同協(xié)議,封裝相應(yīng)的回應(yīng)包,發(fā)送給上位機。在UDP協(xié)議設(shè)計中,為了保證數(shù)據(jù)能夠準確送達上位機,加入了CRC校驗和出錯重傳機制。協(xié)議處理流程如圖8所示。

h.JPG



4 結(jié)束語
文中以TMS320C6455為核心芯片,通過對C6455 EMAC硬件的研究,參考相關(guān)的以太網(wǎng)驅(qū)動程序,完成了C6455的以太網(wǎng)通信程序的設(shè)計。結(jié)果表明,文中設(shè)計的以太網(wǎng)驅(qū)動程序以及網(wǎng)絡(luò)協(xié)議模塊較好的滿足了處理機對實時高效數(shù)據(jù)通信的基本需求,省卻了對信號處理機硬件的修改,降低了系統(tǒng)的復(fù)雜度,為其他項目的開發(fā)提供了很好的借鑒。
但在對信號處理機網(wǎng)絡(luò)吞吐性能的測試過程中發(fā)現(xiàn)實際的網(wǎng)絡(luò)吞吐速率與千兆以太網(wǎng)的理論速率還是有較大的差距。如何進一步優(yōu)化驅(qū)動程序的架構(gòu)和關(guān)鍵數(shù)據(jù)結(jié)構(gòu)的算法,以便進一步提高網(wǎng)絡(luò)吞吐率,是筆者下一步的研究方向。



關(guān)鍵詞: DSP 以太網(wǎng)通信

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉