使用官方的SDK驱动配置的以太网部分,接收采用DMA方式,目前只能接收到VLAN优先级为0的报文,接收不到VLAN优先级为非0的报文。但项目要求接收的VLAN优先级为非0,关于这一块驱动如何配置呢?
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.
如果对例程没有做修改的话,请看一下是否按照下面文档中的步骤操作的?
https://software-dl.ti.com/mcu-plus-sdk/esd/AM273X/08_03_00_18/exports/docs/api_guide_am273x/EXAMPLES_NETWORKING.html
我把您的问题升级到英文e2e论坛了,请关注下面帖子的回复。
e2e.ti.com/.../am2732-how-to-configure-the-code-to-receive-the-non-zero-priority-vlan-message
请参考下面e2e工程师的回复。
For receiving the non-zero priority VLAN, you need to add a policer entry with required priority using CPSW_ALE_IOCTL_SET_POLICER IOCTL.
AM273x MCU+ SDK: Enet LLD IOCTL interface (ti.com)
AM273x MCU+ SDK: CpswAle_PolicerMatchParams Struct Reference (ti.com)
AM273x MCU+ SDK: CPSW Address Lookup Engine (ALE) (ti.com)
For using the Enet IOCTLs, you can refer to existing examples in mcu_plus_sdk_am273x_08_03_00_18\examples\networking.
工程师对他之前的回复有更新,请参考
Please ignore my previous response. I assumed you made changed to loopback code to enable specific priority handling.
Regarding your issue, can you please share how you send non-zero priority messages? Did you modify loopback example to create new VLAN packets?
Can you please share log and CPSW statistics (you can print stats using below)?
我刚去掉了POLICER设置的那段代码,脚本设置MSS_CPSW基地址为0x07000000,可以打印出来状态信息,如下:
Cortex_R5_0: GEL Output: --->>> CPSW Gel Load In Progress... <<<---
Cortex_R5_0: GEL Output: --->>> CPSW Gel Load DONE! <<<---
Cortex_R5_0: GEL Output: STATS
Cortex_R5_0: GEL Output: --------------------------------
Cortex_R5_0: GEL Output: PORT0 STATS
Cortex_R5_0: GEL Output: --------------------------------
Cortex_R5_0: GEL Output: STAT_0_RXGOODFRAMES = 0x0000001C
Cortex_R5_0: GEL Output: STAT_0_RXBROADCASTFRAMES = 0x0000001C
Cortex_R5_0: GEL Output: STAT_0_RXOCTETS = 0x00000B98
Cortex_R5_0: GEL Output: STAT_0_TXGOODFRAMES = 0x00000019
Cortex_R5_0: GEL Output: STAT_0_TXBROADCASTFRAMES = 0x00000010
Cortex_R5_0: GEL Output: STAT_0_TXMULTICASTFRAMES = 0x00000009
Cortex_R5_0: GEL Output: STAT_0_TXOCTETS = 0x000009CF
Cortex_R5_0: GEL Output: STAT_0_OCTETFRAMES65T127 = 0x00000034
Cortex_R5_0: GEL Output: STAT_0_OCTETFRAMES128T255 = 0x00000001
Cortex_R5_0: GEL Output: STAT_0_NETOCTETS = 0x00001567
Cortex_R5_0: GEL Output: STAT_0_ALE_UNKN_BRD = 0x00000003
Cortex_R5_0: GEL Output: STAT_0_ALE_UNKN_BRD_BCNT = 0x0000013E
Cortex_R5_0: GEL Output: --------------------------------
Cortex_R5_0: GEL Output: PORT1 STATS
Cortex_R5_0: GEL Output: --------------------------------
Cortex_R5_0: GEL Output: STAT_1_RXGOODFRAMES = 0x00000019
Cortex_R5_0: GEL Output: STAT_1_RXBROADCASTFRAMES = 0x00000010
Cortex_R5_0: GEL Output: STAT_1_RXMULTICASTFRAMES = 0x00000009
Cortex_R5_0: GEL Output: STAT_1_RXOCTETS = 0x000009CF
Cortex_R5_0: GEL Output: STAT_1_TXGOODFRAMES = 0x0000001C
Cortex_R5_0: GEL Output: STAT_1_TXBROADCASTFRAMES = 0x0000001C
Cortex_R5_0: GEL Output: STAT_1_TXOCTETS = 0x00000B98
Cortex_R5_0: GEL Output: STAT_1_OCTETFRAMES65T127 = 0x00000034
Cortex_R5_0: GEL Output: STAT_1_OCTETFRAMES128T255 = 0x00000001
Cortex_R5_0: GEL Output: STAT_1_NETOCTETS = 0x00001567
Cortex_R5_0: GEL Output: STAT_1_ALE_UNKN_MLT = 0x00000002
Cortex_R5_0: GEL Output: STAT_1_ALE_UNKN_MLT_BCNT = 0x00000105
Cortex_R5_0: GEL Output: STAT_1_ALE_UNKN_BRD = 0x00000001
Cortex_R5_0: GEL Output: STAT_1_ALE_UNKN_BRD_BCNT = 0x0000006A
Cortex_R5_0: GEL Output: STAT_1_TX_PRI_REG [0]= 0x0000001C
Cortex_R5_0: GEL Output: STAT_1_TX_PRI_BCNT_REG [0]= 0x00000B98
Cortex_R5_0: GEL Output: STATS
Cortex_R5_0: GEL Output: --------------------------------
Cortex_R5_0: GEL Output: PORT0 STATS
Cortex_R5_0: GEL Output: --------------------------------
Cortex_R5_0: GEL Output: STAT_0_RXGOODFRAMES = 0x00000021
Cortex_R5_0: GEL Output: STAT_0_RXBROADCASTFRAMES = 0x00000021
Cortex_R5_0: GEL Output: STAT_0_RXOCTETS = 0x00000DAA
Cortex_R5_0: GEL Output: STAT_0_TXGOODFRAMES = 0x00000025
Cortex_R5_0: GEL Output: STAT_0_TXBROADCASTFRAMES = 0x00000016
Cortex_R5_0: GEL Output: STAT_0_TXMULTICASTFRAMES = 0x0000000F
Cortex_R5_0: GEL Output: STAT_0_TXOCTETS = 0x00000E23
Cortex_R5_0: GEL Output: STAT_0_OCTETFRAMES65T127 = 0x00000045
Cortex_R5_0: GEL Output: STAT_0_OCTETFRAMES128T255 = 0x00000001
Cortex_R5_0: GEL Output: STAT_0_NETOCTETS = 0x00001BCD
Cortex_R5_0: GEL Output: STAT_0_ALE_UNKN_BRD = 0x00000003
Cortex_R5_0: GEL Output: STAT_0_ALE_UNKN_BRD_BCNT = 0x0000013E
Cortex_R5_0: GEL Output: --------------------------------
Cortex_R5_0: GEL Output: PORT1 STATS
Cortex_R5_0: GEL Output: --------------------------------
Cortex_R5_0: GEL Output: STAT_1_RXGOODFRAMES = 0x00000025
Cortex_R5_0: GEL Output: STAT_1_RXBROADCASTFRAMES = 0x00000016
Cortex_R5_0: GEL Output: STAT_1_RXMULTICASTFRAMES = 0x0000000F
Cortex_R5_0: GEL Output: STAT_1_RXOCTETS = 0x00000E23
Cortex_R5_0: GEL Output: STAT_1_TXGOODFRAMES = 0x00000021
Cortex_R5_0: GEL Output: STAT_1_TXBROADCASTFRAMES = 0x00000021
Cortex_R5_0: GEL Output: STAT_1_TXOCTETS = 0x00000DAA
Cortex_R5_0: GEL Output: STAT_1_OCTETFRAMES65T127 = 0x00000045
Cortex_R5_0: GEL Output: STAT_1_OCTETFRAMES128T255 = 0x00000001
Cortex_R5_0: GEL Output: STAT_1_NETOCTETS = 0x00001BCD
Cortex_R5_0: GEL Output: STAT_1_ALE_UNKN_MLT = 0x00000002
Cortex_R5_0: GEL Output: STAT_1_ALE_UNKN_MLT_BCNT = 0x00000105
Cortex_R5_0: GEL Output: STAT_1_ALE_UNKN_BRD = 0x00000001
Cortex_R5_0: GEL Output: STAT_1_ALE_UNKN_BRD_BCNT = 0x0000006A
Cortex_R5_0: GEL Output: STAT_1_TX_PRI_REG [0]= 0x00000021
Cortex_R5_0: GEL Output: STAT_1_TX_PRI_BCNT_REG [0]= 0x00000DAA
抱歉回复晚了。
请看下面工程师的回复。能否发一下您的工程文件?
To debug this issue further I would need the below info here. As the example by default does not uses sample vlan packets and its configured for vlan unaware mode. And the example is configured for 0 vlan id UNICAST packets reception.
Regarding your issue, can you please share how you send non-zero priority messages? Did you modify loopback example to create new VLAN packets?
For speeding up debug process, Can you please share example project(modified for vlan handling) by customer.
能否提供一下您的工程文件?请看下面工程师的回复。
Debug is still in progress on our end. Can you please help with the example project which customer is using so it could fasten up our debug also if the customer is using PHY loopback how are they seeing packet on wireshark?
之前用的enet_loopback的demo工程改的,现在用lwip示例工程就把多播配置的mac地址改了下
那麻烦把在TI demo工程上修改后的测试工程发一下,方便我们工程师调试。
e2e工程师建议您移植到最新的08.04.00.17版本看是否能解决。
https://www.ti.com/tool/download/MCU-PLUS-SDK-AM273X
他稍后会把他那边测试的工程放到e2e帖子里。
请看我们工程师最新的回复。
For VLAN Support in LWIP example following changes are to be made for enabling vlan id 4U packets:
#define ETHARP_SUPPORT_VLAN 1
in file mcu_plus_sdk\source\networking\lwip\lwip-stack\src\include\lwip\opt.h
+#define ETHARP_VLAN_CHECK 4
+#define LWIP_HOOK_VLAN_SET(netif, p, src, dst, eth_type) (4U)
Let me know if this works for you.
我一直就是这样设置的,这个是我的设置
#define ETHARP_SUPPORT_VLAN 1
#define VLAN_VID 104
#define VLAN_PRI 4
#define VLAN_CFI 0
#define LWIP_HOOK_VLAN_SET(netif, p, src, dst, eth_type) ((VLAN_PRI << 13) | (VLAN_CFI << 12) | VLAN_VID)
我是要接收VLAN优先级为4的报文,而不是接收VLAN ID为4的报文。LWIP我那块配置的没问题的,还有用的那个新版SDK也不行的,可否让你们工程师给下怎么通过Policer的设置来改变接收VLAN优先级的,我这一块一直设置不成功,因为读出的ALE_STATUS寄存器为0
请看下面e2e工程师最新的回复。
Please refer below:
1. Please follow example: mcu_plus_sdk\examples\networking\enet_layer2_multi_channel example to setup ALE and vlan priority filtering.
2.Use below code as a sample to configure the ALE:
void EnetApp_setCpswPolicer(EnetApp_PerCtxt *perCtxt)
{
int32_t status;
Enet_IoctlPrms prms;
CpswAle_SetPolicerEntryOutArgs setPolicerOutArgs;
CpswAle_SetPolicerEntryInArgs setPolicerInArgs;
/* Set the Policer configuration */
memset(&setPolicerInArgs, 0, sizeof(setPolicerInArgs));
setPolicerInArgs.policerMatch.policerMatchEnMask = CPSW_ALE_POLICER_MATCH_MACSRC |
CPSW_ALE_POLICER_MATCH_ETHERTYPE |
CPSW_ALE_POLICER_MATCH_PORT;
setPolicerInArgs.policerMatch.etherType = 0x8100;
setPolicerInArgs.policerMatch.priority = 4U;
setPolicerInArgs.policerMatch.portNum = CPSW_ALE_MACPORT_TO_ALEPORT(ENET_TEST_POLICER_INGRESS_PORT);
memcpy(&setPolicerInArgs.policerMatch.srcMacAddrInfo.addr.addr[0U], testSrcAddr, sizeof(setPolicerInArgs.policerMatch.srcMacAddrInfo.addr.addr));
setPolicerInArgs.policerMatch.srcMacAddrInfo.addr.vlanId = 0;
setPolicerInArgs.policerMatch.srcMacAddrInfo.portNum = CPSW_ALE_MACPORT_TO_ALEPORT(ENET_TEST_POLICER_INGRESS_PORT);
ENET_IOCTL_SET_INOUT_ARGS(&prms, &setPolicerInArgs, &setPolicerOutArgs);
ENET_IOCTL(perCtxt->hEnet, gEnetApp.coreId, CPSW_ALE_IOCTL_SET_POLICER, &prms, status);
if (status != ENET_SOK)
{
EnetAppUtils_print("\nEnetApp_setCpswPolicer() failed CPSW_ALE_IOCTL_SET_POLICER: %d\n", status);
}
else
{
EnetAppUtils_print("\nRate limiting Enabled port %d on Src MAC " , CPSW_ALE_MACPORT_TO_ALEPORT(ENET_TEST_POLICER_INGRESS_PORT));
EnetAppUtils_printMacAddr(testSrcAddr);
}
}
3. Rebuild the example.
Please let me know if you need any help with this.