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.

C6678千兆网调试及性能问题

Other Parts Discussed in Thread: 66AK2E05

            各位专家及大牛,我在调试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的函数,但没有实现。如果不需要配置,那怎么才能建立连接?

谢谢!

  • 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。当然你可以尝试这样做,硬件条件是允许的。

  • 感谢Marvin Liang的回答!

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

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

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

    再次感谢!

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

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

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

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

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

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

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

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

  • Water sea,

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

  • Marvin Liang,

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

  • 您好,我在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硬件接口有问题呢

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

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

  • 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的,请参考我附上的文件。”

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

  •     根据你的描述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)

    Keystone I以太网子系统调试手册.pdf
  • 谢谢 marvin Liang 的回答。

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

    还有几个问题:

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

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

    谢谢

  • 就这个例子而言:

    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]在使能了端口学习模式的时候,可以不配置。

  • 谢谢。

    这个例子中的UDP包应该是自己组包的,就6678,可不可以通过配置PA,实现自动组包,而不用再将IP MAC等写到 Pktmatch[]中 ?

  • 对于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的处理框图:

  • 您好,现在我可以收到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测试峰值传输速率?

    谢谢了~~

  • 1.按照你描述的数据量来说,应该是程序的某个地方引入了很大的时延,导致处理太慢。请注意检查cache是否都有enable?因为该例程是通过QMSS high priority 中断收包,如果你并不是必须要中断方式,你可以将接受到的网络包放到一个普通的队列,并用查询模式来处理,看看对这个问题是否有帮助。如果有的话,证明中断部分的配置还需要调整。

    2. RX free queue中的描述符个数可以很多,取决于你的初始化。只能收到16个包,应该是该队列的描述符没能正常的重用,请检查该描述符占用,释放回到Rx  free queue的过程是否正常。比如只接收到一个包并处理完毕后,Rx free queue中应该还有16个。

    3.这个延时不是必须的,因为该例程只是简单的示例,测试性能的时候当然不能人为的添加delay. PA的传输速率为1.5Mpps.

  • 谢谢您的回答。

    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个描述符)。

    谢谢~~

  • 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号队列,如果是的话,应该是你初始化描述符还有问题。

    谢谢~~

  • 谢谢您 的回答。我目前的测试结果跟您分享下

    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也都是正常的。这个是何解?

    谢谢~~

  • Hi,

       2.BIOS改为非BIOS程序,最干净的情况是不要创建RTSC的工程(不用.cfg文件)。printf本身不会有什么问题,看起来应该是你修改工程后包含的头文件以及库文件出现了问题。

      3. 如果是DSP发包给PC, CPSW STATA的接受正常包数和STATB中的发送正常包数和软件发送的一致,那么问题不在DSP侧。PC侧的抓包软件效率并不高,如果DSP发送100000个包是瞬时发出,PC未必能抓到。如果你要测试性能的话,建议你用两块TI EVM对接.

  • 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接收 的最高速率,不知道您是怎么测试这个速率的?

    谢谢

  •         测试DSP性能的办法很多,你的办法并不错,只是受限于PC发包性能,并不一定能测到DSP的最大处理能力,当然你现在的情况显然是程序还有问题,单核C66x的处理能力还达不到40Mbps。因为你只有一块EVM,可以试试 DSP核0做发送,SGMII digital 环回或者Serdes环回,核1再做接收处理。

             对于效率低下的问题,建议你利用DSP核提供的TSCL和TSCH寄存器benchmark自己的程序,看看你程序对一个包的处理到底耗用了多少DSP cycle, 逐步找到效率低下的原因,而且通过这个数值你也可以计算出DSP的包处理能力。

  • 之前的困扰一直在与DSP响应队列中段后数据处理不过来,因为在中断中做了数据校验(这里选择的是直接比对),后来采用CCS的-o3优化以后,可以做到DSP接收200Mbps不丢包。

    用TSCL 计数,测试时,比如用300的UDP包,中断内部处理周期为2691,不到300Mbps时就存在丢包。不知道中断响应开销会有多少?如果为1000个clock,则速率应该高于650Mbps时才出现丢包。

    还有想请教几个问题:

    1、在Pa_emacExample这个例程中,队列中断的阈值设定的是1,即每来一个包就产生中断,这里这样设定的话,是不是每一个描述符收到一包数据后就会触发中断,那例程中设定16个接收描述符有何目的?可能是我还没有理解透,麻烦您点拨下。

    2、在这个网口例程中,在初始化接收描述符时,基本都是以最大的UDP包长申请的描述符buffer空间,对于包长较短时,这样势必会造成较大的浪费,这里想问一下,这个空间能否接收包的长度动态申请?或者,对于较短的包,多个UDP包共用一个描述符buffer空间,等这几个包数据长度接近某个阈值时在触发中断,这样的模式,在6678里是否可行?

    谢谢。

     

  • 因为这个例子主要是演示简单的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.

  • 你好,我也在测试6678网口,使用的是TI的helloword程序,在自己的开发板上运行。90%多的概率都会出现unable register the EMAC,请问是什么原因,怎么解决?

    另外一个问题是SRIO的,很小的概率会出现初始化后port_ok没有置位或者就是发送数据时候会出现LSU_REG6_FULL的情况,这样就导致其他数据无法发送了,请问是什么问题,怎么定位

    谢谢

  • 您好!现在我也在调6678evm和pc的通信,不知您是如何修改的程序,不知方便分享你的代码吗?邮箱:zjd1988@163.com

  • 请问一下你发送了16次就停止了的问题是怎么解决的,能不能指导一下

  • 我先在遇到发送一定包后就停止了,pop不成功,检查之后发送TX的描述符丢失了,请问这是什么原因

  • 您好!你是使用什么软件或者方法来测试发送速率的,能指点一下吗?我用wireshark软件速率是20多Mbps时,电脑就很卡。

  • 用的是 skydata 测试的

    我用wireshark 抓时 也卡

  • 这个问题解决了,不过记不太清了

    你试试把中断中的校验函数去了试试? 

    这个帖子了我给出了TI专家的提供的调试手册的链接,你可以看看那个文档,应该会有些帮助

  • 您好,我也在做PC和dsp通信的东西。我是新手,刚刚接触这一领域。运行的是mcsdk中的helloworld程序,但是程序debug时只能DDR初始化,之后就没有任何现象。我现在只修改了其中的IPaddr、gateway几个值,请问我怎么样才能正常通信呢?hitzhaoliangyu@126.com 谢谢

  • 您好,我刚开始接触DSP,现在刚开始调试C6678的网口与PC的通信,也是用的PA_EmacExample ,一直没有连通,看到您去年有调试过,可以问一下您除了修改cpsw_mgmt.c外还修改了什么地方吗?新手亟待大神帮助,谢谢。

  • 你好,

    我最近在调试66AK2E05型号的开发板,功能是实现PC与开发板间数据包的通信,请问有相关参考资料吗,例如KeyStone II以太网子系统调试手册之类的,谢谢!

  • 你好,你调试这个Pa_emacExample例子的代码可以发给我看看吗?我对队列的很不理解,调试起来好棘手。万分感谢,我邮箱:592148976@qq.com