TI中文支持网
TI专业的中文技术问题搜集分享网站

C6678 NDK 工程拔插网线后,TCP重连失败

设计目标,以TI提供的NDK为基础,实现一个简单的TCP数据收发程序。其中,DSP板作为客户端,按固定间隔(如500ms)以非阻塞模式向服务端(用PC模拟)发送定量数据(如5000字节),客户端程序需要支持以下网线拔插后对服务器的自动重连操作。开发环境如下。

ndk_2_23_02_03

bios_6_46_04_53

ccsv6.1.1

mcsdk_2_01_02_06(C6678使用)

nsp_1_10_03_15(C6748使用)

为对比运行效果,我们同步在6748与C6678两款芯片上以官方提供的示例工程“client”为基础搭建应用程序。具体的TCP连接与收发代码见附件“tcpClient.c”。该文件内函数tcpClient作为一个任务,在NetworkOpen(C6678),netOpenHook(C6748)内注册启动,任务优先级为4。相关代码如下,系统中其他任务优先级配置如下:用户任务tcpClient优先级为4;NDK配置任务StackTest优先级为5;NDK调度任务NetScheduler设置为NC_PRIORITY_HIGH,对应为8;

现分别在两个平台上做如下测试:板卡上电前将网线拔掉;板卡上电并用仿真器运行client程序;等待若干时间;将网线重新插入板卡上RJ45接口;在PC端建立服务器,并观察是否能正常收到板卡发过来的数据;

 两个平台connect函数返回的错误码都是64,即tmp  =  EHOSTDOWN,但在C6748平台网线重新接插并建立服务端后,板卡可正常连接并发送数据。对应的tmp切换为36,即EINPROGRESS。但是C6678平台则保持connect函数返回的错误码都是64,不能再次连接服务器。

if( connect( s, (PSA) &sin1, sizeof(sin1) ) < 0 )

 { tmp = fdError();

感觉两个平台NDK调用的底层代码(NSP)对于网线插拔的响应与处理有差异,对比了以下两个文件:

C6748:C:\ti\nsp_1_10_03_15\packages\ti\drv\omapl138\ nimu_eth.c

C6678:C:\ti\pdk_C6678_1_1_2_6\packages\ti\transport\ndk\nimu\src\ nimu_eth.c

发现函数EmacPoll实现上差异较大:在C6748中poll发现新链接变化时会重新设置emac模块Full duplex mode.状态(具体为函数_HwPktPoll),并在linkup时“Send all queued packets any time this function is called and the link is up”。但是C6678这边直接返回,不做任何显示操作。

向各位专家请教一些调试意见,

1 上述在C6748通过,但C6678异常的现象,更偏向于NDK协议一级的配置问题,还是类似我怀疑的底层nsp部分代码问题?

2 另外,请问C6678中emacpoll是通过其他手段或者函数实现了吗?

countryhotel:

麻烦各位给点指导,现在没有什么调试思路了

countryhotel:

忘记上传附件了

赞(0)
未经允许不得转载:TI中文支持网 » C6678 NDK 工程拔插网线后,TCP重连失败
分享到: 更多 (0)