TI C6678 DSP與PC 的以太網通信實現

TI C6678 的DSP支持多種通信方式,通過以太網口實現TCP/UDP的通信就是方法之一。本文主要考慮如何實現DSP與PC間的網絡通信和數據傳輸,因此內容較爲簡單,只是對TI已有的範例進行一些修改。關於使用C6678 DSP來實現網絡應用並進行網絡開發,那已經不是本文的討論內容,更多內容可以參考TI NDK User GuideTI NDK API Reference Guide 兩本技術手冊。

導入樣本工程

首先確保在CCS的目錄下已經安裝了合適版本的MCSDK和NDK。關於網絡通信,TI在 TI NDK User Guide 的第二章Example Applications中介紹的兩個例子都可以在MCSDK下找到,例如在我的電腦上就是C:\ti\mcsdk_2_01_02_05\examples\ndk。後面的內容都是在client工程的基礎上作修改的,因此我們在這裏導入在CCS中導入client工程。

導入之後嘗試是否能夠編譯成功,如果編譯報錯,請根據相應的提示修改工程。(可能是include位置設置地不對等問題)。

編譯成功之後連接DSP開發板嘗試運行調試(Run – Debug),在調試過程中如果遇到報錯請檢查以下幾項:(注意到此爲止我們還沒有修改工程的源代碼)

  • 是否在運行前對DSP開發板進行了Reset? (必須進行!)
  • 工程是否運行在Core0?(不能運行在其他Core)
  • DSP的Boot模式是否已切換到 I2C POST boot?(不能在 IBL NOR boot on image 0 (default)模式)


修改client.c

在初步的調試成功後還不能正確地執行工程應用,我們首先需要對代碼做一些修改。

首先,將Line: 80附近的LocalIPAddr,LocalIPMask,GatewayIP,DNSServer 改成PC 所在網段的相應內容。因爲我所在的實驗室採用固定IP,因此直接給DSP賦予了一個固定的IP地址(這裏以196.12.1.14爲例)。如果所在網段採用動態IP,請參考DHCP設置的相關內容。

更改上面的內容,並重新編譯運行後,在C:\ti\ndk_2_21_01_38\packages\ti\ndk\winapps可以找到相關的PC機上可以運行的客戶端程序。在控制檯運行

  • send 196.12.1.14
  • recv 196.12.1.14 100
  • echoc 196.12.1.14 100

分別可以在PC的控制檯和CCS的控制檯看到相應的運行結果。


修改echo

因爲我自己要實現的是採用DSP作文控制器,對以太網傳來的數據進行運算並將控制率傳回,因此我考慮的是修改工程中與echo相關的代碼,把自己用於控制率運算的函數插入進去。

首先我們看client.c文件,在DSP的初始化配置完成後,系統會調用NetworkOpen()函數,在該函數中,我們看到下面一條指令:

hEcho = DaemonNew( SOCK_STREAMNC, 0, 7, dtask_tcp_echo, OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );

這條指令的作用是開啓一個用於應答echo的進程,其中其他參數的作用暫時不管,我們主要關心 dtask_tcp_echo 這個參數。這是一個函數句柄,表示對於echo的應答由dtask_tcp_echo 這個函數完成。而這個函數的具體實現是在C:\ti\ndk_2_21_01_38\packages\ti\ndk\tools\servers下的newservers.c文件裏。

我曾經嘗試直接修改newservers.c中的dtask_tcp_echo 函數,但是編譯運行後並沒有得到期望的結果,具體原因我也不是很清楚。但是我的解決方法是將原先的

hEcho = DaemonNew( SOCK_STREAMNC, 0, 7, dtask_tcp_echo, OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );

指令註釋掉,並替換成自己定義的:

myhEcho = DaemonNew( SOCK_STREAMNC, 0, 7, my_dtask_tcp_echo, OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );

然後自己仿照newservers.c中的dtask_tcp_echo 函數重新寫一個自己的my_dtask_tcp_echo 函數。並把自己的計算操作插入到函數中的合適位置。同時要注意TCP的傳輸中是以byte爲單位的,在數據傳輸前後要進行一定的數據封裝和解封裝操作。(相關內容可參考我的另一篇博客:TI C6678 DSP與PC Matlab 串口通信研究)。

爲了進行測試,可以改寫C:\ti\ndk_2_21_01_38\packages\ti\ndk\winapps下的echoc.c代碼,加入自己用於測試的計算操作。同時注意註釋掉echoc.c中對於接受的數據進行校驗的操作,因爲在原本的功能中,echoc.c如果發現收到的數據和發出的數據不一致,將會終止通信並返回錯誤信息。

Ref.
TI Network Developer Kit (NDK) v2.21 Users Guide
TI Network Developer Kit (NDK) v2.21 API Reference Guide
TI E2E Comunity

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章