您好,现在使用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);
}
十分着急,谢谢了。