摘 要: 給出了一個(gè)基于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ā)時(shí)間,。
關(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同時(shí)推出了相對應(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個(gè)物理層設(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,。在半雙工或全雙工模式下,同時(shí)具有硬件流控制及服務(wù)質(zhì)量保證(QoS)支持,。
內(nèi)置的EMAC/MDIO僅僅需要連接一個(gè)物理層設(shè)備即可,,大大減少了開發(fā)時(shí)間,因此成為高速嵌入式網(wǎng)絡(luò)連接一個(gè)很好的選擇,。在PHY的接口設(shè)計(jì)中SEED-DEC6437使用的是DAVICOM公司的DM9161A作為10/100Base-TX以太網(wǎng)收發(fā)器[4],,DM9161A提供有MII接口,,可以實(shí)現(xiàn)與TMS320DM6437的MII接口無縫對接,。RJ45連接器選用AMP公司的406549-1,其上帶兩個(gè)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ā)時(shí)間,以便于更快地推出產(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ò)棧,,這個(gè)庫文件主要是跟DSP/BIOS系統(tǒng)有關(guān),移植的時(shí)候不需要對它進(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è)備,啟動(dòng)網(wǎng)絡(luò)系統(tǒng)配置,,響應(yīng)和調(diào)度設(shè)備,,退出時(shí)卸載系統(tǒng)配置清除驅(qū)動(dòng)程序。
硬件接口層(HAL.LIB)是連接硬件設(shè)備與NDK之間的接口,,包含時(shí)鐘,、LED指示燈、以太網(wǎng)設(shè)備及串口的驅(qū)動(dòng),。需要對這個(gè)文件進(jìn)行修改用來適應(yīng)不同的外設(shè),。由于HAL.LIB是個(gè)靜態(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ū)動(dòng)程序,,而userled_dm6437中是LED指示燈的驅(qū)動(dòng)程序,LED的驅(qū)動(dòng)程序采用默認(rèn)的即可,。NDK的以太網(wǎng)驅(qū)動(dòng)程序所包含的文件如表1所示,。
LLPACKET.C是與硬件設(shè)備無關(guān)的以太網(wǎng)包驅(qū)動(dòng),不需要進(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è)備啟動(dòng)時(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即可,。如果需要連接多個(gè)PHY設(shè)備,,在MDIO_initPHY()函數(shù)中,需要把注釋“Shutdown all other PHYs”下面的代碼刪除,。這段代碼是為加速單個(gè)PHY設(shè)備啟動(dòng)而設(shè)計(jì)的,,當(dāng)連接多個(gè)PHY設(shè)備時(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]:
?。?)硬件層需要一個(gè)100 ms的周期函數(shù)來作為它的時(shí)鐘驅(qū)動(dòng),每100 ms周期驅(qū)動(dòng)一次llTimerTick()函數(shù),。所以在BIOS里面PRD下面新建一個(gè)prdNDK變量,,并在其屬性中設(shè)置周期為100 ms,函數(shù)為_llTimerTick,。
?。?)系統(tǒng)需要鉤子函數(shù)為TCP/IP堆棧加載和保存私人變量指針,所以在BIOS中的HOOK下面新建一個(gè)hookNdk,,并將初始化函數(shù)設(shè)置為_NDK_hookInit,,創(chuàng)建函數(shù)設(shè)置為_NDK_hookCreat。
?。?)需要包含一些文件頭文件,。必須把工程項(xiàng)目的IncludeSearchingPath指向NDK安裝目錄下的inc目錄,如%NDK_INSTALL_DIR%\packages\ti\ndk\inc,。
?。?)為了確保能夠正確編譯項(xiàng)目文件,需要在CCS項(xiàng)目中的“build options”的“Link Order”一欄按一定順序添加庫文件,,最佳的順序是:NETCTRL.LIB,、HAL_xxx.LIB、NETTOOL.LIB,、STACK.LIB,、OS.LIB以及MiniPrintf.LIB。
?。?)NDK中的OS和HAL會創(chuàng)建3個(gè)內(nèi)存段,,分別是PACKETMEM、MMBUFFER和OBJMEM,,必須為這3個(gè)段分配內(nèi)存,,在CMD中寫入以下內(nèi)容:
SECTIONS
{
.far:PACKETMEM:{}>MYSDRAM
.far:MMBUFFER:{}>MYSDRAM
.far:OBJMEM:{}>MYSDRAM
}
這里將3個(gè)段分配到自定義的MYSDRAM中。
?。?)如果cache L2完全設(shè)置為SRAM,,HAL驅(qū)動(dòng)將不能正常工作,,這里需要把Cache設(shè)置至少為32 KB大小。Cache的大小對網(wǎng)絡(luò)傳輸速度的有很大的影響,,Cache越大速度越快,。
設(shè)置好開發(fā)環(huán)境之后,在DSP端開發(fā)一個(gè)UDP程序來與上位機(jī)通信,。具體實(shí)現(xiàn)的功能是:上位機(jī)發(fā)送一個(gè)字符串,,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ā)時(shí)間,。
參考文獻(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.