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

关于6678网口发送的问题

您好,现在使用EVM6678LE的开发板调试网口,需要通过SGMII1口发送数据。根据数据手册中KeyStone Architecture Gigabit Ethernet(GbE) Switch Subsystem的第2.5节进行操作,并使用了开发例程提供的void KeyStone_MDIO_PHY_Set_Reg(Uint32 phyNum, Uint32 regNum, Uint16 data)函数发送UDP报文,使用Wireshark进行抓包,没有收到任何数据。有如下以及疑问:

1、 KeyStone_MDIO_PHY_Set_Reg中的形参Uint16 data是否就是需要发送的UDP报文,phyNum和regNum分别如何配置;

2、现在无法发送数据是不是还是因为配置不对;

3、如果配置正常的话,是不是就可以使用Wireshark抓到数据;

4、UDP报文最终的CRC-32是否需要自己产生?在PA这个例程中似乎没有看到CRC-32如何产生;

5、UDP报文中的CRC-16是不是即便错了数据也能发送?在PA例程中,故意将CRC-16置错,数据照样能发送,但是Wireshark软件中会提示校验有错。

    //SGMII  KeyStone_main_PLL_init(100, 10, 1);  KeyStone_PASS_PLL_init(100, 21, 2);

  KeyStone_GE_Config *ge_cfg;   memset(&ge_cfg, 0, sizeof(ge_cfg));  ge_cfg->serdes_cfg.commonSetup.inputRefClock_MHz = 312.5;

 ge_cfg->ethernet_port_cfg[1]->mode = ETHERNET_AUTO_NEGOTIAT_SLAVE;  ge_cfg->ethernet_port_cfg[1]->CPPI_Src_ID= 1;  ge_cfg->ethernet_port_cfg[1]->RX_FIFO_Max_blocks= 8;  ge_cfg->ethernet_port_cfg[1]->RX_flow_control_enable= TRUE;  ge_cfg->ethernet_port_cfg[1]->TX_flow_control_enable= TRUE;  ge_cfg->ethernet_port_cfg[1]->flow_control_MAC_Address= 0x0017EAC9F88F;  ge_cfg->ethernet_port_cfg[1]->ethenet_port_statistics_enable= TRUE;  ge_cfg->ethernet_port_cfg[1]->host_port_statistics_enable= TRUE;  ge_cfg->ethernet_port_cfg[1]->prmiscuous_mode = ETHERNET_RX_CMF_EN;

 ge_cfg->mdio_cfg->clock_div = 0;  ge_cfg->mdio_cfg->link_INT0_PHY_select= MDIO_INT_SELECT_PHY_0;  ge_cfg->mdio_cfg->link_INT1_PHY_select= MDIO_INT_SELECT_PHY_1;

 ge_cfg->RX_MAX_length= 9504;

 KeyStone_GE_Init(ge_cfg);

 Wait_PHY_link();     gpMDIO_regs->USER_GROUP[0].USER_ACCESS_REG = gpMDIO_regs->ALIVE_REG;     gpSGMII_regs[0]->CONTROL_REG |= CSL_CPSGMII_CONTROL_REG_MASTER_MASK;

    while(1)     {

     //SGMII    

  if(gpMDIO_regs->LINK_REG == 0)     

 {     

 printf("link PHY%d is NOT up\n", 1);    

  }     

 else   

   {     

 printf("link PHY%d is up\n", 1);    

  }

 for(i=0; i<sizeof(pktMatch);i++)    

  {     

 test = (pktMatch[i]<<8) | pktMatch[i+1];     

  i++;      

 KeyStone_MDIO_PHY_Set_Reg(0,0,test);

     }

十分着急,谢谢了。

Allen35065:

KeyStone_MDIO_PHY_Set_Reg 这个函数是用来配置PHY芯片的寄存器的,跟UDP包无关

ping liu1:

回复 Allen35065:

谢谢。那请问我应该使用KeyStone中的何函数使得DSP发送数据?

 我使用GE例程中的DSP_2DSP_TEST测试由DSP向PC机发送数据。例程默认的数据类型是ARP,我将其改为IPV4后无法正常发送32个数据包。

另外我所需要发送数据包的内容在何处写入,例程中好像没有体现,谢谢。

ping liu1:

回复 ping liu1:

通过修改GE例程中GE_TEST_DSP0_TO_DSP1和ETHERNET_AUTO_NEGOTIAT_MASTER,当Fill_EMAC_header(ucpBuffer, ETHERNET_IPV4_PACKET, Source_MAC_address[j],   Dest_MAC_address[j])时可以发送成功,现在最主要的问题时,我准备好的数据包改如何利用函数KeyStone_queuePush(GE_DIRECT_TX_QUEUE,    TxDescriptorTempBuffer[i]|FETCH_SIZE_64)发送,例程中并未体现数据包具体内容,非常感谢。

yuxiang li:

回复 Allen35065:

您好,我想问您一个问题:

在keystone的这个gbe中函数 Wait_PHY_link()中有while(0==gpMDIO_regs->LINK_REG&(1<<i));

但是当我查到gpMDIO_regs->LINK_REG这个寄存器在运行while之前和运行while之后都是0,但是while语句通过了,这让我很费解,还请帮忙解答一下。

我还想问下,这个phy alive和phy link的区别,这个link是板子上的phy要和其他外设的phy通信之后才算link么,当时看文档觉得有些没有理解,还想请您帮忙解释一下。

感激不尽

renyi su:

回复 yuxiang li:

@yuxiang li 我也遇到了同样的问题:

 do        {            CSL_SGMII_getStatus(macPortNum, &sgmiiStatus);        } while (sgmiiStatus.bIsLinkUp != 1);在while 之前和之后sgmiiStatus寄存器的值都是0x38,linkup位是0的情况。

你的问题是怎么解决的?

赞(0)
未经允许不得转载:TI中文支持网 » 关于6678网口发送的问题
分享到: 更多 (0)