This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
您好!
我尝试找出一些奇怪的数据传输行为。 它开始工作、然后下降、现在无论如何都不起作用。
前导码:
HW:我们具有 TDA2HV 的定制板。
软件:我们不使用 Vision SDK。 从 NSP 示例为 CCS9创建项目。 MEMORY:对于存储器配置、从 SDK 获取文件:
C:\ti\sdk_VI\vision_sdk\sample_app\build\tda2xx\mem_segure_define_BIOS.xs
C:\ti\sdk_VI\vision_sdk\build\rtos\tda2xx\CONFIG_a15.bld
进行了相应更改。
我启动客户端并持续发送数据。
结果:
错误出现55 (没有可用的缓冲区空间)、然后在错误64 (主机关闭)时发生变化。 我们尝试增大 PBM 缓冲区大小-这没有帮助。
我注意到未分配对象 PBMQ_free。 我不知道为什么它会这么做。
我在 SEND 函数_mmCheck 中调用并获取下一个信息。
当它以 mm 为单位工作时、我们将获得下一个信息:
14:48 (5%) 15:96 (11%) 1:128 (1%) 1:256 (2%) 1:512 (4%) 0:1536 0:12288 (61440/245760毫米分配:41/0/9、毫米波:0/0/0) 在512字节页中分配1个块 在48字节页中分配的14个块 在128字节页面中分配1个块 在96字节页面中分配了15个块 在256字节页中分配1个块
Programe2e.ti.com/.../TDA2HV_5F00_a15_5F00_0_5F00_Ethernet.zip 发送 ARP 请求并获取答案、但传输不会开始。
我在 EVM TDA2E 上检查我的发送函数、它是有效的。
你能帮我解释为什么不能开始解释?
SYSBIOS:6.46.06.00
CCS:9.3
NDK:2.24.02.31
NSP:NSP gmacsw 4_16_01_01
SDK:VISION SDK 3.08
XDS:xdctools 3.32.01.22
器件:TDA2HV
我从 NKD 打开其他调试信息。 获取下一个结果:
[CortexA15_0] MAC 端口0地址: 00-35-ff-ad-15-F8 GMACSW 已成功启动 GMACSW 注册成功 00002.901 KrnMsg:MSG=[新增] A=[192.168.001.004] M=[255.255.255.255] 00004.200 KrnMsg:MSG=[新建] A=[192.168.001.000] M=[255.255.255.000] 网络已添加:IF-1:192.168.1.4 PHY 状态:MAC 端口0 00005.501 KrnMsg 上的 PHY 1:MSG=[新建] A=[000.000.000.000] M=[000.000.000.000] 协商连接:全双工1000 Mbs 链路状态: 在 TaskCreate ()运行之后 PHY 1上的1000Mb/s 全双工!! =========================== UDP =========================== sudp:1077308644 00009.801 KrnMsg:MSG=[新] A=[192.168.001.060] M=[255.255.255.255] 发送不安全的、2 错误任务:55 错误任务:55 错误 任务:55 错误任务:55 错误任务:55错误任务:55错误任务:55 00073.301 KrnMsg:MSG=[DOWN] A=[192.168.001.060] M=[255.255.255] 错误任务:64 错误任务:64错误 任务:64错误任务:64错误任务:错误任务:64错误任务:错误任务:64错误任务:错误64错误任务:错误任务64 64 错误任务:64 错误任务:64 00078.401 KrnMsg:MSG=[UP] A=[192.168.001.060] M=[255.255.255.255] 错误任务:55 错误任务:55 错误任务:5500360.201 KrnMsg:MSG=[过期] A=[192.168.001.060] M=[255.255.255.255] 00360.802 KrnMsg:MSG=[新] A=[192.168.001.060] M=[255.255.255.255] 错误任务:55 错误任务:5500367.901 KrnMsg:MSG=[向下] A=[192.168.001.060] M=[255.255] 错误任务:55
Geoge
哪个函数返回错误代码55、哪个函数返回64?
此错误出现在 SEND 或 SENto (I test 同时工作)函数中,并通过 fdError()函数 返回获得该错误。
在 udp.c 中运行时出现错误55:
if (!(pPktt = SockCreatePack( hSock,(uint)size + UDPHDR_size))) { UDPS.SndNoPacket++; 错误= ENOBUFS; 转到 udp_exit; }
错误64返回同一文件 udp.c 中的函数:
/*发送数据包*/ error=(int) IPTxPacket (pPkt, SockGetOptionFlags (hSock)&FLG IPTX_SOSUPPORTED);
乔治
我从结构 IPS 和 UDPS 获取下一个信息:
IPS 总计1328//接收到的数据包总数*/ Odiscost0/*由于 nofs 等原因丢失的数据包 */ Badsum0/*校验和错误*/ Badhlen0/* IP 标头长度<数据大小*/ Badlen0/* IP 长度< IP 标头长度*/ Badhene0/*选项处理中出现错误*/ Badvers0/* IP 版本!= 4 */ 转发0/*转发转发的数据包*/ 通知0/*未知或不受支持的协议*/ 已传送1328/*数据报传送到上层*/ CantForward1/*数据包接收到不可达的目的*/ CantforwardBA0/*数据包接收到非法寻址*/ 过期0/*数据包未转发,因为已使用过期*/ 重定向发送0/*数据包转发相同 NET */ Localout2440713/*此处生成的 IP 数据包总数*/ Localnorroute486/*由于没有路由而丢弃的本地数据包*/ 重新汇编的0/*重新汇编的数据包总数 ok */ 碎片0/*收到的碎片*/ 丢弃的0/*碎片丢弃(DUP,空间不足) // 碎片超时0//碎片超时*/ 碎片0/*数据报成功碎片*/ 碎片0/*创建的输出碎片*/ Cantfrag0/*未碎片标记已设置等 // CacheHit2441685//路由高速缓存命中*/ CacheMiss3//路由高速缓存缺失*/ 过滤0//通过防火墙过滤的数据包*/
UDPS
RcvTotal0 RcvShort0 RcvBadLen0 RcvBadsum0 RcvFull0 RcvNoPort0 RcvNoPortB0 SndTotal2441200 SndNoPacket0
是否应在 UDPS.RsvTotal 信息中包含 ARP 包?
乔治
我认为我们解决了这个问题。 问题在于延迟、这需要在信号 CFG_RGMII0_RXC_IN 中进行处理。
要调优延迟、请写入 add 函数:
void netCloseHook() { uint32_t regValue、Δ、粗、细、硅酸盐; 静态 int f精细_val = 3; 静态 int 粗糙_val = 0; /* I/O 延迟寄存器的全局解锁*/ CFG_IO_DELAY_LOCK = CFG_IO_DELAY_UNLOCK_KEY; /*调整到 RGMII0 RC 延迟*/ CFG_RGMII0_RXC_IN =(CFG_IO_DELAY_ACCESS_MODE 和~CFG_IO_DELAY_LOCK_MASK); SYSCFG_PAD_RGMII0_RXC =(SYSCFG_PAD_RGMII0_RXC 和~0xF)| 0x0; Delta =(粗糙值<< 5)+细值; /*添加到校准值的延迟值*/ regValue = CFG_RGMII0_RXC_IN &~0xFFFFFF00; 粗调 =((regValue >> 5)& 0x1F)+((Δ>> 5)& 0x1F); 粗调 =(粗调> 0x1F)? (0x1f):(粗); 好的 =(regValue & 0x1F)+(Delta & 0x1F); 好的 =(精细> 0x1F)? (0x1f):(细); regValue = CFG_IO_DELAY_ACCESS_MODE | CFG_IO_DELAY_LOCK_MASK |(粗略<< 5)|(精细)); CFG_RGMII0_RXC_IN = regValue; /*全局锁定*/ CFG_IO_DELAY_LOCK = CFG_IO_DELAY_LOCK_KEY; if (f精细_val >= 0x1F){ F精细_val = 0; 粗糙_val++; } F精细_v++; if (粗糙_val >= 0x1F){ 粗糙_val = 0; BIOS_exit (0); } printf ("细值:%d\n 粗值:%d\n"、细值、粗调值); if (mCtrl.biosKILL) BIOS_exit (0);//выход //DemonFree( hHello );}
在函数发送中、我添加:
if (status_fdError!= 0){ 错误计数器++; outputData ("错误任务:%d\n"、STATUS_FdError);// C:\ti\sdk_VI\ti_components\networking\NDK_2_25_01_11\packages/ti\NDK\inc\serrno.h if (ErrorCounter > 3){ printf ("错误任务:%d\n"、STATUS_FdError); 错误计数器= 0; NC_NetStop (1); fdCloseSession( TaskSele()); /*关闭插座。 * fdClose (sudp); TaskExit(); //NDK_hookExit (TaskSelf ()); } }
乔治
请不要关闭主题、我将自己关闭主题。 也许我可以在未来几周添加一些内容。
乔治
乔治
如果 RX 端缺少 IOdelay 设置、我假设您观察到一些错误、例如 CRC。 总之、很高兴错误得到解决。
您可以创建一个新的 E2E TT 并提及它与这个问题相关、因此该 TT 只关注一个问题。