《電子技術(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ò)實(shí)現(xiàn)方案,對該DSP的網(wǎng)絡(luò)控制模塊和NDK進(jìn)行了深入的研究與分析,實(shí)現(xiàn)了NDK在不同外設(shè)的移植,并以SEED-DEC6437與PC之間網(wǎng)絡(luò)通信為例,介紹了PC端Winsock與DSP的NDK開發(fā)流程。實(shí)驗(yàn)結(jié)果表明,使用移植過的NDK進(jìn)行開發(fā),可以有效地提高開發(fā)速度,減少開發(fā)時間。
Abstract:
Key words :

摘  要: 給出了一個基于TMS320DM6437 DSP嵌入式網(wǎng)絡(luò)實(shí)現(xiàn)方案,對該DSP的網(wǎng)絡(luò)控制模塊和NDK進(jìn)行了深入的研究與分析,實(shí)現(xiàn)了NDK在不同外設(shè)的移植,并以SEED-DEC6437與PC之間網(wǎng)絡(luò)通信為例,介紹了PC端Winsock與DSP的NDK開發(fā)流程。實(shí)驗(yàn)結(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)行實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果證明,移植過的NDK可以進(jìn)行良好的運(yùn)用。
1 DM6437的網(wǎng)絡(luò)模塊
 TMS320DM6437是TI公司的一款專用于數(shù)字媒體應(yīng)用的高性能 32 bit定點(diǎn)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接口,可以實(shí)現(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]:
?。?)硬件層需要一個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。
 (4)為了確保能夠正確編譯項目文件,需要在CCS項目中的“build options”的“Link Order”一欄按一定順序添加庫文件,最佳的順序是:NETCTRL.LIB、HAL_xxx.LIB、NETTOOL.LIB、STACK.LIB、OS.LIB以及MiniPrintf.LIB。
?。?)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ī)通信。具體實(shí)現(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ò)程序。本文重點(diǎn)介紹了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)載。