《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于NDK的DSP網(wǎng)絡(luò)接口移植開發(fā)設(shè)計
基于NDK的DSP網(wǎng)絡(luò)接口移植開發(fā)設(shè)計
來源:微型機(jī)與應(yīng)用2013年第1期
張 楓,,鄭力新,,周凱汀
(華僑大學(xué) 信息科學(xué)與工程學(xué)院,,福建 廈門361021)
摘要: 給出了一個基于TMS320DM6437 DSP的嵌入式網(wǎng)絡(luò)實現(xiàn)方案,對該DSP的網(wǎng)絡(luò)控制模塊和NDK進(jìn)行了深入的研究與分析,,實現(xiàn)了NDK在不同外設(shè)的移植,并以SEED-DEC6437與PC之間網(wǎng)絡(luò)通信為例,,介紹了PC端Winsock與DSP的NDK開發(fā)流程,。實驗結(jié)果表明,使用移植過的NDK進(jìn)行開發(fā),,可以有效地提高開發(fā)速度,,減少開發(fā)時間。
Abstract:
Key words :

摘  要: 給出了一個基于TMS320DM6437 DSP嵌入式網(wǎng)絡(luò)實現(xiàn)方案,,對該DSP的網(wǎng)絡(luò)控制模塊和NDK進(jìn)行了深入的研究與分析,,實現(xiàn)了NDK在不同外設(shè)的移植,并以SEED-DEC6437與PC之間網(wǎng)絡(luò)通信為例,,介紹了PC端Winsock與DSP的NDK開發(fā)流程,。實驗結(jié)果表明,使用移植過的NDK進(jìn)行開發(fā),,可以有效地提高開發(fā)速度,,減少開發(fā)時間。
關(guān)鍵詞: 嵌入式,;網(wǎng)絡(luò)接口,;DSP;NDK

 隨著網(wǎng)絡(luò)通信技術(shù)的不斷發(fā)展,,嵌入式設(shè)備間的網(wǎng)絡(luò)通信起到了越來越重要的作用,,TI公司推出的嵌入式數(shù)字信號處理器(DSP)都集成了以太網(wǎng)介質(zhì)存取控制器(EMAC),使得因特網(wǎng)終端的連接成本降低了50%以上。TI同時推出了相對應(yīng)的開發(fā)工具包(NDK),,使用NDK不僅能夠快速地開發(fā)網(wǎng)絡(luò)程序,,縮短開發(fā)周期,而且應(yīng)用程序能夠方便地在不同型號DSP上進(jìn)行移植,。本文主要針對NDK的結(jié)構(gòu)進(jìn)行詳細(xì)介紹,,闡述了移植的詳細(xì)過程,最后進(jìn)行實驗,,實驗結(jié)果證明,,移植過的NDK可以進(jìn)行良好的運用。
1 DM6437的網(wǎng)絡(luò)模塊
 TMS320DM6437是TI公司的一款專用于數(shù)字媒體應(yīng)用的高性能 32 bit定點DSP 處理器,,集成了以太網(wǎng)媒質(zhì)訪問控制器(EMAC)和物理層設(shè)備的數(shù)據(jù)輸入輸出管理(MDIO)模塊用于網(wǎng)絡(luò)配置[1],。其網(wǎng)絡(luò)功能模塊如圖1所示。

 DM6437的網(wǎng)絡(luò)功能主要由EMAC控制模塊,、EMAC模塊和MDIO模塊3部分組成[2],。
 EMAC控制模塊提供了DSP核與EMAC模塊和MDIO模塊之間的接口,它的作用主要是控制中斷和有效地利用設(shè)備內(nèi)存,。EMAC控制模塊內(nèi)部具有8 KB的隨機(jī)存儲器用來保存信息包的緩沖描述符,。
 MDIO模塊采用串行接口控制器來對以太網(wǎng)的物理層進(jìn)行監(jiān)視和控制[3],最多支持32個物理層設(shè)備,。它主要負(fù)責(zé)管理與EMAC相連的所有PHY芯片,,包括對PHY芯片進(jìn)行狀態(tài)檢測、配置等操作,。使用MDIO可以減少額外的CPU開銷,。
 EMAC模塊提供了DSP核與網(wǎng)絡(luò)之間通信的高效接口,DM6437的EMAC模塊支持10 Mb/s和100 Mb/s,。在半雙工或全雙工模式下,,同時具有硬件流控制及服務(wù)質(zhì)量保證(QoS)支持。
 內(nèi)置的EMAC/MDIO僅僅需要連接一個物理層設(shè)備即可,,大大減少了開發(fā)時間,,因此成為高速嵌入式網(wǎng)絡(luò)連接一個很好的選擇。在PHY的接口設(shè)計中SEED-DEC6437使用的是DAVICOM公司的DM9161A作為10/100Base-TX以太網(wǎng)收發(fā)器[4],,DM9161A提供有MII接口,,可以實現(xiàn)與TMS320DM6437的MII接口無縫對接。RJ45連接器選用AMP公司的406549-1,,其上帶兩個LED指示燈,,右邊的LED為綠色,用作指示連接狀態(tài),;左邊的為黃色,,正常情況下,,用來指示數(shù)據(jù)傳輸。接口原理圖[5]如圖2所示,。

