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.

C6670双网口同时通信



我在调试evm6670的以太网口,用到MCSDK下ndk的hello_world和client的例子。

通过修改nimu_eth.c,实现了sgmii0或sgmii1任意一个借口首发数据。但是,要求同时用sgmii0和sgmii1,应该做什么样的修改呢,谢谢!

  • Hi, 您好!

    您需要修改:

    1. EmacSend函数:

       Cppi_setPSFlags (Cppi_DescType_HOST, (Cppi_Desc *)pCppiDesc, (1<<gTxPort)); 

       gTxPort需要修改为您想发包的EMAC端口(0或1),

     

    2. EmacStart函数:

       PA只配了一个MAC地址{ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15 }, 因此两个端口用的都是同一个MAC地址

    ---------------------------------------------------------------------------------------------------------------------------------

    另外, 在下面的链接中,有我们开发的以太网程序, 可用于两个网口同时使用.  KI_STK_20140123包含了代码及文档

     

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

     

    您需要修改GE_Test.c中的下列变量:

    GE_Test_Data_Path test_data_path= GE_TEST_DSP0_TO_DSP1;

    Ethernet_Mode ethernet_mode = ETHERNET_AUTO_NEGOTIAT_SLAVE;

     

    /* 如果两个网口都是用网线连接到外部网络, 设置成GE_PORT_CABLE_CONNECT; 如果是内部环回,设置成GE_PORT_NO_CONNECT  */

    GE_Port_Connection port_connect[GE_NUM_ETHERNET_PORT]=

    {

                    GE_PORT_CABLE_CONNECT, //SGMII port 0         

                    GE_PORT_CABLE_CONNECT  //SGMII port 1

    };

    谢谢!

     

     

     

  • 请问怎么修改NIMU层,使得2个sgmii分别配置有2个独立的MAC和IP地址?

  • Hi, 您好!

    附件是一些需要修改的地方 ,供参考:

    谢谢

     

     

    Nimu修改成支持多个MAC_IP.docx
  • 你好,你们提供的TI_STK_20140123例子中的GE网络例子,这个不需要配置DSP的IP地址和端口号什么的么?如果使用这个例子,通过上位机给DSP发送数据,需要ip和端口号的,上位机用的是socket通信。

  • 你好,你们提供的TI_STK_20140123例子中的GE网络例子,这个不需要配置DSP的IP地址和端口号什么的么?如果使用这个例子,通过上位机给DSP发送数据,需要ip和端口号的,上位机用的是socket通信。如果不配置端口好,PC机可以给DSP发送数据么,希望解答?

    之前使用hua例子调试,可以ping通了,但是不知道端口号哪里配置的?

    按照你的说明SGMII1已经改为cable连接模式,但是用wireshark在PC上抓不到包,抓包的过滤条件使用的是PC机的ip地址,不知道是否是配置的问题?

    谢谢

  • Hi, 您好!

    STK包含了以太网PHY, MAC层的功能, 没有包含IP层及以上协议层的功能。 在STK中不需要配置IP地址和端口号

    如果不配置端口号,DSP可以收到发自PC的数据, 但是由于STK没有对等的协议层(IP层及以上),DSP不会应答报文。

    socket连接没有建立, PC不能通过 socket方式与DSP通信;但是可以以底层报文的形式(MAC报文或IP报文)与DSP通信

    hua的例子中,您可以在socket建立的过程中查找端口号信息

    SGMII1您可以不使用过滤条件, STK中使用了类似0x888888000***的MAC地址,如果在wireshark收到0x888888000***为地址的报文,即是发自DSP

    如果您要使用过滤条件,需要修改STK发送的内容,使其包含目的/源IP,目的/源MAC,并且目的IP,目的MAC与PC的IP, MAC一致。  

    现有的STK发送内容包含了目的/源MAC, 不包含IP

    谢谢

     

  • 如果pc通过socket与DSP通信,是否类似STK的例子不能使用,因为socket需要ip。只能使用ndk?需要学习什么相关文档?

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

  • Hi, 您好!

    如果要用socket通信, 您可以在STK的基础上, 加入上层协议代码(IP层及以上),您也可以使用ndk

    学习ndk,您可以参考如下文档,您可以在ndk安装目录下找到
    [NDK_INSTALL_PATH]\ndk_*_**_**_**\TI Network Developer's Kit (NDK)User's Guide  (spru523h)

    [NDK_INSTALL_PATH]\ndk_*_**_**_**\TI Network Developer's Kit (NDK)  API Reference Guide (spru524h)

    [NDK_INSTALL_PATH]\ndk_*_**_**_**\TMS320C6000 Network Developer's Kit (NDK) Support Package Ethernet Driver Design Guide

     

    SRIO的问题,您可以把通过/不通过两种情况下SRIO的寄存器保存下来, 对比一下差别

    谢谢

     

  • 你好,现在使用helloword的网口测试代码,时钟等都按照要求修改了,调试的时候总是给出unregister the EMAC,请问这个是什么问题,怎么解决?

    helloword例程使用的是gel文件初始化,如果不希望在gel里初始化,那这些初始化操作应该放在那里调用?是main函数里的bios_start之前还是线程里面?

    谢谢

  • Hi, 您好!

    能不能单步跟踪一下,出现unregister the EMAC的时候是在哪个文件,哪行代码?方便的话麻烦把出现错误时的文件名和出错前的代码贴出来看一下

    是在bios_start之前,因为gel初始化了很多芯片相关的设置,如PLL等;

    另外请检查一下,如果您的代码是否放到DDR的(看您cmd文件的代码段是否在DDR),如果是在DDR, 那么您需要在gel文件里初始化DDR, 不能在main里初始化。 否则您在加载代码时DDR还未正确初始化, 此时代码是不能正常加载到DDR中,运行会出错。

    谢谢!

     

  • 你好,helloword使用的是ndk,出错的应该是在库里面,请问这个怎么调试跟踪?

    看*.cfg文件里的配置,有放到ddr3里面的。如果使用gel文件初始化,那么生成的.out文件是否包含gel文件里的初始化内容?因为最终是要通过emif16启动。

    /* This is the default memory heap. */ Memory.defaultHeapInstance  =   Program.global.heap0; Program.sectMap["sharedL2"] = "DDR3"; Program.sectMap["systemHeap"] = "DDR3"; Program.sectMap[".sysmem"]  = "DDR3"; Program.sectMap[".args"]    = "DDR3"; Program.sectMap[".cio"]     = "DDR3"; Program.sectMap[".far"]  =  "DDR3"; Program.sectMap[".rodata"]  =  "DDR3"; Program.sectMap[".neardata"]  =  "DDR3"; Program.sectMap[".cppi"]  =  "DDR3"; Program.sectMap[".init_array"]  =  "DDR3";

  • Hi, 您好!

    我查看的是ndk_2_22_02_16版本,没有找到unregister the MAC的打印。 ndk的代码您应该都能看到

    如果使用gel文件初始化,那么生成的.out文件包含gel文件里的初始化内容。

    谢谢!

     

  • 使用的gel是TI带的6678的gel文件,我只是根据自己的需要修改时钟等参数,打印如下

    [C66xx_0] PA successfully initialized

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

    xx_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

     

     

    路径C:\ti\pdk_C6678_1_1_2_6\packages\ti\transport\ndk\nimu\src

    我查到了在nimu_eth.c文件里,函数EMACInit_Core,部分代码

    /* Init PA LLD */    

     if (Init_PASS () != 0)    

     {      

        platform_write ("PASS init failed \n");        

        return -1;    

    }    

    else    

     {    

         platform_write ("PASS successfully initialized \n");    

     }

     /* Initialize the CPSW switch */    

     if (Init_Cpsw ((uint32_t) ptr_device->mtu,  ptr_pvt_data->pdi.bMacAddr) != 0)    

     {    

         platform_write ("Ethernet subsystem init failed \n");        

         return -1;    

    }    

     else    

     {      

        platform_write ("Ethernet subsystem successfully initialized \n");    

    }

     /* Register the device with NIMU */    

     if (NIMURegister (ptr_device) < 0)    

    {    

         platform_write ("Error: Unable to register the EMAC\n");        

         return -1;    

    }

    库代码怎么跟踪?

    如果gel文件里的初始化不能包含在.out里面,那么我该怎么做?所有的数据都不要放到DDR3中?让后将初始化放到main函数里?具体放到哪个位置?

    谢谢

     

  • Hi, 您好!

     

    NIMURegister函数是在Nimu.c文件里定义的,您能单步跟踪一下是哪一行出错

    您能不能把数据放到L2或者MSMC, 谢谢

  • 我查看了下,调用的入口是nc_netstart函数,这个函数是ndk封装的,f5无法单步调试。请问怎么才可以调试? 现在的情况是十分之一概率可以通过,尤其是第一次上电后成功概率更大,还可以接收pc的数据。所以需要解决这个问题,比较棘手,谢谢
  • 你好,按照你说的将存储空间映射到l2或msmc中,结果编译出错,见附件,谢谢
  • Hi, 您好!

    您方便贴一下您的.cmd文件吗?通过这个文件可以指定存储空间。

    谢谢!

  • BIOS的工程里面不需要添加.cmd文件,添加了编译就出错。该工程编译后会自己生成,有一个*.cfg文件,里面有存储空间映射,见附件。默认的话大多数都放到DDR3,我改为L2SRAM或者MSMC就报错。错误之前通过附件发送了。请问怎么修改,谢谢

    helloWorld111.cfg
  • 你好,问个srio的问题,6678的srio通过1848switch配置路由表做回环,上电第一次可以回环,,不下电再调试就不能收到数据了。请问是什么问题? 还有一个ddr3初始化的问题,第一次上电通过不了,不下电再次调试就可以初始化成功。卡到DDR_STATUS寄存器值不是4,没有准备好 求指导,谢谢
  • 您好,

    nimu_eth.c文件是库文件,请问怎么修改编译生成新的库函数,谢谢

  • 您好,请问您的问题解决了吗?我遇到了和您一样的问题,方便留一下联系方式交流一下吗?hitzhaoliangyu@126.com 谢谢了,期待您的回复