我在调试evm6670的以太网口,用到MCSDK下ndk的hello_world和client的例子。
通过修改nimu_eth.c,实现了sgmii0或sgmii1任意一个借口首发数据。但是,要求同时用sgmii0和sgmii1,应该做什么样的修改呢,谢谢!
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.
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
};
谢谢!
你好,你们提供的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
谢谢
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的寄存器保存下来, 对比一下差别
谢谢
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";
使用的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函数里?具体放到哪个位置?
谢谢
您好,请问您的问题解决了吗?我遇到了和您一样的问题,方便留一下联系方式交流一下吗?hitzhaoliangyu@126.com 谢谢了,期待您的回复