完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
各位专家及大牛,我在调试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千兆网调试”中Marvin Liang 回复说“例子中注释掉 CSL_SGMII_enableLoopback (macPortNum); cpsw_mng.c 即可取消internal loopback模式,请参看附件中的代码在C6678 EVM上来实现千兆以太网的SGMII和SERDES的配置。”我照着做了PLL能锁定,但程序中有一段查询SGMII状态寄存器的代码,显示始终无连接(寄存器连接状态位一直为0,网线已经连接好),程序在这死循环不能继续运行,请问是否需要配置MDIO?如果需要怎么配置?例子中有一个Init_Mdio的函数,但没有实现。如果不需要配置,那怎么才能建立连接? 谢谢! |
|
相关推荐
39 个讨论
|
|
|
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。当然你可以尝试这样做,硬件条件是允许的。 |
|
|
|
|
|
|
|
flowerddd 发表于 2018-8-2 08:39 感谢Marvin Liang的回答! 1.我测试包长是1514字节,现在发送速率极限可以达到900Mbps左右,但计算机收不下来。另外socket发送用UDP没问题,一改成TCP就connect函数失败,报拒绝连接,请教一下这是什么原因。 2.dsp上一个核发送的时候我怎么看占用了多少资源? 3。第四点我也发现了,没有连接的是port0. 再次感谢! |
|
|
|
|
|
|
|
77uufuwr 发表于 2018-8-2 08:46 1. 如果你想做网口吞吐量测试,只有一个EVM可以用内部环回模式,或者用两个EVM直接连接测试。TCP失败原因很多,请根据我们的例子来修改你的代码(NSP包中含有测试实例) software-dl.ti.com/.../index.html 2. 你可以用TSC寄存器来测量发送函数耗用的cycle数 (refer to sprugh7) |
|
|
|
|
|
|
|
flowerddd 发表于 2018-8-2 08:51 “ 4. 如果你是用的C6678L EVM做与PC之间的收发包测试,则PDK默认的例子需要一点修改。因为C6678L EVM的SGMII port 1连接到了板子上的PHY,另一个SGMII port连接到了总线上。如果你get SGMII port 0的状态,可能一直是link down的,请参考我附上的文件。 我又试了一下,发现SGMII port 1也一直没有连接,这个是插好网线就可以吗,还是需要其他配置 |
|
|
|
|
|
|
|
77uufuwr 发表于 2018-8-2 09:08 你是用的我附上的文件吗?这是我在C6678L EVM板上验证过的,如果还有问题请参考 ...pdk_C6678_1_0_0_17packagestiplatformevmc6678lplatform_libsrcevmc6678_phy.c |
|
|
|
|
|
|
|
flowerddd 发表于 2018-8-2 08:51 Marvin Liang, 您好,我是DSP新手,现在在用EVM6670,同样我也想用C6670的千兆网口向PC发送数据及接收数据,可是我不知道怎么写发送数据的函数及接收数据的函数,怎么在PC上观察到接收的数据,怎么在DSP中读到PC发的数据,请您能帮助我入门,谢谢。 |
|
|
|
|
|
|
|
flowerddd 发表于 2018-8-2 08:39 您好,我在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硬件接口有问题呢 |
|
|
|
|
|
|
|
flowerddd 发表于 2018-8-2 08:39 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的,请参考我附上的文件。” 这里,我直接用你的程序替换了原有的程序。 |
|
|
|
|
|
|
|
60user143 发表于 2018-8-2 10:44 根据你的描述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) |
|
|
|
|
|
|
|
flowerddd 发表于 2018-8-2 10:59 谢谢 marvin Liang 的回答。 回环测试是正常的,刚开始发现收不到数,怀疑中断啥的配置,后来改回回还测试,发收正常。后续两部分检查待我测试后再来反馈。 还有几个问题: 1)在去给PC机发UDP包的时候,需要将PktMatch[]看人目的MAC设置成 PC机的么? 2)Init_Cpsw函数中配置的 macSrcAddress[2][6]以及 macAddress0、1、2,这几个mac指的是谁的mac? 谢谢 |
|
|
|
|
|
|
|
60user143 发表于 2018-8-2 11:04 就这个例子而言: 1)在给PC机发UDP包的时候,需要将PktMatch[]的目的MAC设置成 PC机的,因为很多PC机的网卡不支持混杂模式,默认都会丢弃目的地址非自己MAC地址的单播包。参考刚才的附件3.3 2)Init_Cpsw函数中macSrcAddress是设置给EMAC模块的寄存器的,该地址仅用于封装流控帧,无过滤作用。macAddressx是配置于CPSW ALE中的MAC地址,做层2交换用的,你可以认为macAddress[0]就是你要配置的芯片的source mac。macAddress[1]和macAddress[2]分别代表了两个EMAC/SGMII port下接的PC机MAC地址。macAddress[1]和macAddress[2]在使能了端口学习模式的时候,可以不配置。 |
|
|
|
|
|
|
|
flowerddd 发表于 2018-8-2 11:17 谢谢。 这个例子中的UDP包应该是自己组包的,就6678,可不可以通过配置PA,实现自动组包,而不用再将IP MAC等写到 Pktmatch[]中 ? |
|
|
|
|
|
|
|
60user143 发表于 2018-8-2 11:24 对于Keystone I这代的芯片而言,PA1.0主要功能是硬件查找表来实现from network 方向的包分类,to network方向功能比较有限,主要是协助软件修改包长度,计算checksum, CRC;IP分片等,还不能做到自动组包。下一代的Keystone II芯片中某些型号开始使用PA1.5, 进一步增强了from network方向的包分类和包处理 (增多硬件查找表项,支持bitmask/range的模糊查找,支持硬件IP重组),to network方向支持flow cache,可以根据预定义的包头进行硬件组包。一下是NETCP1.5包括PA1.5的处理框图: |
|
|
|
|
|
|
|
flowerddd 发表于 2018-8-2 10:59 您好,现在我可以收到PC机发送的UDP包了,问题出在Pa_addIP和Pa_addPort上,需要修改这两层的目的IP与目的Port值。但在后续的测试过程中又遇到了一些新的问题: 1、我在调试6678网口时参照您提供的《Keystone I以太网子系统调试手册.pdf 》里面介绍了PDSPn的几个接收统计计数器,现在我的利用Pa_emacExample_project这个工程调试时,PC机通过调试助手给DSP发送UDP包,现在的状态是:调试助手每1ms发送一包数据,发1000,DSP中PDSP1 PDSP3的统计数据为1000,而我在Cpsw_ISR中段中自己定义了一个计数器,每中断一次就加一(不进行具体的数据校验),PC每发1000,DSP只能能统计950包左右,数值不固定。按理说,1ms发送一个包,发送速率非常慢了,是中断函数处理不过来?我4ms间隔也试过,结果类似。您感觉是哪里出问题了? 2、Rx free queue 的最大值只能是16个么? 当我用调试助手比较快的速度发包时(具体时间间隔不清楚,至少小于1ms),发送的包数小于等于16时,DSP能正常的收到所有的包,大于的时候就只能收到16个包,这个是为何? 3、Pa_emacExample_project工程中的 SendPacket函数中,在配置好发送queue后,有一段延时,这个是必须的么?例程中给的是10000个cycle,这样的话,网口的传输速率还能到千兆么?不知您有没有这样测试过利用PA测试峰值传输速率? 谢谢了~~ |
|
|
|
|
|
|
|
60user143 发表于 2018-8-2 11:47 1.按照你描述的数据量来说,应该是程序的某个地方引入了很大的时延,导致处理太慢。请注意检查cache是否都有enable?因为该例程是通过QMSS high priority 中断收包,如果你并不是必须要中断方式,你可以将接受到的网络包放到一个普通的队列,并用查询模式来处理,看看对这个问题是否有帮助。如果有的话,证明中断部分的配置还需要调整。 2. RX free queue中的描述符个数可以很多,取决于你的初始化。只能收到16个包,应该是该队列的描述符没能正常的重用,请检查该描述符占用,释放回到Rx free queue的过程是否正常。比如只接收到一个包并处理完毕后,Rx free queue中应该还有16个。 3.这个延时不是必须的,因为该例程只是简单的示例,测试性能的时候当然不能人为的添加delay. PA的传输速率为1.5Mpps. |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
545 浏览 0 评论
1609 浏览 0 评论
2045 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1507 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1331 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1756浏览 29评论
2781浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1723浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1634浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1645浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 16:39 , Processed in 1.088240 second(s), Total 74, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2075