我在调试evm6670的以太网口,用到MCSDK下ndk的hello_world和client的例子。
通过修改nimu_eth.c,实现了sgmii0或sgmii1任意一个借口首发数据。但是,要求同时用sgmii0和sgmii1,应该做什么样的修改呢,谢谢!
Kevin Cai:
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
};
谢谢!
Achilles:
回复 Kevin Cai:
请问怎么修改NIMU层,使得2个sgmii分别配置有2个独立的MAC和IP地址?
Kevin Cai:
回复 Achilles:
Hi, 您好!
附件是一些需要修改的地方 ,供参考:
谢谢
qian cui:
回复 Kevin Cai:
你好,你们提供的TI_STK_20140123例子中的GE网络例子,这个不需要配置DSP的IP地址和端口号什么的么?如果使用这个例子,通过上位机给DSP发送数据,需要ip和端口号的,上位机用的是socket通信。
qian cui:
回复 Kevin Cai:
你好,你们提供的TI_STK_20140123例子中的GE网络例子,这个不需要配置DSP的IP地址和端口号什么的么?如果使用这个例子,通过上位机给DSP发送数据,需要ip和端口号的,上位机用的是socket通信。如果不配置端口好,PC机可以给DSP发送数据么,希望解答?
之前使用hua例子调试,可以ping通了,但是不知道端口号哪里配置的?
按照你的说明SGMII1已经改为cable连接模式,但是用wireshark在PC上抓不到包,抓包的过滤条件使用的是PC机的ip地址,不知道是否是配置的问题?
谢谢
Kevin Cai:
回复 qian cui:
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
谢谢
qian cui:
回复 Kevin Cai:
如果pc通过socket与DSP通信,是否类似STK的例子不能使用,因为socket需要ip。只能使用ndk?需要学习什么相关文档?
我用6678,初始化SRIO时候,初始化完成后,检测端口是否ok,遇到端口没有ok的情况,这种情况出现的概率大概10%左右,多数时候还是可以通过的。请问是什么原因,怎么定位解决,谢谢
Kevin Cai:
回复 qian cui:
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的寄存器保存下来, 对比一下差别
谢谢
qian cui:
回复 Kevin Cai:
你好,现在使用helloword的网口测试代码,时钟等都按照要求修改了,调试的时候总是给出unregister the EMAC,请问这个是什么问题,怎么解决?
helloword例程使用的是gel文件初始化,如果不希望在gel里初始化,那这些初始化操作应该放在那里调用?是main函数里的bios_start之前还是线程里面?
谢谢
Kevin Cai:
回复 qian cui:
Hi, 您好!
能不能单步跟踪一下,出现unregister the EMAC的时候是在哪个文件,哪行代码?方便的话麻烦把出现错误时的文件名和出错前的代码贴出来看一下
是在bios_start之前,因为gel初始化了很多芯片相关的设置,如PLL等;
另外请检查一下,如果您的代码是否放到DDR的(看您cmd文件的代码段是否在DDR),如果是在DDR, 那么您需要在gel文件里初始化DDR, 不能在main里初始化。 否则您在加载代码时DDR还未正确初始化, 此时代码是不能正常加载到DDR中,运行会出错。
谢谢!