摘 要: 給出了一個基于TMS320DM6437 DSP的嵌入式網絡實現方案,對該DSP的網絡控制模塊和NDK進行了深入的研究與分析,實現了NDK在不同外設的移植,并以SEED-DEC6437與PC之間網絡通信為例,介紹了PC端Winsock與DSP的NDK開發(fā)流程。實驗結果表明,使用移植過的NDK進行開發(fā),可以有效地提高開發(fā)速度,減少開發(fā)時間。
關鍵詞: 嵌入式;網絡接口;DSP;NDK
隨著網絡通信技術的不斷發(fā)展,嵌入式設備間的網絡通信起到了越來越重要的作用,TI公司推出的嵌入式數字信號處理器(DSP)都集成了以太網介質存取控制器(EMAC),使得因特網終端的連接成本降低了50%以上。TI同時推出了相對應的開發(fā)工具包(NDK),使用NDK不僅能夠快速地開發(fā)網絡程序,縮短開發(fā)周期,而且應用程序能夠方便地在不同型號DSP上進行移植。本文主要針對NDK的結構進行詳細介紹,闡述了移植的詳細過程,最后進行實驗,實驗結果證明,移植過的NDK可以進行良好的運用。
1 DM6437的網絡模塊
TMS320DM6437是TI公司的一款專用于數字媒體應用的高性能 32 bit定點DSP 處理器,集成了以太網媒質訪問控制器(EMAC)和物理層設備的數據輸入輸出管理(MDIO)模塊用于網絡配置[1]。其網絡功能模塊如圖1所示。
DM6437的網絡功能主要由EMAC控制模塊、EMAC模塊和MDIO模塊3部分組成[2]。
EMAC控制模塊提供了DSP核與EMAC模塊和MDIO模塊之間的接口,它的作用主要是控制中斷和有效地利用設備內存。EMAC控制模塊內部具有8 KB的隨機存儲器用來保存信息包的緩沖描述符。
MDIO模塊采用串行接口控制器來對以太網的物理層進行監(jiān)視和控制[3],最多支持32個物理層設備。它主要負責管理與EMAC相連的所有PHY芯片,包括對PHY芯片進行狀態(tài)檢測、配置等操作。使用MDIO可以減少額外的CPU開銷。
EMAC模塊提供了DSP核與網絡之間通信的高效接口,DM6437的EMAC模塊支持10 Mb/s和100 Mb/s。在半雙工或全雙工模式下,同時具有硬件流控制及服務質量保證(QoS)支持。
內置的EMAC/MDIO僅僅需要連接一個物理層設備即可,大大減少了開發(fā)時間,因此成為高速嵌入式網絡連接一個很好的選擇。在PHY的接口設計中SEED-DEC6437使用的是DAVICOM公司的DM9161A作為10/100Base-TX以太網收發(fā)器[4],DM9161A提供有MII接口,可以實現與TMS320DM6437的MII接口無縫對接。RJ45連接器選用AMP公司的406549-1,其上帶兩個LED指示燈,右邊的LED為綠色,用作指示連接狀態(tài);左邊的為黃色,正常情況下,用來指示數據傳輸。接口原理圖[5]如圖2所示。
2 NDK結構的介紹與移植
為了加速C6000系列DSP的網絡開發(fā)進程,TI公司結合C6000系列芯片推出TCP/IP的NDK開發(fā)套件,目的是為了通過使用較少資源消耗來支持TCP/IP服務,例如應用層Telnet、DHCP、HTTP服務等。由于NDK中內置了常用的服務程序,因此通過使用NDK不僅可以有效地減少服務占用的資源,而且可以減少開發(fā)時間,以便于更快地推出產品。
NDK建立在TI的嵌入式操作系統(tǒng)DSP/BIOS之上,主要由TCP/IP網絡協(xié)議棧(STACK.LIB)、網絡工具庫(NETTOOL.LIB)、操作系統(tǒng)層和打印層(OS.LIB and MiniPrintf.LIB)、硬件接口層(HAL.LIB)以及網絡控制層(NETCTRL.LIB)5部分重要的庫構成,如圖3所示。
協(xié)議棧(STACK.LIB)指的是主要的TCP/IP網絡棧,這個庫文件主要是跟DSP/BIOS系統(tǒng)有關,移植的時候不需要對它進行改變。
網絡工具庫(NETTOOL.LIB)包含NDK提供的所有網絡服務的套接字和一些幫助用戶開發(fā)的工具。
操作系統(tǒng)層和打印層(OS.LIB and MiniPrintf.LIB)提供了一些抽象的函數以供DSP/BIOS調用,例如任務線程管理、內存分配和包緩沖管理等。而打印層提供了CCS使用的RTS輸出函數等。
網絡控制層(NETCTRL.LIB)是協(xié)議棧的中心,它控制TCP/IP與外界交互,主要作用是初始化NDK以及底層設備,啟動網絡系統(tǒng)配置,響應和調度設備,退出時卸載系統(tǒng)配置清除驅動程序。
硬件接口層(HAL.LIB)是連接硬件設備與NDK之間的接口,包含時鐘、LED指示燈、以太網設備及串口的驅動。需要對這個文件進行修改用來適應不同的外設。由于HAL.LIB是個靜態(tài)鏈接庫,需要找到開發(fā)包中提供的源程序文件,修改之后重新進行編譯。源文件位于%NDK_INSTALL_DIR%\packages\ti\ndk\src\hal\<board_name>\eth_<device_name>中。以NDK1.92版本為例,在ndk_1_92_00_22_eval\packages\ti\ndk\src\hal\evmdm6437中找到eth_dm6437和userled_dm6437文件夾,其中eth_dm6437中是以太網設備驅動程序,而userled_dm6437中是LED指示燈的驅動程序,LED的驅動程序采用默認的即可。NDK的以太網驅動程序所包含的文件如表1所示。
LLPACKET.C是與硬件設備無關的以太網包驅動,不需要進行修改。DM64LC_MDIO.C是與硬件設備有關的,包括PHY設備的初始化、配置等,需要進行修改。文件首先定義了相應的PHY控制寄存器地址,經過與DM9161A手冊對比,地址符合,不需要進行更改。在接下來的初始化PHY設備MDIO_initPHY的函數中,應該進行適當的修改以符合不同的PHY設備。TI為了加快PHY的初始化速度,當PHY設備啟動時,采用宏定義PHY_MASK來屏蔽不使用的PHY位。通過查看DM9161A手冊可以看到,管腳29、28、27、26、35分別代表的是PHYAD[0]~PHYAD[4],通過查看原理圖上引腳是否有上拉電阻即可確定其值,一般通過10 k?贅的上拉,設置為1,不上拉設置為0。經過查看PHYAD=01111,換成十進制為15,則PHY_MASK就為0x8000。在文件開始位置修改PHY_MASK即可。如果需要連接多個PHY設備,在MDIO_initPHY()函數中,需要把注釋“Shutdown all other PHYs”下面的代碼刪除。這段代碼是為加速單個PHY設備啟動而設計的,當連接多個PHY設備時就會阻止其正常工作,經過修改之后需要重新編譯生成lib文件,注意要添加編譯包含的路徑,如圖4所示。
將生成的文件復制到NDK中的lib\hal\evmdm6437目錄下,名稱為hal_eth_dm64lc.lib即可。
3 NDK的開發(fā)與測試
在使用NDK開發(fā)之前,需要設置NDK的開發(fā)環(huán)境,需要進行以下操作[6]:
?。?)硬件層需要一個100 ms的周期函數來作為它的時鐘驅動,每100 ms周期驅動一次llTimerTick()函數。所以在BIOS里面PRD下面新建一個prdNDK變量,并在其屬性中設置周期為100 ms,函數為_llTimerTick。
?。?)系統(tǒng)需要鉤子函數為TCP/IP堆棧加載和保存私人變量指針,所以在BIOS中的HOOK下面新建一個hookNdk,并將初始化函數設置為_NDK_hookInit,創(chuàng)建函數設置為_NDK_hookCreat。
?。?)需要包含一些文件頭文件。必須把工程項目的IncludeSearchingPath指向NDK安裝目錄下的inc目錄,如%NDK_INSTALL_DIR%\packages\ti\ndk\inc。
?。?)為了確保能夠正確編譯項目文件,需要在CCS項目中的“build options”的“Link Order”一欄按一定順序添加庫文件,最佳的順序是:NETCTRL.LIB、HAL_xxx.LIB、NETTOOL.LIB、STACK.LIB、OS.LIB以及MiniPrintf.LIB。
?。?)NDK中的OS和HAL會創(chuàng)建3個內存段,分別是PACKETMEM、MMBUFFER和OBJMEM,必須為這3個段分配內存,在CMD中寫入以下內容:
SECTIONS
{
.far:PACKETMEM:{}>MYSDRAM
.far:MMBUFFER:{}>MYSDRAM
.far:OBJMEM:{}>MYSDRAM
}
這里將3個段分配到自定義的MYSDRAM中。
?。?)如果cache L2完全設置為SRAM,HAL驅動將不能正常工作,這里需要把Cache設置至少為32 KB大小。Cache的大小對網絡傳輸速度的有很大的影響,Cache越大速度越快。
設置好開發(fā)環(huán)境之后,在DSP端開發(fā)一個UDP程序來與上位機通信。具體實現的功能是:上位機發(fā)送一個字符串,DSP接收后進行回傳,在上位機進行顯示。程序的基本流程如圖5所示。
為了研究NDK開發(fā)工具的移植方法,本文討論了DM6437上NDK的結構以及工作原理,并進行了與PC數據通信的測試。測試表明經過移植的NDK可以正確地開發(fā)網絡程序。本文重點介紹了NDK的移植方法,使開發(fā)者可以將其使用在不同的PHY設備上,這大大拓展了NDK的使用范圍。TI推出的NDK網絡開發(fā)工具可以使技術人員快速開發(fā)基于DSP的網絡應用程序,而且具有十分可靠的性能,使用本文的方法使得基于NDK開發(fā)的程序可以快速地移植到不同PHY設備的DSP上。隨著DSP網絡通信的不斷普及,該方法的應用范圍將越來越廣闊。希望通過本文的介紹,使得相關的開發(fā)研究人員得到方便,減少開發(fā)時間。
參考文獻
[1] Texas Instruments. TMS320C6000 network developer′s kit support package for EVMDM6437 user′s guide[Z]. 2006.
[2] Texas Instruments. TMS320C6000 network developer′s kit(NDK) software user′s guide[Z]. 2007.
[3] Texas Instruments. TMS320DM643x DMP ethernet aedia access controller(EMAC)/management data input/output (MDIO)module user′s guide[Z]. 2007.
[4] 合眾達.SEED-DEC6437用戶指南[Z].2008.
[5] 合眾達.SEED-DEC6437 V1.1原理圖[Z].2008.
[6] Texas Instruments. TMS320C6000 network developer′s kit(NDK) software programmer′s reference guide[Z]. 2007.