TI中文支持网
TI专业的中文技术问题搜集分享网站

C6670双网口同时通信

我在调试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中,运行会出错。

谢谢!

 

赞(0)
未经允许不得转载:TI中文支持网 » C6670双网口同时通信
分享到: 更多 (0)