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多核导航中的RX FLOW问题



最近在学习多核导航,通过查看技术手册、查看论坛以及STK例程,大致理解了RX FLOW的作用,但是有如下几个问题:

文档中说如果不指定rx flow,那么rx channel N将会使用Rx flow N,具体如下所示:

1、这里所谓的不指定rx flow是什么意思?是不对SOURCE_TAG_LO字段赋值吗?就此问题通过修改STK代码做了如下测试:

测试1:如果不对SOURCE_TAG_LO赋值的话,SOURCE_TAG_LO的默认值是0,此时使用的是rx flow 0。

测试2:SKT例程中使能了8对TX-RX通道,但是定义了6个rx flow(0~5),假如设置SOURCE_TAG_LO为大于5的任意数,先遍历8192个队列,再将描述符压入TX队列后,然后遍历8192个队列,发现没有哪个队列中的描述符个数发生了变化,也就是说TX侧既没有自动回收描述符,接收侧也没有收到描述符,那么这个描述符哪儿去了?

2、发送侧只管把描述符压入发送队列,那么接收侧的接收通道号是不是就是手册中 所说的RX channel N,这个N是在哪儿指定的,还是系统随机分配的?

  • 我测试代码有点问题,经过修改再次测试发现测试2中发送侧实际上是完成了描述符的回收的,但是接收侧没有反应。请TI的老师帮忙解答一下,谢谢。
  • 请问您对STK里的代码有做修改吗?如果有修改的话,做了怎样的修改?
  • 测试1是将这行代码屏蔽;测试2是将等号右值改成固定数字8。

    现在有如下问题

    问题1:手册中不指定RX flow 是如何做到不指定RX flow的?

    问题2:如果屏蔽上述代码,则接收侧默认使用的是rx flow 0来处理描述符,根据技术手册描述,是否就可以推断在不设置描述符的src_tag_lo字段时,接收侧就必须使用通道0来接收数据?

    问题:3:如果将描述符压入发送队列,我如何得知RX侧使用的哪个通道来接收数据的?

    问题4:就是如测试2操作,发送侧描述符已经回收了,接收侧没有反应,那么描述符去哪儿了,还在stream I/F中吗?

  • 在loopback模式下,Rxflow在Tx descriptor中的配置source_tag_lo中指定,接收侧根据每个发送侧过来的Rx flowID选择相应的flow,从flow中可以得到RxFDQ和RxQ。如果不指定source_tag_lo的话,Rx flow N 对应channel N。
    An RX flow must be programmed for every RX transaction. If the application is directly (or indirectly) driving the PKTDMA’s RX Streaming I/F (infrastructure tests is an example) and a valid RX flow ID is not specified, the RX DMA will substitute the channel number and use it for the RX flow ID. To specify the RX flow from the TX descriptor, fill the SOURCE TAG LO field with the desired RX flow number.

    另外,还可以参考下面文档的How should RX flows and channels be used?
    www.ti.com/.../sprugr9h.pdf
  • Shine 说:
    在loopback模式下,Rxflow在Tx descriptor中的配置source_tag_lo中指定,接收侧根据每个发送侧过来的Rx flowID选择相应的flow,从flow中可以得到RxFDQ和RxQ。如果不指定source_tag_lo的话,Rx flow N 对应channel N。
    An RX flow must be programmed for every RX transaction. If the application is directly (or indirectly) driving the PKTDMA’s RX Streaming I/F (infrastructure tests is an example) and a valid RX flow ID is not specified, the RX DMA will substitute the channel number and use it for the RX flow ID. To specify the RX flow from the TX descriptor, fill the SOURCE TAG LO field with the desired RX flow number.

    另外,还可以参考下面文档的How should RX flows and channels be used?
    www.ti.com/.../sprugr9h.pdf

    谢谢的解答,正如文档以及您回答中所示:“如果不指定source_tag_lo的话,Rx flow N 对应channel N”,我现在想用程序验证这句话,该怎么用程序实现“不指定source_tag_lo”?

  • TX description描述符中不要给src_tag_lo赋值。
  • 这个我试过了,把给src_tag_lo赋值的语句屏蔽了,RX侧使用的是Rx flow 0,根据“Rx flow N 对应channel N”,可以认为RX侧每次都是使用的是通道0来接收数据?
  • 请问您定义的是哪个channel?比如定义了channel 4,但rx flow是0?
  • 这一块是使用的例程里的,例程里使能了8个通道,通道0~7,所以我也不清楚具体使用的哪个通道?刚学习这一块,也不知道怎么看是使用的哪个通道在接收数据,望老师们指点指点。
    另外,在屏蔽对src_tag_lo赋值的语句后,通过CCS变量查看,src_tag_lo是恒等于0的,这个屏蔽赋值语句的效果跟把赋值语句改成src_tag_lo=0应该没区别吧?
  • 先只使能一个非0通道验证试试。

  • 首先感谢的指导!

    经过多次试验后,其他问题已经搞清楚了,就剩如何不指定rx flow的问题,试验确认如下现象:

    使能任何非0通道后,不对src_tag_lo赋值,Rx DMA使用的是 Rx flow0。

    因为无论是变量还是内存区,都应该由初始值或者默认值,刚好src_tag_lo的默认值是0,所以该如何不指定rx flow呢?