2 NDK結(jié)構(gòu)的介紹與移植
 為了加速C6000系列DSP的網(wǎng)絡(luò)開發(fā)進(jìn)程,,TI公司結(jié)合C6000系列芯片推出TCP/IP的NDK開發(fā)套件,目的是為了通過使用較少資源消耗來支持TCP/IP服務(wù),,例如應(yīng)用層Telnet,、DHCP、HTTP服務(wù)等,。由于NDK中內(nèi)置了常用的服務(wù)程序,,因此通過使用NDK不僅可以有效地減少服務(wù)占用的資源,而且可以減少開發(fā)時間,,以便于更快地推出產(chǎn)品,。
 NDK建立在TI的嵌入式操作系統(tǒng)DSP/BIOS之上,主要由TCP/IP網(wǎng)絡(luò)協(xié)議棧(STACK.LIB),、網(wǎng)絡(luò)工具庫(NETTOOL.LIB),、操作系統(tǒng)層和打印層(OS.LIB and MiniPrintf.LIB)、硬件接口層(HAL.LIB)以及網(wǎng)絡(luò)控制層(NETCTRL.LIB)5部分重要的庫構(gòu)成,,如圖3所示。

 協(xié)議棧(STACK.LIB)指的是主要的TCP/IP網(wǎng)絡(luò)棧,,這個庫文件主要是跟DSP/BIOS系統(tǒng)有關(guān),,移植的時候不需要對它進(jìn)行改變。
 網(wǎng)絡(luò)工具庫(NETTOOL.LIB)包含NDK提供的所有網(wǎng)絡(luò)服務(wù)的套接字和一些幫助用戶開發(fā)的工具,。
操作系統(tǒng)層和打印層(OS.LIB and MiniPrintf.LIB)提供了一些抽象的函數(shù)以供DSP/BIOS調(diào)用,,例如任務(wù)線程管理、內(nèi)存分配和包緩沖管理等,。而打印層提供了CCS使用的RTS輸出函數(shù)等,。
 網(wǎng)絡(luò)控制層(NETCTRL.LIB)是協(xié)議棧的中心,它控制TCP/IP與外界交互,,主要作用是初始化NDK以及底層設(shè)備,,啟動網(wǎng)絡(luò)系統(tǒng)配置,響應(yīng)和調(diào)度設(shè)備,,退出時卸載系統(tǒng)配置清除驅(qū)動程序,。
 硬件接口層(HAL.LIB)是連接硬件設(shè)備與NDK之間的接口,包含時鐘,、LED指示燈,、以太網(wǎng)設(shè)備及串口的驅(qū)動。需要對這個文件進(jìn)行修改用來適應(yīng)不同的外設(shè),。由于HAL.LIB是個靜態(tài)鏈接庫,,需要找到開發(fā)包中提供的源程序文件,,修改之后重新進(jìn)行編譯。源文件位于%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中是以太網(wǎng)設(shè)備驅(qū)動程序,,而userled_dm6437中是LED指示燈的驅(qū)動程序,,LED的驅(qū)動程序采用默認(rèn)的即可。NDK的以太網(wǎng)驅(qū)動程序所包含的文件如表1所示,。

 LLPACKET.C是與硬件設(shè)備無關(guān)的以太網(wǎng)包驅(qū)動,,不需要進(jìn)行修改。DM64LC_MDIO.C是與硬件設(shè)備有關(guān)的,,包括PHY設(shè)備的初始化,、配置等,需要進(jìn)行修改,。文件首先定義了相應(yīng)的PHY控制寄存器地址,,經(jīng)過與DM9161A手冊對比,地址符合,,不需要進(jìn)行更改,。在接下來的初始化PHY設(shè)備MDIO_initPHY的函數(shù)中,應(yīng)該進(jìn)行適當(dāng)?shù)男薷囊苑喜煌腜HY設(shè)備,。TI為了加快PHY的初始化速度,,當(dāng)PHY設(shè)備啟動時,采用宏定義PHY_MASK來屏蔽不使用的PHY位,。通過查看DM9161A手冊可以看到,,管腳29、28,、27,、26、35分別代表的是PHYAD[0]~PHYAD[4],,通過查看原理圖上引腳是否有上拉電阻即可確定其值,,一般通過10 k?贅的上拉,設(shè)置為1,,不上拉設(shè)置為0,。經(jīng)過查看PHYAD=01111,換成十進(jìn)制為15,,則PHY_MASK就為0x8000,。在文件開始位置修改PHY_MASK即可。如果需要連接多個PHY設(shè)備,,在MDIO_initPHY()函數(shù)中,,需要把注釋“Shutdown all other PHYs”下面的代碼刪除,。這段代碼是為加速單個PHY設(shè)備啟動而設(shè)計的,當(dāng)連接多個PHY設(shè)備時就會阻止其正常工作,,經(jīng)過修改之后需要重新編譯生成lib文件,,注意要添加編譯包含的路徑,如圖4所示,。

 將生成的文件復(fù)制到NDK中的lib\hal\evmdm6437目錄下,,名稱為hal_eth_dm64lc.lib即可。
