3379|1

6802

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

TI C6678 DSP与PC 的以太网通信实现 [复制链接]

TI C6678 的DSP支持多种通信方式,通过以太网口实现TCP/UDP的通信就是方法之一。本文主要考虑如何实现DSP与PC间的网络通信和数据传输,因此内容较为简单,只是对TI已有的范例进行一些修改。关于使用C6678 DSP来实现网络应用并进行网络开发,那已经不是本文的讨论内容,更多内容可以参考TI NDK User Guide 和 TI 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

最新回复

好资料。   详情 回复 发表于 2020-9-9 21:09
 
点赞 关注

回复
举报

2618

帖子

0

TA的资源

纯净的硅(高级)

沙发
 

好资料。

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表