完善资料让更多小伙伴认识你,还能领取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 个讨论
|
|
flowerddd 发表于 2018-8-2 12:00 谢谢您的回答。 1、您说检查的cache 是否都enable是因为什么?我这里目前基本不涉及数据处理,应该不会有什么影响,我对cache使能或都不设置,处理效果类似。 2、当我将Rx free queue的数设置成32 时,PC机连续发100个时,DSP这提示只收到32个包,问题与之前一样的。描述述符是在中断里释放的,中断配置是例程中默认的,基本没有改动,不知道您有没有用这Pa_emacExample_exampleproject 工程进行过类似的测试,是不是我的程序中哪些地方被我改错了。 3、在SendPacket函数中,有一如下几条语句: if ((pCppiDesc = Qmss_queuePop (gTxFreeQHnd)) == NULL) [ printf ("No Tx free descriptor. Cant run send/rcv test n"); return -1; ] 当没有空间的Tx queue时函数返回。这里我为了去掉函数末尾的cycledelay(10000),将这几句改成 while((pCppiDesc = Qmss_queuePop (gTxFreeQHnd)) == NULL); 希望得到的结果是当没有空间Tx queue时一直等待,直到有空间Tx queue时才往下运行,这样就能达到实时的发送。 这不知道我这种想法是否得当? 而在我运行程序时,得到的并不是我想要的结果,当时好像是只发送了16次就停止了(这里初始化时申请了16个描述符)。 谢谢~~ |
|
|
|
|
|
|
|
60user143 发表于 2018-8-2 12:15 1、您说检查的cache 是否都enable是因为什么?我这里目前基本不涉及数据处理,应该不会有什么影响,我对cache使能或都不设置,处理效果类似。 [Marvin Liang]这是因为根据你的描述,中断处理效率很低,对这里例子而言Cpsw_RxISR->VerifyPacket函数其实是对数据的处理,cache是否使能,性能差别巨大。 2、当我将Rx free queue的数设置成32 时,PC机连续发100个时,DSP这提示只收到32个包,问题与之前一样的。描述述符是在中断里释放的,中断配置是例程中默认的,基本没有改动,不知道 您有没有用这Pa_emacExample_exampleproject 工程进行过类似的测试,是不是我的程序中哪些地方被我改错了。 [Marvin Liang] 本例中软件调用Qmss_queuePush (gRxFreeQHnd, (Ptr)pHostDesc, pHostDesc->buffLen, SIZE_HOST_DESC, Qmss_Location_TAIL);将描述符回收Rx FDQ.请你只发送一个包,处理完毕后查询Rx FDQ中的描述符个数Qmss_getQueueEntryCount(gRxFreeQHnd);如果还剩下31个,则您需要单步跟踪一下,为什么处理完毕的描述符没有回到Rx FDQ. 3、在SendPacket函数中,有一如下几条语句: if ((pCppiDesc = Qmss_queuePop (gTxFreeQHnd)) == NULL) [ printf ("No Tx free descriptor. Cant run send/rcv test n"); return -1; ] 当没有空间的Tx queue时函数返回。这里我为了去掉函数末尾的cycledelay(10000),将这几句改成 while((pCppiDesc = Qmss_queuePop (gTxFreeQHnd)) == NULL); 希望得到的结果是当没有空间Tx queue时一直等待,直到有空间Tx queue时才往下运行,这样就能达到实时的发送。 这不知道我这种想法是否得当? 而在我运行程序时,得到的并不是我想要的结果,当时好像是只发送了16次就停止了(这里初始化时申请了16个描述符)。 [Marvin Liang] 这样的改动可行,但其实不建议,较好的办法是先通过Qmss_getQueueEntryCount(gTxFreeQHnd);查询该队列的个数,如果是非0再pop. 只发送16次就停止了,应该是你的TX FDQ中的描述符也没能回到该队列。按道理,在Setup_Tx函数中已经设置了return queue, Cppi_setReturnQueue ((Cppi_DescType) Cppi_DescType_HOST, pCppiDesc, qInfo);PKTDMA模块会在发送完毕后将描述符送回TX FDQ。对于这样的情况,你可以写一个函数,用Qmss_getQueueEntryCount查询所有的8000个队列中的描述符个数,看看这样描述符漏到那个队列去了。特别是是否在0号队列,如果是的话,应该是你初始化描述符还有问题。 谢谢~~ |
|
|
|
|
|
|
|
flowerddd 发表于 2018-8-2 12:23 谢谢您 的回答。我目前的测试结果跟您分享下 1、之前跟您说的时候我将中断中校验的部分注释掉了,所以当时是否使能都没什么效果的,后期用时会使能cache; 2、DSP收PC发来的UDP包接收不正常,最后我是将代码中所有的打印信息给注释掉后就正常了,由于我是将BIOS程序改成了非BIOS程序,原来的system_printf改成了printf,可能导致程序运行紊乱,不知道您是否知道prinf 是如何影响DSP程序运行的么? 之所以想到注释printf,因为前些天调试多核程序时,处理异常,最终也是注释prinf后解决的。 3、按您的思路:Qmss_getQueueEntryCount(gTxFreeQHnd);查询该队列的个数,如果是非0再pop.这样处理后,再把最后的cycleDelay()函数给去掉,往PC发送UDP包时,用wireshark抓包时,总会丢包,有时100000包,只能抓个两三万包,不知道为何,在最后加上较大的延时后就可以正常接收。查STATA,STATB也都是正常的。这个是何解? 谢谢~~ |
|
|
|
|
|
|
|
60user143 发表于 2018-8-2 12:32 Hi, 2.BIOS改为非BIOS程序,最干净的情况是不要创建RTSC的工程(不用.cfg文件)。printf本身不会有什么问题,看起来应该是你修改工程后包含的头文件以及库文件出现了问题。 3. 如果是DSP发包给PC, CPSW STATA的接受正常包数和STATB中的发送正常包数和软件发送的一致,那么问题不在DSP侧。PC侧的抓包软件效率并不高,如果DSP发送100000个包是瞬时发出,PC未必能抓到。如果你要测试性能的话,建议你用两块TI EVM对接. |
|
|
|
|
|
|
|
flowerddd 发表于 2018-8-2 12:41 3q 这里在创建新的工程的时候已经没有创建.cfg配置文件了,加入了stdio.h,但就是不知道是哪里出现了问题。 手里只有一块EVM板,目前只能跟PC机测了。 今天测试的时候,发现当PC通过SkyData造出有规律的UDP数据往DSP发,DSP预先造出同样的Payload数据,DSP接收PC发来的数据并进行一一校验,当速率高于40Mbps(由SkyData测试出)时,DSP收到包数就与SkyData发出的包数不一致了,出现DSP收包丢失的情况,查PA三个层的计数器,与SkyData发出的包数一致,感觉又是中断处理不过来了(使能cache)。中断预置设定为1、2、3等,结果差不多(程序默认是1,每个包都响应,这样是不是每个描述符收到数据后就响应中断?那岂这样还能充分利用16个描述符么?) 我的目的就是想在确认数据正确的情况下,测出DSP接收 的最高速率,不知道您是怎么测试这个速率的? 谢谢 |
|
|
|
|
|
|
|
60user143 发表于 2018-8-2 12:53 测试DSP性能的办法很多,你的办法并不错,只是受限于PC发包性能,并不一定能测到DSP的最大处理能力,当然你现在的情况显然是程序还有问题,单核C66x的处理能力还达不到40Mbps。因为你只有一块EVM,可以试试 DSP核0做发送,SGMII digital 环回或者Serdes环回,核1再做接收处理。 对于效率低下的问题,建议你利用DSP核提供的TSCL和TSCH寄存器benchmark自己的程序,看看你程序对一个包的处理到底耗用了多少DSP cycle, 逐步找到效率低下的原因,而且通过这个数值你也可以计算出DSP的包处理能力。 |
|
|
|
|
|
|
|
flowerddd 发表于 2018-8-2 13:09 之前的困扰一直在与DSP响应队列中段后数据处理不过来,因为在中断中做了数据校验(这里选择的是直接比对),后来采用CCS的-o3优化以后,可以做到DSP接收200Mbps不丢包。 用TSCL 计数,测试时,比如用300的UDP包,中断内部处理周期为2691,不到300Mbps时就存在丢包。不知道中断响应开销会有多少?如果为1000个clock,则速率应该高于650Mbps时才出现丢包。 还有想请教几个问题: 1、在Pa_emacExample这个例程中,队列中断的阈值设定的是1,即每来一个包就产生中断,这里这样设定的话,是不是每一个描述符收到一包数据后就会触发中断,那例程中设定16个接收描述符有何目的?可能是我还没有理解透,麻烦您点拨下。 2、在这个网口例程中,在初始化接收描述符时,基本都是以最大的UDP包长申请的描述符buffer空间,对于包长较短时,这样势必会造成较大的浪费,这里想问一下,这个空间能否接收包的长度动态申请?或者,对于较短的包,多个UDP包共用一个描述符buffer空间,等这几个包数据长度接近某个阈值时在触发中断,这样的模式,在6678里是否可行? 谢谢。 |
|
|
|
|
|
|
|
60user143 发表于 2018-8-2 13:19 因为这个例子主要是演示简单的NETCP配置和QMSS accumulator中断,所以我们并没有在其上benchmark中断的开销。其实你可以基于你目前的修改求出中断的开销。保持输入包长为常数的情况下,得到最大不丢包时候的DSP所能处理的pps极限值(假设为A),因为你每个包的处理时长也是常数(假设根据TSCL求出为x cycle, DSP单核1GHz, 每一个包中断一次), 则 一个包的中断开销为 (1G- A*x)/A. 同时你也可以调整RX_INT_THRESHOLD的数值,也就是每秒产生的中断次数,验证上述结果是否正确。 注意该例子的中断开销实际上包含了硬件中断+BIOS操作系统中断两部分。 而如果你的重点是想找到一个办法尽可能多的处理包,则推荐你改为查询方式。 关于你的两个问题: 1. 对于这个例子而言,收包的过程为 EMAC/CPSW接收->PA配置规则过滤->PKT DMA用Rx FDQ(16个空闲描述符)收包到Pa_addPort的routeInfo所指定的目的队列->QMSS accumulator扫描该队列并pop占用的描述符到PING/PONG buffer(gHiPriAccumList)并跟据配置的RX_INT_THRESHOLD产生中断通知ISR. 所以你可以看出16个空闲描述符的Rx FDQ和RX_INT_THRESHOLD配置之间并没有直接的相关性。当然Rx FDQ中的个数不应该小于RX_INT_THRESHOLD。 2. 首先QMSS支持多描述符的单向链表方式,而PKT DMA Rx flow的Rx Size Thresholds配置能更优的接收数据。比如你可以简单的将Rx FDQ中的每个buffer改小(比如256BYTE),并增多描述符的总数,如果接收超过256 BYTE的包,收到的就不会是单片描述符+buffer而是描述符链表的形式。 而PKT DMA Rx flow的Rx Size Thresholds,可以让你配置最多4种不同长度的空闲buffer,尽可能的做到小包用单片小buffer,大包用单片大buffer.具体请参考multicore navigator的user guide. |
|
|
|
|
|
|
|
flowerddd 发表于 2018-8-2 13:26 你好,我也在测试6678网口,使用的是TI的helloword程序,在自己的开发板上运行。90%多的概率都会出现unable register the EMAC,请问是什么原因,怎么解决? 另外一个问题是SRIO的,很小的概率会出现初始化后port_ok没有置位或者就是发送数据时候会出现LSU_REG6_FULL的情况,这样就导致其他数据无法发送了,请问是什么问题,怎么定位 谢谢 |
|
|
|
|
|
|
|
60user143 发表于 2018-8-2 11:47 您好!现在我也在调6678evm和pc的通信,不知您是如何修改的程序,不知方便分享你的代码吗?邮箱:zjd1988@163.com |
|
|
|
|
|
|
|
60user143 发表于 2018-8-2 10:44 您好,我刚开始接触DSP,现在刚开始调试C6678的网口与PC的通信,也是用的PA_EmacExample ,一直没有连通,看到您去年有调试过,可以问一下您除了修改cpsw_mgmt.c外还修改了什么地方吗?新手亟待大神帮助,谢谢。 |
|
|
|
|
|
|
|
flowerddd 发表于 2018-8-2 10:59 你好, 我最近在调试66AK2E05型号的开发板,功能是实现PC与开发板间数据包的通信,请问有相关参考资料吗,例如KeyStone II以太网子系统调试手册之类的,谢谢! |
|
|
|
|
|
|
|
60user143 发表于 2018-8-2 13:19 你好,你调试这个Pa_emacExample例子的代码可以发给我看看吗?我对队列的很不理解,调试起来好棘手。万分感谢,我邮箱:592148976@qq.com |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
549 浏览 0 评论
1613 浏览 0 评论
2047 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1513 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1337 浏览 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 20:35 , Processed in 1.213642 second(s), Total 107, Slave 90 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2076