C6678千兆网调试及性能问题

C6678千兆网调试及性能问题

此问题已被解答
All Replies
  • 秀才530分

                各位专家及大牛,我在调试C6678的千兆网时,使用了CCS自带的MCSDK下的hua daemo例程,在其中网络连接建立后加入了自己用SOCKET向计算机(xp系统)发送数据的函数,实际测试中发现采用IPPROTO_UDP协议时,发送速率能达到400Mbps左右,发送200万个包其中大概有4、5个丢失,请问用socket传输速率(最好是你们实际中实现的速率)最大能达到多少?我后来想改成IPPROTO_TCP(参照的是NDK目录下spru523文档中的例子),但用connect函数建立连接时始终失败,错误代码61,我查了一下是拒绝连接,请问这个是什么原因及怎么解决。

               另外,我看了一下PA_EmacExample那个例子,这个例子对网络的配置是不是比hua daemo更底层?在zhen kong发表的帖子“C6678千兆网调试”中 回复说“例子中注释掉 CSL_SGMII_enableLoopback (macPortNum); cpsw_mng.c 即可取消internal loopback模式,请参看附件中的代码在C6678 EVM上来实现千兆以太网的SGMII和SERDES的配置。”我照着做了PLL能锁定,但程序中有一段查询SGMII状态寄存器的代码,显示始终无连接(寄存器连接状态位一直为0,网线已经连接好),程序在这死循环不能继续运行,请问是否需要配置MDIO?如果需要怎么配置?例子中有一个Init_Mdio的函数,但没有实现。如果不需要配置,那怎么才能建立连接?

    谢谢!

  • 举人1630分
    cpsw_mgmt.c

    Water Sea,

       1. 目前的NDK暂未发布基于C6678L EVM的benchmark数据 (请关注http://www.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=spraaq5a

     2. 请问你测试400Mbps测试中所用的包长是多少?另,发送2M个包有4,5 个包的丢失是在多大的发送速率下?你可以根据NDK 的相关统计以及C6678 以太网用户手册中(sprugv9a.pdf)交换端口的统计来判断丢包的原因。

     3.PA_EmacExample是不带TCP/IP协议栈的例子,包含了底层的SGMII/CPSW/NETCP等的初始化过程。该例子也可以改为大量数据测试,该层的测试结果表明C6678以太网能达到线速。当然NDK中的例子因为包含协议栈,所以效率会有所下降。

     4. 如果你是用的C6678L EVM做与PC之间的收发包测试,则PDK默认的例子需要一点修改。因为C6678L EVM的SGMII port 1连接到了板子上的PHY,另一个SGMII port连接到了总线上。如果你get SGMII port 0的状态,可能一直是link down的,请参考我附上的文件。

     5. C6678L EVM上的PHY比较简单,跑PDK例子的时候,MDIO不需要初始化,也不必通过MDIO来配置PHY。当然你可以尝试这样做,硬件条件是允许的。

  • 秀才530分

    感谢Marvin Liang的回答!

    1.我测试包长是1514字节,现在发送速率极限可以达到900Mbps左右,但计算机收不下来。另外socket发送用UDP没问题,一改成TCP就connect函数失败,报拒绝连接,请教一下这是什么原因。

    2.dsp上一个核发送的时候我怎么看占用了多少资源?

    3。第四点我也发现了,没有连接的是port0.

    再次感谢!

  • 举人1630分

    1. 如果你想做网口吞吐量测试,只有一个EVM可以用内部环回模式,或者用两个EVM直接连接测试。TCP失败原因很多,请根据我们的例子来修改你的代码(NSP包中含有测试实例)

    software-dl.ti.com/.../index.html

    2. 你可以用TSC寄存器来测量发送函数耗用的cycle数 (refer to sprugh7)

  • 秀才530分

    “ 4. 如果你是用的C6678L EVM做与PC之间的收发包测试,则PDK默认的例子需要一点修改。因为C6678L EVM的SGMII port 1连接到了板子上的PHY,另一个SGMII port连接到了总线上。如果你get SGMII port 0的状态,可能一直是link down的,请参考我附上的文件。

        我又试了一下,发现SGMII port 1也一直没有连接,这个是插好网线就可以吗,还是需要其他配置

  • 举人1630分

    你是用的我附上的文件吗?这是我在C6678L EVM板上验证过的,如果还有问题请参考

    ...\pdk_C6678_1_0_0_17\packages\ti\platform\evmc6678l\platform_lib\src\evmc6678_phy.c

  • 秀才530分

    我是用你的文件替换了例子中原来的文件,感谢你的帮助,我再仔细看看。

  • 秀才460分

    Water sea,

    你好,我是DSP新手,现在在用EVM6670,同样我也想用C6670的千兆网口向PC发送数据及接收数据,可是我不知道怎么写发送数据的函数及接收数据的函数,怎么在PC上观察到接收的数据,怎么在DSP中读到PC发的数据,请您能帮助我入门,谢谢。邮箱:huasy123@126.com/qq:769976412

  • 秀才460分

    Marvin Liang,

    您好,我是DSP新手,现在在用EVM6670,同样我也想用C6670的千兆网口向PC发送数据及接收数据,可是我不知道怎么写发送数据的函数及接收数据的函数,怎么在PC上观察到接收的数据,怎么在DSP中读到PC发的数据,请您能帮助我入门,谢谢。

  • 秀才141分

    您好,我在6678上跑的hua结果运行对吗?

    [C66xx_0] **************************************************

    [C66xx_0] ******* Ethernet Single Core Example Start *******

    [C66xx_0] **************************************************

    [C66xx_0] QMSS successfully initialized

    [C66xx_0] CPPI successfully initialized

    [C66xx_0] PASS successfully initialized

    [C66xx_0] Ethernet subsystem successfully initialized

    [C66xx_0] Tx setup successfully done

    [C66xx_0] Rx setup successfully done

    [C66xx_0] PASS setup successfully done

    [C66xx_0] Following is the ALE table before transmits.

    [C66xx_0] Port = 0, MAC address = 10:11:12:13:14:15, unicast_type = 0

    [C66xx_0] Port = 1, MAC address = 10:11:12:13:14:15, unicast_type = 0

    [C66xx_0] Port = 2, MAC address = 20:21:22:23:24:25, unicast_type = 0

    [C66xx_0] Packet Transmission Start ...

    [C66xx_0] Following is the ALE table after transmits.

    [C66xx_0] Port = 0, MAC address = 10:11:12:13:14:15, unicast_type = 0

    [C66xx_0] Port = 1, MAC address = 10:11:12:13:14:15, unicast_type = 0

    [C66xx_0] Port = 2, MAC address = 20:21:22:23:24:25, unicast_type = 0

    [C66xx_0] Packet Transmission Done.

    [C66xx_0] Wait for all packets to be Received ...

    [C66xx_0] Packets Sent = 10

    [C66xx_0] Packets Received = 10

    [C66xx_0] Example Done!

    [C66xx_0] **************************************************

    [C66xx_0] ******** Ethernet Single Core Example End ********

    [C66xx_0] **************************************************

    [C66xx_0] **************************************************

    [C66xx_0] ******* Ethernet Single Core Example Start *******

    [C66xx_0] **************************************************

    [C66xx_0] QMSS successfully initialized

    [C66xx_0] CPPI successfully initialized

    [C66xx_0] PASS successfully initialized

    [C66xx_0] Ethernet subsystem successfully initialized

    [C66xx_0] Tx setup successfully done

    [C66xx_0] Rx setup successfully done

    [C66xx_0] PASS setup successfully done

    [C66xx_0] Following is the ALE table before transmits.

    [C66xx_0] Port = 0, MAC address = 10:11:12:13:14:15, unicast_type = 0

    [C66xx_0] Port = 1, MAC address = 10:11:12:13:14:15, unicast_type = 0

    [C66xx_0] Port = 2, MAC address = 20:21:22:23:24:25, unicast_type = 0

    [C66xx_0] Packet Transmission Start ...

    [C66xx_0] Following is the ALE table after transmits.

    [C66xx_0] Port = 0, MAC address = 10:11:12:13:14:15, unicast_type = 0

    [C66xx_0] Port = 1, MAC address = 10:11:12:13:14:15, unicast_type = 0

    [C66xx_0] Port = 2, MAC address = 20:21:22:23:24:25, unicast_type = 0

    [C66xx_0] Packet Transmission Done.

    [C66xx_0] Wait for all packets to be Received ...

    [C66xx_0] Packets Sent = 10

    [C66xx_0] Packets Received = 10

    [C66xx_0] Example Done!

    [C66xx_0] **************************************************

    [C66xx_0] ******** Ethernet Single Core Example End ********

    [C66xx_0] **************************************************

    [C66xx_0] QMSS successfully initialized

    [C66xx_0] CPPI successfully initialized

    [C66xx_0] PA successfully initialized

    [C66xx_0] HUA version 2.00.00.03

    [C66xx_0] Setting hostname to tidemo-

    [C66xx_0] MAC Address: 90-D7-EB-2C-68-A8

    [C66xx_0] EVM in StaticIP mode at 192.168.2.100

    [C66xx_0] Set IP address of PC to 192.168.2.101

    [C66xx_0] PASS successfully initialized

    [C66xx_0] Ethernet subsystem successfully initialized

    [C66xx_0] Ethernet eventId : 48 and vectId (Interrupt) : 7

    [C66xx_0] Registration of the EMAC Successful, waiting for link up ..

    [C66xx_0] Network Added: If-1:192.168.2.100

    [C66xx_0] Service Status: THTTP    : Enabled  :          : 000

    为什么不能ping通 也不能link网页?会不会是phy硬件接口有问题呢

  • 秀才141分

    抱歉  最后那个是hua的结果  上面的是PA emac的结果  请看看

  • 秀才50分

    你好,能问下你是在程序的哪加入的自己的socket的吗,怎么加的啊,程序还需要哪些修改呢,如果方便的话可以共享下您的程序吗,谢谢

  • 举人1017分

    Marvin Liang:

            你好。最近在调试C6678网口与PC机之间的通信,利用的正是PA_EmacExample 的例子,参照你给的cpsw_mgmt.c的代码后,DSP可以通过网口将udp包给PC机,我想利用调试助手将收到的数据再发给DSP,但DSP一直收不到数据(进不了中断),请问你当时测试的时候是如何测试PC机网DSP发数据的?调试助手的设置应该没问题,可以通过手抓包软件观察到,还需要修改DSP哪些配置么?谢谢。

    “4. 如果你是用的C6678L EVM做与PC之间的收发包测试,则PDK默认的例子需要一点修改。因为C6678L EVM的SGMII port 1连接到了板子上的PHY,另一个SGMII port连接到了总线上。如果你get SGMII port 0的状态,可能一直是link down的,请参考我附上的文件。”

           这里,我直接用你的程序替换了原有的程序。

  • 举人1630分
    Keystone I以太网子系统调试手册.pdf

        根据你的描述DSP可以发包给PC,那么EMAC1/SGMII1/Serdes的配置应该正确了。在C6678 EVM板上可以同时设置SGMII_SERDES_CFGRX1和SGMII_SERDES_CFGTX1寄存器的Loopback寄存器来设置Serdes loopback,确实自发自收是否正常。如果正常,代表你在C6678端的EMAC1/SGMII1/Serdes的配置确实是正确的。

        关于DSP无法收到外面PC发的包。可以这样的检查:

        1. 检查CPSW收发统计寄存器(参考附件4.3.3)

        2. 用环回命令来检查配置情况(参考附件4.2)

  • 举人1017分

    谢谢 marvin Liang 的回答。

    回环测试是正常的,刚开始发现收不到数,怀疑中断啥的配置,后来改回回还测试,发收正常。后续两部分检查待我测试后再来反馈。

    还有几个问题:

    1)在去给PC机发UDP包的时候,需要将PktMatch[]看人目的MAC设置成 PC机的么?

    2)Init_Cpsw函数中配置的 macSrcAddress[2][6]以及 macAddress0、1、2,这几个mac指的是谁的mac?

    谢谢