基于TMS320的以太網通信程序設計
摘要:文中介紹了TMS320 C64155 DSP EMAC接口的構成以及工作原理和關鍵數據結構,參考相關的以太網驅動程序,完成了基于C6455 DSP的以太網通信程序的設計。該網絡通信程序實現了某款信號處理機與上位機之間的高速通信接口。系統測試結果表明,利用C6455實現的以太網通信接口完全滿足系統設計要求,并且系統具有組成簡單、系統集成度高等優點。該方案在其他多功能信號處理設備方面具有一定的應用價值。
本文引用地址:http://www.j9360.com/article/235605.htm關鍵詞:TMS320 C6455;DSP;以太網通信;網絡驅動程序
隨著以太網技術的普及和發展,以太網的通信速率從百兆網逐漸進入了千兆網,甚至萬兆網,其通信速率已經滿足了常用信號處理機所需要的吞吐率。而以前僅用來做信號處理的DSP器件逐漸也加入了以太網通信功能,常見的如TI公司的DM642,C6455,C6678等DSP器件都帶有以太網接口,這給一些需要高速通信接口的信號處理板的設計提供了極大的便利。本文利用某處理板上的TI公司高端DSP器件TMS320 C6455,完成了信號處理板與人機界面之間的高速以太網通信功能。系統測試結果表明,利用C6455實現的以太網通信接口完全滿足系統設計要求,并且系統具有組成簡單、系統集成度高等優點。
1 硬件平臺
信號處理板的主要硬件包括兩路高速DAC,兩路高速ADC以及一塊Xilinx V5的FPGA和一塊TMS320 C6455DSP處理器,其中網絡通信接口部分主要包括C6455、PHY芯片和RJ45接口,如圖1所示。C6455的EMAC接口與信號板上的PHY芯片以GMII方式連接,支持千兆雙工通信模式。

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

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

EMAC模塊以鏈表的形式處理包緩存描述符,描述符鏈表的第一個地址需要寫入EMAC的頭描述符寄存器(head descriptor pointer),EMAC從頭描述符寄存器指向的描述符開始,逐個處理鏈表中所有的描述符,直到遇到Next Descriptor Pointer為零的描述符。當鏈表中所有的描述符都處理完成時,EMAC向DSP核發出一個中斷,并將處理完的最后一個描述符的地址寫入發送/接收完成寄存器,DSP核通過中斷和完成寄存器與EMAC進行發送或接收數據的同步。
3 以太網通信程序設計
文中設計的以太網通信程序是基于TI公司提供的DSP操作系統DSP/BIOS之上,由該操作系統提供時鐘定時、任務同步、硬件中斷管理等功能。如圖4所示,以太網通信程序主要由DSP/BIOS操作系統、網絡驅動程序和用戶程序構成。DSP/BIOS操作系統為其他模塊提供定時、任務同步等服務;網絡驅動程序完成以太網通信功能;用戶程序負責解釋并執行人機界面發送的命令和數據。網絡驅動程序主要包括以太網硬件驅動程序和幾個基本的網絡協議,包括ICMP,ARP和UDP協議,其中,以太網硬件驅動程序的設計是文中描述的重點,其主要包括MDIO驅動程序與EMAC驅動程序。MDIO驅動程序完成C6455 EMAC與物理芯片的交互,而EMAC驅動程序為用戶程序提供了以太網通信接口。

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

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

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

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

4 結束語
文中以為核心芯片,通過對C6455 EMAC硬件的研究,參考相關的以太網驅動程序,完成了C6455的以太網通信程序的設計。結果表明,文中設計的以太網驅動程序以及網絡協議模塊較好的滿足了處理機對實時高效數據通信的基本需求,省卻了對信號處理機硬件的修改,降低了系統的復雜度,為其他項目的開發提供了很好的借鑒。
但在對信號處理機網絡吞吐性能的測試過程中發現實際的網絡吞吐速率與千兆以太網的理論速率還是有較大的差距。如何進一步優化驅動程序的架構和關鍵數據結構的算法,以便進一步提高網絡吞吐率,是筆者下一步的研究方向。
數字通信相關文章:數字通信原理
通信相關文章:通信原理
評論