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.

[参考译文] CCS/TDA2HV:以太网 UDP/TCP

Guru**** 2036780 points
Other Parts Discussed in Thread: TDA2HV, TDA2E, SYSBIOS
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/914885/ccs-tda2hv-ethernet-udp-tcp

器件型号:TDA2HV
主题中讨论的其他器件: TDA2ESYSBIOS

工具/软件: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

进行了相应更改。

我启动客户端并持续发送数据。

结果:

  1. 错误出现55 (没有可用的缓冲区空间)、然后在错误64 (主机关闭)时发生变化。 我们尝试增大 PBM 缓冲区大小-这没有帮助。

  2. 我注意到未分配对象 PBMQ_free。 我不知道为什么它会这么做。

  3. 我在 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个块 

  1. Programe2e.ti.com/.../TDA2HV_5F00_a15_5F00_0_5F00_Ethernet.zip 发送 ARP 请求并获取答案、但传输不会开始。

  2. 我在 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 包?  

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在 ARP 请求发送后、我找不到 MAC 地址目标。 如果我在 plli->Status =LLI_STATUS_VALID 中设置并在 plli->macaddr 数据开始中手动设置 MAC、请发送:

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为我们解决了这个问题。 问题在于延迟、这需要在信号 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 只关注一个问题。