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.

6678中QMSS、PKTDMA(CPPI)、PA与网口通信之间的关系

    在MCSDK目录下关于NDK的例子helloworld和client之中都涉及到了对QMSS、CPPI和PA的初始化,我之前看过多核导航器、PA和NETCP的文档,对它们基本内容都有一定的了解。但对它们之间的关系还不是很清楚,请问:是否凡是通过网口通信的程序必须都要用到QMSS、CPPI和PA?另外,我写过一个工程,没有用到任何关于QMSS、CPPI和PA的代码,仅仅做了一些ndk最常用的配置,利用套接字就实现了EVM与PC机的双向通信,请问这种情况下是否默认使用了QMSS、CPPI和PA?

  • 6678 的EMAC是基于Navigator的外设,所以必须配置好QMSS, CPPI,然后才能进行正常的以太网数据收发,对于PA如果不用可以bypass,这样的话PA可以不用配置。

  • 您好!

             我现在使用的是OMAPL137的dsp,该dsp并非在TI公司买的,现在我想要实现NDK的功能,该如何写gel文件啊,谢谢!

  • 关于OMAP的问题请发到OMAP子论坛,谢谢配合。

  • 你好,我刚学这块,遇到一些问题。网口是同事在调试,我需要处理网口接收的数据。问题是网口接收的数据存储在那里?以及DSP核怎么知道有数据来了?接收数据前DSP核什么状态,是通过while循环检测是否有数据到来还是通过中断关联相应的处理函数?

    还有这方面需要看哪些文档,希望解答,非常感谢

  • 你好,

    1、网口接收的数据存储在哪里,取决于navigator中所使用的RX free descriptor所指向的buffer所处的位置,可以是SL2,LL2,DDR3。这需要进行设置,因为6678中的以太网数据包都是由navigator通过队列和描述符的方式进行管理和搬运。

    2、navigator中的QMSS有accumulator channel可以产生中断通知CPU,它将所监控的队列中的描述符以ping-pong buffer的形式读出,buffer满即产生中断。这样可以告知CPU与accumulator  channel相对应的队列中是否有数据进来。当然你也可以通过轮询的方式,通过读响应队列的寄存器来判断队列中描述符的数量。

    3、不知道你所使用的网口通信是基于SYS/BIOS下的NDK,还是完全由底层驱动实现。如果是基于NDK,有很多API函数可以解决你的问题,如果完全是由底层驱动实现那必须要了解多核导航器(Multicore Navigator)和千兆以太网子系统(GbE Switch),甚至是包加速器(Packet Accelerator)。请到TI 6678主页下载这些文档。

  • 我现在调试网口使用的是mcsdk提供的hua/6678的例子,使用的应该是ndk,这方面需要看那些相关的文档?是否用ndk实现起来简单一些?使用ndk是否也要配置你在1中说的那些buffer和2中说的相关中断等?这几天看了用底层驱动写的网络的例子,需要自己配置各个队列及buffer以及中断出发的accumulation长度等。

    不管那种方式,是否都需要配置dsp的ip和端口?我们是通过上位机连接dsp 的,上位机给dsp发送数据,通过socket,需要端口号和ip

    谢谢

  •      你好,

           NDK是一个网络协议栈,包含了丰富的网络通信协议,它与具体数据的发送与接收的过程没有直接关系。在你所说的例程里含有PDK中对CPPI,QMSS和PA的驱动函数,它们完成了网口通信所需要的以太网外设的初始化与控制,具体可以参考PDK中相应的库函数的原代码。是否需要端口号和IP取决于你采用的通信协议,如果你需要使用UDP或者TCP协议进行通信,那使用NDK配合CPPI,QMSS和PA的驱动函数将会很方便。如果只是为了点对点进行双向数据传输,可以不需要IP以及IP层以上的协议,直接进行以太网帧的收发就可以,这样的话就可以不依赖NDK直接用相关驱动控制以太网外设进行数据收发即可。个人建议你采用你现在的开发方式,有例程可以直接参考和修改。

  • 我们这边要使用socket通信,是否需要学习ndk?是的话需要看什么相关文档?

    我用6678,初始化SRIO时候,初始化完成后,检测端口是否ok,遇到端口没有ok的情况,这种情况出现的概率大概10%左右,多数时候还是可以通过的。请问是什么原因,怎么定位解决,谢谢

  • 你好,

            使用套接字的话,最好使用NDK。配合NDK,在CCS上的网络编程几乎与在微软Visual Studio平台上的方法完全一致。所以只需要参考windows下的利用套接字进行网络编程的代码即可。

           你是使用SRIO与FPGA进行通信吗?这种情况多数可能是SRIO的物理连接存在问题,无法及时建立可靠的SRIO的物理连接。

  • 你好,如果要看ndk,需要看什么相关文档么?使用ndk,数据接收的时候是怎么触发DSP核处理的,以及数据放到哪里?

    SRIO物理连接有问题,是寄存器配置不正确还是?需要关注哪方面?

    谢谢

  • 你好,我刚开始学习这块,使用的是ti的helloword网络代码例子(和你用的一样),调试时候经常会出现unable to register the EMAC,请问这是什么问题?怎么解决? QMSS和CPPI和PA是必须的么,它们有什么用?

    怎么利用ndk自己建立工程,使用XGCONF或者不使用?有没有相关的指导,看了user guide,还是有点晕,自己建立的工程不可以使用。方便的话能否qq 329354682

    非常感激,谢谢啦。

  • 你好,我在调试6678 GE的时候 PC向dsp发送一定包数之后,就发送不了了 请问这是什么原因导致的。