This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好
我们使用 tda4vm (master) cpsw9g 交换机同时连接 千兆位 PHY 和 100m PHY。 千兆位 PHY 使用 RGMII 接口、100M PHY 使用 SGMII 接口。 当我们 仅 使用100m PHY 通过 UDP 数据包传输与另一个 tda4vm (从器件)和 MCU 进行通信时、可以不丢失 UDP 数据包、 但是、当我们同时使用 千兆位 PHY 与 PC 通信(使用 iperf 工具测试超过100Mbps 的比特率)时、它将导致主 tda4vm、从 tdas4vm 和 MCU 之间丢失 UDP 数据包。 当使用 iperf 工具的比特率降至约80Mbps 时、测试 与 PC 的千兆位 PHY 通信、 不会丢失 UDP 数据包就可以了。
奇怪的是、cpsw9g 是千兆位接口、为什么会这样呢? 下面显示了连接图。
现在我们发现、当我们使用 iperf 测试 千兆位接口时 、100M 接口还会从 eth1接收 UDP 数据包、因此我猜 cpsw9g 没有 Mac 学习功能、或者此时无法使用。 我们如何从连接100M PHY 的 SGMII 接口过滤 UDP 封包?
此致、
Jason
您好!
您能提供更多详细信息
1.您使用的是哪个 SDK?
在 A72和 R5上运行的是什么。 哪些内核正在接收数据? (如果您可以绘制具有数据路径的软件方框图、这将有所帮助)
一定不会出现具有1G 端口的帧丢失。
此致
葡萄园
您好 、Vineyet、
感谢你的帮助。
我们使用 sdk7.1。
我们使用 iperf 工具在 A72上运行来测试千兆位 PHY、同时使用 A72上的套接字通信演示来测试 tda4a 和 MCU 之间的100m phy。 但 cpsw9g drvier 在 R5上运行。我们认为 R5首先接收数据、然后从传输到 A72。
我们能否启用 cpsw9g VLAN 模块来解决此问题? 我们应该如何启用它?
此致
Jason
具有如下数据路径的软件方框图:
数据路径1:TDA4A 芯片 A72(eth1 172.16.0.100)->CPSW9G (TDA4A)端口2->100M PHY--> MCU(IP 172.16.0.1)
数据路径2: TDA4A 芯片 A72(eth1:0 172.16.200.100)->CPSW9G (TDA4A)端口5-->Gigabit PHY--> PC(IP 172.16.200.190)
在 Data Path2中、 我们在 TDA4A 芯片 A72 (__LW_AT__eth1:0 172.16.200.100)上使用 iperf runing 将 UDP 数据包发送到 PC(IP 172.16.200.190)、然后 CPSW9G (TDA4A)端口2将接收 UDP 数据包。我们如何过滤 来自 CPSW9G (TDA4A)端口5的数据包? 因为它会导致 数据包在数据路径1中丢失。
1G 端口的帧降肯定不是预期的。--- 1G 端口没有帧丢失、但我认为100M 端口。
此致
Jason
您好 、Vineyet、
我们修改 CPSW9G 上端口的 vlanMemberList、如下所示:
----------------------------------------------------------------
void EthHwInterVlan_setOpenPrms (Cpsw_Cfg * pCpswCfg)
{
Enet_MacPort I;
对于 VLAN 间,/* pCpswcfg->aleCfg.policerGlobalCfg.policingEn 应为 true。
*设置为 false 可在 VLAN API 间执行驱动程序内部逻辑以自动启用策略器
*被调用
*
pCpswCfg->aleCfg.policerGlobalCfg.policingEn = true;
pCpswCfg->hostPortCfg.passPriorityTaggedUnchanged = true;
pCpswCfg->aleCfg.modeFlags = CPSW_ALE_CFG_MODULE_EN;
pCpswCfg->aleCfg.policerGlobalCfg.redDropEn = false;
pCpswCfg->aleCfg.policerGlobalCfg.yellowDropEn = false;
pCpswCfg->aleCfg.policerGlobalCfg.policerNoMatchMode = CPSW_ALE_policer_nomatch_mode_green;
pCpswCfg->aleCfg.vlanCfg.aleVlanAwareMode = true;
pCpswCfg->aleCfg.vlanCfg.cpswVlanAwareMode = true;
pCpswCfg->aleCfg.vlanCfg.unknownVlanMemberListMask = 0;
pCpswCfg->aleCfg.nwSecCfg.hostOuiNoMatchDeny = false;
pCpswCfg->aleCfg.nwSecCfg.vid0ModeEn = true;
pCpswCfg->aleCfg.nwSecCfg.ipPktCfg.dfltNxtHdrWhitelistEn = true;
pCpswCfg->aleCfg.nwSecCfg.ipPktCfg.ipNxtHdrWhitelistCnt = 2U;
pCpswCfg->aleCfg.nwSecCfg.ipPktCfg.ipNxtHdrWhitelet[0]= CPSW_TEST_IPV4_nxt_HDR_TCP;
pCpswCfg->aleCfg.nwSecCfg.ipPktCfg.ipNxtHdrWhitelet[1]= CPSW_TEST_IPV4_nxt_HDR_UDP;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_HOST_PORT_NUM].learningCfg.noLearn = false;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_HOST_PORT_NUM].vlanCfg.dropUntagged = false;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_HOST_PORT_NUM].pvidCfg.unregMcastFloodMask = 0x0;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_HOST_PORT_NUM].pvidCfg.regMcastFloodMask = CPSW_ALE_ALL_PORT_MASK;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_HOST_PORT_NUM].pvidCfg.forceUntaggedeEgessMask = CPSW_ALE_ALL_PORT_MASK;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_HOST_PORT_NUM].pvidCfg.noLearnMask = 0x0;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_HOST_PORT_NUM].pvidCfg.vidIngresCheck = 0x0;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_HOST_PORT_NUM].pvidCfg.limitIPNxtHdr = false;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_HOST_PORT_NUM].pvidCfg.disallowIPFrag = false;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_HOST_PORT_NUM].pvidCfg.vlanIdInfo.tagType = ENET_VLAN_TAG_TYPE_INNER;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_HOST_PORT_NUM].pvidCfg.vlanIdInfo.vlanid = CPSW_TEST_INTERVLAN_hostPort_PVID;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_HOST_PORT_NUM].pvidCfg.vlanMemberList = CPSW_ALE_ALL_PORT_MASK;//0x1fb;//
对于(i = ENET_MAC_PORT_FIRST;i < CPSW_ALE_NUM_MAC_PORTS;i++)
{
pCpswCfg->aleCfg.portCfg[CPSW_ALE_MACPORT_TO_ALEPORT(i)].learningCfg.noLearn = false;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_MACPORT_TO_ALEPORT(i)].pvidCfg.unregMcastFloodMask = 0x0;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_MACPORT_TO_ALEPORT(i)].pvidCfg.regMcastFloodMask = CPSW_ALE_ALL_PORT_MASK;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_MACPORT_TO_ALEPORT(i)].pvidCfg.forceUntaggedessMask = CPSW_ALE_ALL_PORTS_MASK;//1<<(i+1);
pCpswCfg->aleCfg.portCfg[CPSW_ALE_MACPORT_TO_ALEPORT(i)].pvidCfg.noLearnMask = 0x0;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_MACPORT_TO_ALEPORT(i)].pvidCfg.vidIngresCheck = 0x0;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_MACPORT_TO_ALEPORT(i)].pvidCfg.limitIPNxtHdr = false;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_MACPORT_TO_ALEPORT(i)].pvidCfg.disallowIPFrag = false;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_MACPORT_TO_ALEPORT(i)].pvidCfg.vlanIdInfo.tagType = ENET_VLAN_TAG_TYPE_INNER;
pCpswCfg->aleCfg.portCfg[CPSW_ALE_MACPORT_TO_ALEPORT(i)].pvidCfg.vlanIdInfo.vlanid = CPSW_TEST_INTERVLAN_MACPORT_PVID_BASE + ENET_MACPORT_NORM (i);
pCpswCfg->aleCfg.portCfg[CPSW_ALE_MACPORT_TO_ALEPORT(i)].pvidCfg.vlanMemberList = 0x1;// CPSW_ALE_ALL_PORT_MASK;
}
pCpswCfg->hostPortCfg.vlanCfg.portPri = 7;
pCpswCfg->hostPortCfg.vlanCfg.portCfi = 0;
pCpswCfg->hostPortCfg.vlanCfg.portVID = CPSW_TEST_INTERVLAN_hostPort_PVID;
pCpswCfg->vlanCfg.vlanAware = true;
}
----------------------------------------------------------------
因此 、CPSW9G (TDA4A)端口2和 端口5只能与 CPSW9G (TDA4A) 主机端口通信、 但是、当我们使用 iperf 将 UDP 数据包从 CPSW9G (TDA4A) 主机端口发送到端口5时 、端口2仍然可以接收数据包。我们需要将数据包直接发送到端口5、同时主机端口可以正常与端口2通信。
此致、
Jason
您好 Jason、
很抱歉、一段时间后重新打开此主题。
此问题是否仍然存在?
此致
葡萄园
您好、Vineyet、
问题仍然存在、我们最终使用 TCP 协议与 PORT5进行通信。
此致、
Jason
您好!
很抱歉耽误你的时间。 我正在为 TDA4编写 VLAN/ALE 用户指南、其中将介绍此主题。
此致
葡萄园
您好、Vineyet、
非常感谢。 如果可能、您能否向我发送相关的用户指南、我的电子邮件是 huangjiasheng@yihang.ai
此致、
Jason