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

TMS570LC4357: 组播接收不到数据

Part Number:TMS570LC4357Other Parts Discussed in Thread: HALCOGEN

TI工程师,您好

 

我们最近在TMS570LC4357上移植lwip1.4.1的时候,遇到组播帧没有收到的问题,广播和单播帧可以正确收到。后来,发现从EMAC的接口就没有获得到组播帧。

不知道是不是驱动配置有问题,我们的驱动使用HALCOGEN生成,根据需要做了一些修改,

驱动代码如下

netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP | NETIF_FLAG_IGMP;

  EMACInit(hdkif->emac_ctrl_base, hdkif->emac_base);

 

  MDIOInit(hdkif->mdio_base, MDIO_FREQ_INPUT, MDIO_FREQ_OUTPUT);

  while(delay–);

 

  EMACRxBroadCastEnable(hdkif->emac_base, 0);

 

  /* Set the MAC Addresses in EMAC hardware */

  EMACMACSrcAddrSet(hdkif->emac_base, hdkif->mac_addr);

 

  /* Acknowledge receive and transmit interrupts for proper interrupt pulsing*/

  EMACCoreIntAck(hdkif->emac_base, EMAC_INT_CORE0_RX);

  EMACCoreIntAck(hdkif->emac_base, EMAC_INT_CORE0_TX);

 

  EMACRxUnicastSet(hdkif->emac_base, 0);

EMACRxMultiCastEnable(hdkif->emac_base, 0);

  EMACNumFreeBufSet(hdkif->emac_base, 0, 10);

 

  /* Write the RX HDP for channel 0 */

  EMACRxHdrDescPtrWrite(hdkif->emac_base, (U32)rxch->active_head, 0);

 

  EMACTxEnable(hdkif->emac_base);

  EMACRxEnable(hdkif->emac_base);

 

  EMACMIIEnable(hdkif->emac_base);

 

 

  /**

  * Enable the Transmission and reception, enable the interrupts for

  * channel 0 and for control core 0

  */

  EMACTxIntPulseEnable(hdkif->emac_base, hdkif->emac_ctrl_base, 0, 0);

  EMACRxIntPulseEnable(hdkif->emac_base, hdkif->emac_ctrl_base, 0, 0);

 

代码没有全部贴出来,这些都是调用EMAC接口的部分。这样配置有没有什么问题?

 

期望能帮忙解答,谢谢

Cherry Zhou:

您好,我们已收到您的问题并升级到英文论坛寻求帮助,由于假期在即,英文论坛的答复将会有所延迟,感谢您的耐心等待!

,

Cherry Zhou:

您好,

您还需要设置 MACHASH1和 MACHASH2寄存器来匹配要侦听的组播地址。 它是一个hash值,因此它获取 MAC 地址的48位并将其hash到单个位位置。 您必须在HASH寄存器中设置该位置。 

,

pengdi shi:

感谢您的回复,这个值应该设置成多少呢,我使用0通道,设置成0xffffffff,可以收到组播数据了,这个hash应该怎么计算呢?

,

Cherry Zhou:

您好,

pengdi shi 说:这个hash应该怎么计算呢?

首先使用以下公式从要侦听的 MAC 地址计算6位hash函数:

此处的Hash_Fun (0)表示位0,Hash_Fun (1)表示位1,依此类推。

现在基于输入的 MAC 地址( 00 00 00 00 00 00 至 FF FF FF FF FF FF)您可以得到64个可能值,即0至63。

因此要接收相应的 MAC 地址,必须设置 MACHASH 寄存器中相应的位置位(MACHASH1为0至31位、MACHASH2为32至63位)。

例如:

如果您希望接收的组播 MAC 地址00 00 00 00 00 01,其6位hash函数值为0b000001,即value1,因此我们必须设置hash寄存器中的第一位,即 MACHASH1寄存器中的第一位,因此寄存器值为

MACHASH1 = 0x00000001

MACHASH2 = 0x00000000

同样地,您甚至可以在hash寄存器中选择多个值来接收多个地址。

,

pengdi shi:

好的,明白了,谢谢。

赞(0)
未经允许不得转载:TI中文支持网 » TMS570LC4357: 组播接收不到数据
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1