3 NDK的開發(fā)與測試
 在使用NDK開發(fā)之前,,需要設(shè)置NDK的開發(fā)環(huán)境,,需要進(jìn)行以下操作[6]:
 (1)硬件層需要一個100 ms的周期函數(shù)來作為它的時鐘驅(qū)動,,每100 ms周期驅(qū)動一次llTimerTick()函數(shù),。所以在BIOS里面PRD下面新建一個prdNDK變量,并在其屬性中設(shè)置周期為100 ms,,函數(shù)為_llTimerTick,。
 (2)系統(tǒng)需要鉤子函數(shù)為TCP/IP堆棧加載和保存私人變量指針,,所以在BIOS中的HOOK下面新建一個hookNdk,,并將初始化函數(shù)設(shè)置為_NDK_hookInit,創(chuàng)建函數(shù)設(shè)置為_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,。
 (5)NDK中的OS和HAL會創(chuàng)建3個內(nèi)存段,,分別是PACKETMEM,、MMBUFFER和OBJMEM,必須為這3個段分配內(nèi)存,,在CMD中寫入以下內(nèi)容:
SECTIONS
{
.far:PACKETMEM:{}>MYSDRAM
.far:MMBUFFER:{}>MYSDRAM
.far:OBJMEM:{}>MYSDRAM
}
 這里將3個段分配到自定義的MYSDRAM中,。
?。?)如果cache L2完全設(shè)置為SRAM,HAL驅(qū)動將不能正常工作,,這里需要把Cache設(shè)置至少為32 KB大小,。Cache的大小對網(wǎng)絡(luò)傳輸速度的有很大的影響,Cache越大速度越快,。
 設(shè)置好開發(fā)環(huán)境之后,,在DSP端開發(fā)一個UDP程序來與上位機(jī)通信。具體實現(xiàn)的功能是:上位機(jī)發(fā)送一個字符串,,DSP接收后進(jìn)行回傳,,在上位機(jī)進(jìn)行顯示。程序的基本流程如圖5所示,。

 


 為了研究NDK開發(fā)工具的移植方法,,本文討論了DM6437上NDK的結(jié)構(gòu)以及工作原理,并進(jìn)行了與PC數(shù)據(jù)通信的測試,。測試表明經(jīng)過移植的NDK可以正確地開發(fā)網(wǎng)絡(luò)程序,。本文重點介紹了NDK的移植方法,使開發(fā)者可以將其使用在不同的PHY設(shè)備上,,這大大拓展了NDK的使用范圍,。TI推出的NDK網(wǎng)絡(luò)開發(fā)工具可以使技術(shù)人員快速開發(fā)基于DSP的網(wǎng)絡(luò)應(yīng)用程序,而且具有十分可靠的性能,,使用本文的方法使得基于NDK開發(fā)的程序可以快速地移植到不同PHY設(shè)備的DSP上,。隨著DSP網(wǎng)絡(luò)通信的不斷普及,該方法的應(yīng)用范圍將越來越廣闊,。希望通過本文的介紹,,使得相關(guān)的開發(fā)研究人員得到方便,減少開發(fā)時間,。
參考文獻(xiàn)
[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] 合眾達(dá).SEED-DEC6437用戶指南[Z].2008.
[5] 合眾達(dá).SEED-DEC6437 V1.1原理圖[Z].2008.
[6] Texas Instruments. TMS320C6000 network developer′s kit(NDK) software programmer′s reference guide[Z]. 2007.

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