您好!
我们有一个使用 TM4C129ENCPDT 的以太网网络产品。 我们需要找出原因来解决这个问题。
设备有时会在接收和传输以太网数据包方面变得不可靠。
我们有一个测试设备、能够不断通过以太网向其他设备发送测试数据包。 被测器件只需退回测试数据包、以便测试器件可以比较发送和接收的数据包数量。 如果这两个数字不匹配、则表示数据包丢失。
当问题发生时、我们发现在测试过程中有很多丢失的数据包。
一个有趣的现象是、在不重置器件(即固件重置)的情况下、我们可以从外部触发器件中的一个过程(通过命令)。 此过程将重置以太网端口。 此后、问题将被清除、并且不会检测到丢失的数据包。
问题似乎与固件无关、而与以太网控制器硬件有关。 我的问题是、为了防止固件出现以太网 MAC 内部可能会出现什么问题?
可以解决此问题的步骤如下:
空
InitializeEthernet()
{
//
//启用并重置以太网模块。
//
SysCtlPeripheralEnable (SYSCTL_Periph_EMAC0);
SysCtlPeripheralEnable (SYSCTL_Periph_EPHY0);
SysCtlPeripheralReset (SYSCTL_Periph_EMAC0);
SysCtlPeripheralReset (SYSCTL_Periph_EPHY0);
//
//等待 MAC 准备就绪。
//
while (! SysCtlPeripheralReady (SYSCTL_Periph_EMAC0){
WdogTemporyFeed ();
}
//
//配置为与内部 PHY 一起使用。
//
EMACPHYConfigSet (EMAC0_BASE、(EMAC_PHY_TYPE_INTERNAL | EMAC_PHY_INT_MDIX_EN | EMAC_PHY_AN_100B_T_FULL_DUPLEX));
//
//重置 MAC 以锁存 PHY 配置。
//
EMACReset (EMAC0_BASE);
//
//初始化 MAC 并设置 DMA 模式。
//
EMACInit (EMAC0_BASE、SysClock、EMAC_BCONFIG_MISCD_BURST | EMAC_BCONFIG_PRIORY_FIXED、4、4、4 0);
//
//设置 MAC 配置选项。
//
EMACConfigSet (EMAC0_BASE、(EMAC_CONFIG_FULL_DUPLEX | EMAC_CONFIG_CHECKSUM_OFFLOAD | EMAC_CONFIG_7BYTE_PREAMBLE |
EMAC_CONFIG_IF_GAP_96BITS | EMAC_CONFIG_USE_MACADDR0 | EMAC_CONFIG_SA_FROM _描述符|
EMAC_CONFIG_BO_LIMIT_1024)、
(emac_mode_RX_store_forward | emac_mode_TX_store_forward | emac_mode_TX_threshold_64_Bytes |
EMAC_MODE_RX_THRESHOLD_64_BYTES)、0);
//
//初始化以太网 DMA 描述符。
//
InitDescriptors (EMAC0_BASE);
//
//使用其 MAC 地址对硬件进行编程(用于过滤)。
//
EMACAddrSet (EMAC0_BASE、0、macaddr);
//
//启用以太网 RX 数据包中断源。
//
EMACIntEnable (EMAC0_BASE、EMAC_INT_RECEIVE | EMAC_INT_PHY);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
GPIOPinTypeEthernetLED (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_1);
GPIOPinConfigure (GPIO_PF0_EN0LED0);
GPIOPinConfigure (GPIO_PF1_EN0LED2);
EMCPHYExtendedWrite (EMAC0_BASE、0、EPHY_LEDCR、EPHY_LEDCR_BLINKRATE_20Hz);
EMCPHYExtendedWrite (EMAC0_BASE、0、EPHY_LEDCFG、EPHY_LEDCF_LED0_LINK | EPHY_LEDCF_LED2_RxTx);
//驱动程序库不正确。 该位实际上控制 LED 指示灯的极性、
//
HWREG (EMAC0_BASE + EMAC_O_CC)|= EMAC_CC_ECEXT;
}