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.

TMS320C6678 网络问题

Other Parts Discussed in Thread: TMS320C6678, SYSBIOS

 求助:

    TMS320C6678 有两个网口, 我在core0 中调用NDK 的API初始化网络,其中有一句cfgAddEntry(hcfg, CFGTAG_IPNET,  1, 0, sizeof(CI_IPNET), (UNIT *)& NA, 0),应该表示配置端口1,配置完成,程序可以正常使用网络资源。如果把上一句改为cfgAddEntry(hcfg, CFGTAG_IPNET,  0, 0, sizeof(CI_IPNET), (UNIT *)& NA, 0), 也可以正常使用。但是如果core0 调用NDK 的API初始化网络,使用cfgAddEntry(hcfg, CFGTAG_IPNET,  1, 0, sizeof(CI_IPNET), (UNIT *)& NA, 0), 而 同时core 1 调用NDK 的API初始化网络,使用cfgAddEntry(hcfg, CFGTAG_IPNET,  0, 0, sizeof(CI_IPNET), (UNIT *)& NA, 0),   在core0先启动,core1后启动时,core1 会报错:配置MAC address error.而且EMAC channel 的 id也是一样的,是什么原因啊?

 c6678的两个网口是如何同时使用的, 能不能多个cpu core 同时使用同一个网口, 请赐教。

 

  • 您好,

    根据NDK的代码及NDK目录下的doc文件说明,cfgAddEntry是用来向Entry table中添加相应的Entry,其中的第三个参数item并非端口后,标示的是Entry的信息。具体我还需看一下。至于为何cfgAddEntry在两个核上调用会报上述错误,由于我没有查到在哪一部出的错,建议可以执行到函数内部跟踪看看。

    C6678的EMAC是cppi器件,即通过Navigator进行包的管理,所以收发的数据包都是Queue来管理,可以同时使用;需要注意的是可以配置每个发送的包由指定的port发出,或者向两个port广播。

  • 您好,

      首先非常感谢您的回答。我所碰到的问题是MAC address 出错,是不是因为两个核的NDK所使用的EMAC channel 相同造成的呢?另外,我在NDK USER'S GUIDE 和 NDK software programmer's reference guide 两篇文档中好像没发现有设置EMAC channel 的API 呀。我把我的代码和错误信息贴在下面,还想麻烦您看一下,指出问题所在。

    使用的核为 CORE_0  和 CORE_1 ,两个核单独启动 即: Ipc.procSync = Ipc.ProcSync_NONE; // in file.cfg

    错误信息如下:

    [C66xx_0] EVM in StaticIP mode at 192.168.0.218
    [C66xx_0] QMSS successfully initialized
    [C66xx_0] CPPI successfully initialized
    [C66xx_0] PASS successfully initialized
    [C66xx_0] Ethernet subsystem successfully initialized
    [C66xx_0] eventId : 48 and vectId : 7
    [C66xx_0] Registration of the EMAC Successful, waiting for link up ..
    [C66xx_0] run in daemon
    [C66xx_0] receive :
    [C66xx_1] QMSS successfully initialized
    [C66xx_1] CPPI successfully initialized
    [C66xx_1] PASS successfully initialized
    [C66xx_1] Ethernet subsystem successfully initialized
    [C66xx_1] eventId : 48 and vectId : 7
    [C66xx_1] Timeout waiting for reply from PA to Pa_addMac command
    [C66xx_1] Add_MACAddress failed
    [C66xx_1] Error: Unable to register the EMAC

     

    CORE_0 网络配置代码:

    int RunUDP_sever()

     {

       HANDLE hCfg;

       CI_IPNET NA;

       IPN      IPTmp;

       int nStatus, nRecv;

       char *HostName    = "UDP_SEVER_0";

       char *DomainName  = "demo0.net";         /* Not used when using DHCP */

       char *DNSServer   = "0.0.0.0";          /* Used when set to anything but zero */

       nStatus = NC_SystemOpen( NC_PRIORITY_LOW, NC_OPMODE_INTERRUPT );

        if(nStatus != NC_OPEN_SUCCESS)

    {

     #ifdef UDP_SEVER_DEBUG

         printf("NC_SystemOpen Failed (%d)\n",nStatus);

    #endif

        goto close_n_exit;

    }

    hCfg = CfgNew();

    if( !hCfg )

    {

    #ifdef UDP_SEVER_DEBUG

         printf("Unable to create configuration\n");

    #endif

        goto close_n_exit;

    }

    /* Validate the length of the supplied names */

       if( strlen( DomainName ) >= CFG_DOMAIN_MAX ||

           strlen( HostName ) >= CFG_HOSTNAME_MAX )

       {

    #ifdef UDP_SEVER_DEBUG

           printf("Domain or Host Name too long\n");

    #endif

           goto close_n_exit;

       }

       /* Add our global hostname to hCfg (to be claimed in all connected domains) */

       CfgAddEntry( hCfg, CFGTAG_SYSINFO, CFGITEM_DHCP_HOSTNAME, 0, strlen(HostName), (UINT8 *)HostName, 0 );

    /* Setup an IP address to this EVM */

         bzero( &NA, sizeof(NA) );

         NA.IPAddr  = inet_addr("192.168.0.218");

         NA.IPMask  = inet_addr("255.255.255.0");

         strcpy( NA.Domain, DomainName );

         /* Add the address to interface 1 */

         CfgAddEntry( hCfg, CFGTAG_IPNET, 1, 0, sizeof(CI_IPNET), (UINT8 *)&NA, 0 );

         /* Manually add the DNS server when specified */

        IPTmp = inet_addr(DNSServer);

        if( IPTmp )

        CfgAddEntry( hCfg, CFGTAG_SYSINFO, CFGITEM_DHCP_DOMAINNAMESERVER, 0, sizeof(IPTmp), (UINT8 *)&IPTmp, 0 );

        /* Set debug message level */

        nStatus = DBG_WARN;

        CfgAddEntry( hCfg, CFGTAG_OS, CFGITEM_OS_DBGPRINTLEVEL, CFG_ADDMODE_UNIQUE, sizeof(uint), (UINT8 *)&nStatus, 0 );

        // UDP Receive limit

        nRecv = 8192;

        CfgAddEntry( hCfg, CFGTAG_IP, CFGITEM_IP_SOCKUDPRXLIMIT,

        CFG_ADDMODE_UNIQUE, sizeof(uint), (UINT8 *)&nRecv, 0 );

       do

       {

        nStatus = NC_NetStart( hCfg, NetworkOpen, NetworkClose, NetworkIPAddr );

     } while( nStatus > 0 );

    #ifdef UDP_SEVER_DEBUG

       platform_write ("Shutting things down\n");

    #endif

    close_n_exit:

      CfgFree( hCfg );

      NC_SystemClose();

    return 0;

     }

    static HANDLE hDaemon=0;

    static void NetworkOpen()

    {

         hDaemon = DaemonNew( SOCK_DGRAM, 0, 1062, RecvImg, OS_TASKPRIHIGH, OS_TASKSTKNORM, 0, 1 );//7//OS_TASKPRINORM

    }

    CORE_1网络配置代码:

    int UDP_Sever()
    {

        HANDLE hCfg;
        CI_IPNET NA;
        IPN      IPTmp;
        int nStatus, nRecv;
        char *HostName    = "UDP_SEVER";
        char *DomainName  = "demo.net";         /* Not used when using DHCP */
        char *DNSServer   = "0.0.0.0";          /* Used when set to anything but zero */

        nStatus = NC_SystemOpen( NC_PRIORITY_LOW, NC_OPMODE_INTERRUPT );
        if(nStatus != NC_OPEN_SUCCESS)
        {
    #ifdef UDP_SEVER_DEBUG
              printf("NC_SystemOpen Failed (%d)\n",nStatus);
    #endif
            goto close_n_exit;
        }

        hCfg = CfgNew();
        if( !hCfg )
       {
     #ifdef UDP_SEVER_DEBUG
            printf("Unable to create configuration\n");
    #endif
           goto close_n_exit;
      }

      /* Validate the length of the supplied names */
      if( strlen( DomainName ) >= CFG_DOMAIN_MAX ||
       strlen( HostName ) >= CFG_HOSTNAME_MAX )
      {
    #ifdef UDP_SEVER_DEBUG
           printf("Domain or Host Name too long\n");
    #endif
           goto close_n_exit;
      }

      /* Add our global hostname to hCfg (to be claimed in all connected domains) */
      CfgAddEntry( hCfg, CFGTAG_SYSINFO, CFGITEM_DHCP_HOSTNAME, 0, strlen(HostName), (UINT8 *)HostName, 0 );

      /* Setup an IP address to this EVM */
      bzero( &NA, sizeof(NA) );
      NA.IPAddr  = inet_addr("192.168.0.217");
      NA.IPMask  = inet_addr("255.255.255.0");
      strcpy( NA.Domain, DomainName );

      /* Add the address to interface 1 */
      CfgAddEntry( hCfg, CFGTAG_IPNET, 1, 0, sizeof(CI_IPNET), (UINT8 *)&NA, 0 );

      /* Manually add the DNS server when specified */
      IPTmp = inet_addr(DNSServer);
      if( IPTmp )
       CfgAddEntry( hCfg, CFGTAG_SYSINFO, CFGITEM_DHCP_DOMAINNAMESERVER, 0, sizeof(IPTmp), (UINT8 *)&IPTmp, 0 );


       /* Set debug message level */
      nStatus = DBG_WARN;
      CfgAddEntry( hCfg, CFGTAG_OS, CFGITEM_OS_DBGPRINTLEVEL, CFG_ADDMODE_UNIQUE, sizeof(uint), (UINT8 *)&nStatus, 0 );

      // UDP Receive limit
      nRecv = 8192;
      CfgAddEntry( hCfg, CFGTAG_IP, CFGITEM_IP_SOCKUDPRXLIMIT,
          CFG_ADDMODE_UNIQUE, sizeof(uint), (UINT8 *)&nRecv, 0 );

      do
      {
       nStatus = NC_NetStart( hCfg, NetworkOpen, NetworkClose, NetworkIPAddr );
      } while( nStatus > 0 );

    #ifdef UDP_SEVER_DEBUG
      platform_write ("Shutting things down\n");
    #endif

    close_n_exit:
          CfgFree( hCfg );
          NC_SystemClose();
      return 0;
    }

    static HANDLE hDaemon=0;
    static void NetworkOpen()
    {
        // Create our local server
        hHello = DaemonNew( SOCK_DGRAM, 0, 7, dtask_udp_hello,  OS_TASKPRINORM, OS_TASKSTKNORM, 0, 1 );
                        
    }

  • 您好

    请单步跟踪nimu_eth.c中

    Add_MACAddress函数和paReturn_t Pa_addMac函数 获取具体失败的信息

    比如Queue资源不够 等等

    谢谢!

  • weifeng guo您好,

    请问该问题解决了么,能否写一下你是如何解决的,非常感谢!

  • 非常感谢 Andy Yin 的关注:

      这个问题还没解决,Thomas Yang 提的方案我会尝试一下, 解决的话我我会及时回复,分享的。

    顺便问一下,如果CORE_0 使用网络端口0, CORE_1使用网络端口1,那么在调用NDK的API 配置网络时,有没有哪个参数是用来指定使用的端口号的?

    再次感谢!

  • 您好,

    在使用不同的port发送包时,在应用层要做的是配置switch及ALE entry,使携带不同目的地址的包经过匹配后发往不同的port,而不是直接通过操作switch port。

  • 您好,请问:

        1.在使用NDK进行网络编程时,当core 0 调用NC_NetStart(hcfg,  NetworkOpen, networkClose , NetWOEKiPaddr );时,该函数是不是会自动对6678的两个网络物理端口进行初始化。如果该函数会对两个物理端口初始化,那么其他核要使用网络资源时,还要调用NC_NetStart()函数吗?

     2.在pdk_c6678\ti\drv\\pa\example\multicoreExample中对多核同时使用网络资源的描述是:由core 0 完成对QMSS

    CPPI Ethernet switch subsystem + MDIO + SGMII的初始化,并创建发送队列,而其他核在使用网络资源时就不用再做同样的初始化,只是创建接收队列.  那么在使用NDK编程,且多个核同时使用网络资源时,如果程序仅仅使用NDK的API,类似的步骤该如何实现呢?

    3.在多个核同时使用网络资源时,仅仅通过NDK的API能否实现该目的,是否要调用一些NDK API以外的驱动函数来实现呢?

     非常期待您的答复

         非常感谢!

  • weifeng guo,

       据我所知目前release的NDK(最新2.0.5.17)还不支持多核,当然你可以自己进行多核的移植。看了上面你的尝试,我还没明白你移植NDK到多核的原因什么?上面的尝试中,你在core1 再次增加本身的MAC地址到PA的LUT表(Pa_addMac core 0已经做过一次),所以PA 会发现MAC entry重复而失败。你是想不同的core用不同的MAC地址和独立的协议栈么?如果这样,逻辑上可以把C6678看成独立的8个DSP来用,而你应该为不同的core配置不同的MAC地址。

    在移植之前,建议根据你的实际需求规划好几个问题:

     1.你的产品应用是否真的需要多个核共同处理太网包,应用场景是要求尽可能高的网络带宽(pps or bps?)还是只要求较低的数据带宽但是复杂的数据处理。如果你的应用要求尽可能高的网络带宽,则完全可以弃用NDK而直接使用底层驱动收包,当然这种办法丧失了NDK中所支持的丰富协议。如果只要求较低的数据带宽,则可以仅用单核跑NDK,从协议栈收到包后用其他的核进行数据处理。

     2. 如果你已经确定要多核处理以太网包,则需要规划不同的核在处理以太网包中的如何划分工作。是完全等同,每个核依次收1~n个包来负荷分担,还是根据不同的MAC地址,IP地址,VLAN ID,包类型,协议类型或者是端口号进行处理?

     3. 两个SGMII端口功能上有不同的划分呢,还是等同的?

     如果我们能理解你的应用场景,才能给你更好的建议。

  • Marvin Liang,

      非常感谢您的回答和建议。我的初衷是6678中的一个核专注于接收数据,另一个核专注于发送数据。当前的应用需求是:两个工业相机通过网络采用UDP协议向一个TMS320C6678传送图像数据(总带宽要求达到 60MB/s),而 C6678在对图像完成处理后,将结果图像通过网络采用TCP协议传给PC机。  由于一幅图像的大小为1.5MB,若接收缓冲区为6幅图像,那么就需要9MB的存储空间,很显然,接收缓冲区要放到外存。那么CPU在接收网络数据时,应该是忙于将数据传到外存(目前我还不清楚在使用NDK编程时,能否使用EDMA实现该数据的传输功能),所以希望由另一个核将结果图像发送出去,以免干扰图像数据的接收。至于多个核如何协作处理以太网数据包,要根据具体的处理算法来定。

      NDK的文档中确实没有提到其在多核的应用,但也没明确说不能应用于多核,而我又接触多核DSP时间不长,所以有许多困惑,而您回答让我对6678网络这块又有了更好的了解,再次真诚的感谢!

  • weifeng guo,

         根据你的应用场景,数据量较大60MBps=480Mbps,。传输图像,相信是大包为主,但480Mbps的流量对于NDK整个协议栈来说开销不会小,所以这是你为什么选择多核跑NDK的原因?

      因为NDK提供了较为完整的TCP/IP协议栈,所以协议栈本身对内核MIPS有消耗。你的应用似乎只需要UDP和TCP?如果你们要求的网络协议比较单一,可否不用NDK,自己实现简单的UDP/TCP 封装/剥离 功能?

      如果这样,你们可以实现如下比较高效的收发路径:

      RX: SGMII/CPSW/NETCP--(PKTDMA)->SL2--(EDMA)->DDR

         TX: DDR--(PKTDMA)-->NETCP/CPSW/SGMII

      当然,你可以继续移植NDK到多核,只是效率相对较低,但不用自己开发代码来处理协议。因为我不清楚你们多个核如何协作处理以太网数据包,所以不能给你更多建议。

  • weifeng guo 你好。我现在遇到只能用一个网络通信。我是在mcsdk/examples/ndk/client工程上修改了sgmii和cfgaddentry。现在只能网口1通信。网口0不能。还请你指导一下。或者发点资料学习一下。谢谢。我的qq379723321;

  • bomer 你好,

       不知道你用的是6678开发板还是自己做的板子。TMDXEVM6678L 开发板上, MAC1是实际连接网口的,MAC0没有实际连接在网口上。你可以看下原理图。

  • weifeng guo谢谢你的回答。是自己开发的板子。有双网口。用例子只能网口1通信。我在例子上修改了sgmii初始化了sgmii0和sgmii1但是还是只能网口1通信。程序都能初始化通过。今天我查了一下。在接了网口0但没接网口1的情况下那个网络中断计数寄存器一样的有中断产生。现在我查不出这两个网口初始化时要注意哪些问题。才能使网口0正常通信。还请你指导指导。我的qq号379723321。谢谢了。问题棘手。

  • 问题以解决。要修改网络接口管理单元的库,nimu。在EMACInit_Core函数中有设置发送接口配置的信息。这个函数是隐形的被NDK调用。所以刚开始比较难找到相应的位置。

  • 请问具体是修改哪些内容?求指导,谢谢

  • 你好,我在C6678上测试SGMII1口,外接88e1111芯片,使用TI的helloword例程,调试时候总是报错

    [C66xx_1] eventId : 48 and vectId : 7 [C66xx_1] Timeout waiting for reply from PA to Pa_addMac command [C66xx_1] Add_MACAddress failed [C66xx_1] Error: Unable to register the EMAC

    请问你是怎么解决的?非常棘手的问题,谢谢

  • 这个错误只有在NetCP/PA没有正常初始化的情况下才会发生。请问做这个测试前,C6678 EVM的初始化gel正常运行了吗?如果有的话,请检查程序中,PA初始化的过程是否都成功了?

  • 使用的是TI提供的C6678的gel文件,修改了PLL初始化部分(这些其他接口都用过,没有问题)

    gel文件打印

    [C66xx_0] PA successfully initialized

    [C66xx_0] [C66xx_0] TCP/IP Stack 'Hello World!' Application

     [C66xx_0] [C66xx_0] PASS successfully initialized

    [C66xx_0] Ethernet subsystem successfully initialized

     [C66xx_0] Ethernet eventId : 48 and vectId (Interrupt) : 7

    [C66xx_0] Timeout waiting for reply from PA to Pa_addMac command

     [C66xx_0] Add_MACAddress failed

    [C66xx_0] Error: Unable to register the EMAC

     

    看着PA是初始化成功的,这个使用的是ndk方式,pa初始化调用的都是库函数,怎么单步跟踪?

  • 参考附件5.6.3节,检查寄存器0x2000008,是否为0?如果为0则是软件发送的配置包有问题,如果你是用的TI默认代码
    请检查是否在将配置包送给PA之前做了cache writeback?

    另库函数同样可以跟踪,加-g重新编译PA LLD库。目前你暂时不用跟踪库函数,你可以在发送配置包前(push之前),用断点检查该配置包的描述符和buffer是否与预期一致,有无cache一致性问题。

    Keystone I以太网子系统调试手册.pdf
  • 你好,大概十分之一情况下是可以的和pc通信的,可以接收pc的数据。尤其是第一次上电后基本可以连接上。不断电再次重新调试该工程,都不能注册eMac。你说的查看给pa发送的配置包,具体看哪里啊。注册emac的是nc_netstart函数调用的,已经是封装的接口了。希望可以详细说明下操作,谢谢
  • Hi,

        您提到"第一次上电后基本可以连接上",不断电再次重新调试该工程则有问题应该是正常的。请问您用的MCSDK版本和PA LLD版本是多少?  请参考PA LLD 2.0.1.3及以后版本的example,从这个版本以后,我们才支持restartable.

    Best Regards.

       Marvin

      

  • 我用的版本是mcsdk_2_01_02_06,pdk_C6678_1_1_2_6,ndk_2_21_01_38。程序路径是C:\ti\mcsdk_2_01_02_06\examples\ndk\helloWorld。编译后调试打印信息 [C66xx_0] TCP/IP Stack 'Hello World!' Application

     [C66xx_0] [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] Service Status: DHCPC : Enabled : : 000

    [C66xx_0] Service Status: DHCPC : Enabled : Running : 000

    [C66xx_0] Service Status: DHCPC : Enabled : Fault : 002

    好像还是不支持上电后多次调试。而且用网络调试助手UDP连接成功后,发送收据没有收到

  • 是的,这个版本不支持restartable。不过理论上不需要下电,需要从CCS做system reset->gel 初始化->下载& run

  • 能否把支持的发给我?或者怎么在ccs上复位?是使用那个像芯片一样的按钮,提示是cpu reset? 运行完后打印 service status:dhcp:enable: 000 service status:dhcp:enable:running:000 service status:dhcp:enable:fault:002 这个是什么问题?
  • 不是CPU reset,  在CCS菜单中找run->reset->system reset

     

    pa.zip
  • 你好,遇到另一个问题,板子第一次上电时候ddr3初始化过不了,见附件,非第一次加电调试都可以通过,请问什么问题。谢谢
  • 是EVM板吗?建议你新开一个问题

  • 你好,我重新开了个贴,能否帮助解决下?用的是自己的板子,问题链接

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/63679.aspx

    非常感谢

  •         NDK实测的网络带宽不高且占有较高的CPU利用率,实际测试NDK在单核只接收的情况下,NDK的带宽只有30MB/s左右。通过分析NDK的源码我们发现NDK有三大缺点:
     (1)NDK接收网络数据流时,首先将数据缓存到网络接收描述符里面,然后拷贝到NDK的缓冲区,最后再将其拷贝到应用程序的缓存里面。这种多次拷贝的方式效率低下,同时占用较多的内存,CPU及总线资源。
     (2)NDK没有充分利用PA的性能。接收数据的时候只是做了广播MAC地址的判断,发送数据的时候没有使用PA进行校验和计算。
     (3)不支持双网口编程。
      因此,需要放弃使用NDK,自己重写和修改了网络协议栈,包括移植LWIP协议包,具体的工作如下:    
           在接收GIGE相机数据的时候,我们充分利用了PA的性能,最终触发中断的网络包就是我们实际需要的数据包。如果数据包不符合要求,PA就会直接将其丢弃,因此不用CPU去对数据包做判断,这样就降低了CPU的负荷。同时我们直接获取网络接收描述里面缓存的数据,这样就减少了对内存的使用量。因此,DSP能够做到实时接收相机发送过来的数据。 
       在使用LWIP将数据发送给PC的时候,所有网络包的校验和计算都是通过PA进行计算的,这样就不用CPU来参与计算。我们实际测试,在单核只发送的UDP包的情况下,网络带宽能到达到110MB/S。这样我们就能够做到实时发送相机传递过来的数据。进过实际测试,DSP同时收发数据能够达到65MB/S。通过充分利用DSP硬件资源,精心的软件规划及系统配置使得DSP能够做到实时接收相机发送过来的数据。

           最终实现了基于TMS320C6678的双网口的双相机同时高速接入。



  • 这是一个好消息,非常感谢您的经验共享。TI提供的NDK在所有的C66x芯片上都可以运行并处理多种协议,但TI并没有要求其的性能最优。对于某种特定的应用,需要直接通过PA LLD来配置协处理器达到提升性能的结果,您的做法非常正确!

  • 嗯,我们现在已经把tms3206678的网络调试的非常成功了,可以全速接入高速高分辨率的相机图像,如basler ace系列相机,dalas相机等。

    具体可看:

    http://www.casql.com/chanpin/FMC6678.html

  • 您好,请问“Timeout waiting for reply from PA to Pa_addMac command”的问题是怎么解决的呢?我现在也遇到了同样的问题,不知道可否方便告知您是怎么解决的呢?谢谢

  • 您好,你说的很对。但是我现在刚刚开始调试,对NDK、网络传输一点都不懂。我现在将例程导入,只能build成功。在debug时 ,只显示DDR初始化成功。load .out 文件后,程序就一直处于running状态中,没有任何输出显示。相关的寄存器中都显示error,无法读取其值。winAPPs中的helloworld.exe打开后只闪一下就退出了。请问,我现在应该怎么改程序或是参数设置?谢谢

  • 您好,

    EMACInit_Core函数是库函数,修改后请问CCS5.1怎么重新编译生成库文件?

    谢谢!

  • 碰到同样的问题mac地址不能正常添加,和上述情况一致,请问您所说的PA这个版本(pdk_C6678_1_1_2_6里的PA LLD)不支持restartable,这个有新版本吗?或者单独的PA LLD,如果有,就我之前的程序(基于pdk_C6678_1_1_2_6)怎么适配新版本PA LLD

  • 你好,我遇到的情况是这样的。我用的是C6670。PA 初始化成功。那应该就是Netcp初始化没有成功,可是程序中并没有出现Netcp初始化函数啊?

    [C66xx_0] QMSS successfully initialized
    CPPI successfully initialized
    PA successfully initialized

    TCP/IP Stack 'Hello World!' Application


    TCP/IP Stack 'Hello World!' Application

    PASS successfully initialized
    Ethernet subsystem successfully initialized
    Ethernet eventId : 48 and vectId (Interrupt) : 7
    Timeout waiting for reply from PA to Pa_addMac command
    ti.sysbios.heaps.HeapMem: line 367: assertion failure: A_invalidFree: Invalid free
    xdc.runtime.Error.raise: terminating execution

    我还有一个问题还麻烦你帮我解惑一下。pc是可以通过网口(UDP)把数据发送到DSP,那能不能直接读取DSP某个内存地址的数据呢?有没有这样的机制或函数呢?

  • @gongyan li 能否参考下,谢谢。

  • 你好,请问你的Timeout waiting for reply from PA to Pa_addMac command这个问题解决了吗?

  • 两个网口同时使用还有组播功能我已经实现,并有DEMO代码,至于多个core没试过。如果有需要可以联系我

  • 您好,能否分享下您的demo代码,邮箱 873616296@qq.com