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.
我使用 AM2432上的 MCU_PLUS_SDK_am243x_08_05_00_24和 PRU 的 HSR/PRP FW
在文档中,我发现 ICSS-EMAC 不强制执行任何 QoS 方案。 它高达固件、可实施 QoS 方案(PCP 到队列映射)。 ICSS-EMAC 支持四级队列。
我想知道 PRP PRU FW 和 HSR PRU FW 的 QoS 方案是什么。
ICSS-EMAC 具有4个队列级别、VLAN PCP 具有3个位(8个优先级别)。
映射是什么?
谢谢
安德烈亚
尊敬的 Andrea:
很抱歉耽误你的时间。 我将在周五回到这个话题。
尊敬的 Nilabh:
我使用 PRP 固件进行了一些测试、发现:
端口1
注入数据包 VLAN 0、prio 4 -> rxPktInfo 端口1、队列0
注入数据包 VLAN 0、prio 3 -> rxPktInfo 端口1、队列1
因此、对于端口1、PRio 值3及更低的值用于 NRT 流量(队列0)
高于 PRIO 4的值用于 RT 流量(队列1)
端口2
注入数据包 VLAN 0、prio 7 -> rxPktInfo 端口2、队列3
注入数据包 VLAN 0、prio 4 -> rxPktInfo 端口2、队列3
注入数据包 VLAN 0、prio 3 -> rxPktInfo 端口2、队列3
注入数据包 VLAN 0、prio 1 -> rxPktInfo 端口2、队列3
注入数据包 VLAN 0、prio 0 -> rxPktInfo 端口2、队列3
对于端口2、每个数据包都被视为 NRT 流量、并始终由 PRU FW 插入队列3。
如何将队列2作为端口2的 RT 队列?
展望未来
安德烈亚
尊敬的 Andreas:
对于延迟回复深表歉意。
是的、您的观察结果是正确的。 更多信息、请参阅以下内容:
另请参阅以下五氯苯酚与队列映射的相关信息:
尊敬的 Nilabh Anand:
我阅读了这些文档。
顺便说一下、从我的测试中、我可以看到来自端口2的数据包始终位于 NRT 队列中、无论 PCP 级别是多少。
我在 ICSS_EMAC_pollPkt 中使用断点进行了检查。
来自端口2的数据包仅在 VLAN 0中被接受,并且 rxPktInfo.queueNumber 始终为3,因此 NRT 队列。
我尝试为 VID 1添加 VLAN 过滤器、但 VID = 1时来自端口2的数据包未排序。
vlan_filter_update_vid (prusshandle、1、Add_vlan_vid);
展望未来
安德烈亚
您好!
通过 RT 队列路由数据包的能力对我们至关重要。
非常感谢有关我们如何设计数据包以进入此类队列、或我们如何指示 PRU 获取此类结果的任何建议。
谢谢!
马可
尊敬的 Marco:
我们已经确定这个问题是固件中的错误。 我们将尝试在下一个 SDK 版本中修复。 请查找 JIRA 票证作为参考 jira.itg.ti.com/.../PINDSW-5532(internal仅查看)
尊敬的 Nilabh Anand:
我请您仔细检查一下、我们是否可以使用解决方法将 VLAN 流量与 LwIP 流量分开。
根据我们的测试,VLAN-id = 0的 VLAN 流量与 LwIP 流量一起从端口2被接受并发送到队列3。
是否有可以解决此问题的 VLAN 过滤器设置或任何 FW 配置设置?
否则、我们必须测试从端口2传入的 L2高优先级数据包的唯一方法是完全删除此端口的 IP 流量。
展望未来。
安德烈亚
尊敬的 Andrea:
我们目前正在检查固件。 修复完毕后、我们可以在下一个 SDK 版本中提供补丁版本供您进行测试
好消息! 谢谢
安德烈亚
请允许我们在6月16日之前重新讨论这个问题。
尊敬的 Nilabh Anand:
我们仍在等待测试补丁。
展望未来。
安德烈亚
尊敬的 Andrea:
我尝试使用8.5版的 AM64 EVM 在我旁边重现问题。
我已尝试将 VLAN 数据包发送到 EVM、但具有以下配置和结果:
VID: 100 Port 1: PCP 0: Q1 PCP 7: Q0 Port 2: PCP 0: Q3 PCP 7: Q2 VID: 001 Port 1: PCP 0: Q1 PCP 7: Q0 Port 2: PCP 0: Q3 PCP 7: Q2
我正在检查 ICSS_EMAC_pollPkt(icssEmacHandle)函数中 rxPktInfo.queueNumber 中的这些队列值。
我看不到端口2存在问题。
请告诉我这是否有帮助。 我稍后也会使用 AM243 EVM 来检验它。
希曼舒
尊敬的 Himanshu Mittal:
我再次进行了测试、结果在我旁边是相同的:端口2上的 VID 100或 VID 1是被丢弃的数据包(仅接受 VID 0)。
请使用 AM243x 上的 PRP MII PRU FW 进行检查。
展望未来
安德烈亚
尊敬的 Andrea:
您能否与我们分享您用于测试的数据包的 pcap、以便我们能够使用相同的数据包进行测试。
谢谢、Himanshu
尊敬的 Himanshu Mittal:
不可能"重放"我的 pcap 文件,因为我们的 MAC 地址是不同的,所以它不起作用。
我使用 python scapy 库来注入数据包。
我使用静态地址192.168.1.10、网络掩码255.255.255.0、网关192.168.1.1 (我的 PC)配置了 LwIP 接口
from scapy.all import *
IFACES.show() # let’s see what interfaces are available. Windows only
iface = IFACES.dev_from_index(7 # 7是我的 PC 以太网卡
套接字=配置 L2插座(iface=iface)
socket.send(Ether()/Dot1Q(vlan=100、prio=0)/ip (dst="192.168.1.10")/Raw (load="data")# VID = 100 - PCP = 0
socket.send(Ether()/Dot1Q(vlan=1、prio=0)/ip (dst="192.168.1.10")/Raw (load="data")# VID = 1 - PCP = 0
socket.send(Ether()/Dot1Q(vlan=0、prio=0)/ip (dst="192.168.1.10")/Raw (load="data")# VID = 0 - PCP = 0、它起作用
socket.send(Ether()/Dot1Q(vlan=100、prio=0)/ip (dst="192.168.1.10")/Raw (load="data")# VID = 100 - PCP = 7
socket.send(Ether()/Dot1Q(vlan=1、prio=0)/ip (dst="192.168.1.10")/Raw (load="data")# VID = 1 - PCP = 7
展望未来
安德烈亚
尊敬的 Andrea:
谢谢您提供的信息、仍然可以从发送器 PC 共享 Wireshark 捕获。
谢谢、Himanshu
尊敬的 Himanshu Mittal:
这里是我用于检查 PRU FW 将哪些数据包发送到 ICSS-FWHAL 的调试代码。
每个传入数据包的 I log 长度写入阵列包长度
第一个案例-注入 VLAN 0 PCP 0 IP 数据包
命令:
socket.send(Ether(dst="0a:0b:0b:00:00:02"、src ="78:24:af:08:4d:9e")/dot1q (VLAN=0、prio=0)/IP (dst="192.168.1.10"、src ="192.168.1.1")/Raw (load="dataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
数据包以4字节不同的大小进行记录和呈现(检查周围的其他数据包以进行确认)。
您还可以看到来自电路板的回复"host unreached"
第二个案例- 注入 VLAN 100 PCP 0 IP 数据包
命令:
socket.send(Ether(dst="0a:0b:0b:00:00:02"、src ="78:24:af:08:4d:9e")/dot1q (VLAN=100、prio=0)/IP (dst="192.168.1.10"、src ="192.168.1.1")/Raw (load="dataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
数据包丢失(检查长度为82字节的数据包作为参考)
第三个案例- 注入 VLAN 100 PCP 7 IP 数据包
命令:
socket.send(Ether(dst="0a:0b:0b:00:00:02"、src ="78:24:af:08:4d:9e")/dot1q (VLAN=100、prio=7)/IP (dst="192.168.1.10"、src ="192.168.1.1")/Raw (load="dataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
数据包丢失(检查长度为60字节的数据包作为参考)
展望未来。
安德烈亚
尊敬的 Himanshu Mittal:
有任何关于您的测试与我的设置的消息吗?
展望未来
安德烈亚
尊敬的 Andrea:
我通过与您一样进行更改来检查问题、从而在我身边进行了测试。 但如前所述、我仍会在队列中接收数据包。
设置:
AM243EVM、 prp_mII_demo_am243x-evm_r5fss0-0_freertos_ti-arm-clang 示例、 mcu_plus_sdk_am243x_08_06_00_45
用于数据包生成:
from scapy.all import *
# IFACES.show() # let’s see what interfaces are available. Windows only
iface = IFACES.dev_from_index(23) #23 is my PC ethernet card
socket = conf.L2socket(iface=iface)
# DA_MAC = 70:ff:76:1e:ec:36
socket.send(Ether(dst="70:ff:76:1e:ec:36", src="78:24:af:08:4d:9e")/Dot1Q(vlan=0, prio=0)/IP(dst="192.168.1.11", src="192.168.1.100")/Raw(load="deadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeed"))
socket.send(Ether(dst="70:ff:76:1e:ec:36", src="78:24:af:08:4d:9e")/Dot1Q(vlan=0, prio=7)/IP(dst="192.168.1.11", src="192.168.1.100")/Raw(load="deadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeed"))
socket.send(Ether(dst="70:ff:76:1e:ec:36", src="78:24:af:08:4d:9e")/Dot1Q(vlan=100, prio=0)/IP(dst="192.168.1.11", src="192.168.1.100")/Raw(load="deadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeed"))
socket.send(Ether(dst="70:ff:76:1e:ec:36", src="78:24:af:08:4d:9e")/Dot1Q(vlan=100, prio=7)/IP(dst="192.168.1.11", src="192.168.1.100")/Raw(load="deadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeed"))
socket.send(Ether(dst="70:ff:76:1e:ec:36", src="78:24:af:08:4d:9e")/Dot1Q(vlan=1, prio=0)/IP(dst="192.168.1.11", src="192.168.1.100")/Raw(load="deadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeed"))
socket.send(Ether(dst="70:ff:76:1e:ec:36", src="78:24:af:08:4d:9e")/Dot1Q(vlan=1, prio=7)/IP(dst="192.168.1.11", src="192.168.1.100")/Raw(load="deadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeeddeadfeed"))
此外、我没有看到 Wireshark capture 和 pLength 之间的4字节数据包长度的区别、如您所看到的。
谢谢、Himanshu
尊敬的 Himanshu Mittal:
我已经对您的示例进行了重新测试、并针对我们的电路板进行了修改、遗憾的是、我的情况与以前相同。
顺便说一下、我使用 ICSSG0而不是 ICSSG1、因此必须更改 HSR_prp_soc.c 中的一些 IRQ 设置、如下所示:
/*通过 MDIO FW WA 配置的 TX_PRU 内核的 R10的值*/
CSL_REG32_WR (CSL_PRU_ICSSG0_DRAM0_SLV_RAM_BASE + CSL_ICSS_G_PR1_PDSP_TX0_IRAM_DEBUG_REGS_BASE + PRU_REG_10、MDIO_MANUAL_MODED_FW_CONFIG_VALUE);
/*通过 TX_PRU 内核的 R12值来仿真 MDIO 基址*/
CSL_REG32_WR (CSL_PRU_ICSSG0_DRAM0_SLV_RAM_BASE + CSL_ICSS_G_PR1_PDSP_TX0_IRAM_DEBUG_REGS_BASE + PRU_REG_12、MDIO_MANUAL_MODE_BASE_ADDRESS);
主要为 CSL_PRU_ICSSG0_DRAM0_SLV_RAM_BASE、而不是 CSL_PRU_ICSSG1_DRAM0_SLV_RAM_BASE
我还 在 HSR_prp_main.c 中添加了自定义 MAC 地址、以初始化字段 lclMac
uint8_t lclMac[6]={0xA、0xB、0xB、0x0、0x0、 0x2};
我删除了函数 hsrprp_socgetMACAddress、因为不会从 EEPROM 读取 MAC 地址。
结果与我之前提到的相同:
-接受 VLAN 0的数据包,但始终具有 NRT 优先级,无论 PCP 值是什么
- VLAN 不为0的数据包被丢弃
ICSS_EMAC_pollPkt (ICSS_EMAC.c)中记录的数据包长度比 Wireshark 记录的长度短4个字节
展望未来
安德烈亚
尊敬的 Himanshu Mittal:
我们在想是否可以将我们的板送到您的实验室进行测试。
展望未来
安德烈亚
尊敬的 Andrea:
在我们采用这种方法之前、我建议您自己在 TI EVM 上试用此示例。 这将检查是软件问题还是硬件问题?
尊敬的 Nilabh:
我相信它能够在 TI EVM 上正常工作、但我真的想知道它是如何工作的。
您的 EVM 具有 RGMII PHY、因此与我们采用 MII PHY 的电路板相比、它会运行不同的 PRU FW。
第二、我们使用 ICSSG0部分、而不是在 EVM 中使用 ICSSG1:这会强制我更改示例中的 PRU IRQ 配置。
可能是我遗漏了一些其他的配置更改,以使用 ICSSG0部分的正确方式?
这就是为什么我们认为有必要在带有 MII 和 ICSSG0的电路板上进行检查(不是在带有 RGMII 和 ICSSG1的 EVM 上)。
展望未来
安德烈亚
您的 EVM 具有 RGMII PHY,因此与我们具有 MII PHY 的电路板相比,它将运行不同的 PRU FW。
我认为这不是正确的 Andrea,因为我们正在使用 prp MII 模式进行测试。 我们电路板上的 PHY、即 DP 83869也支持 MII 以及 RGMII。
其次,我们使用 ICSSG0部分而不是 EVM 中使用的 ICSSG1:这迫使我更改示例中的 PRU IRQ 配置。
这可能是我们可以检查的内容、您能否在终端重新检查配置?
因此我们认为检查具有 MII 和 ICSSG0的电路板时很重要(不是在具有 RGMII 和 ICSSG1的 EVM 上)。
我们应重点检查 SDK icssg1与您的 icssg1配置之间的差异。
尊敬的 Nilabh:
我们的讨论中已经提到了我在示例中更改的内容:
I 使用 ICSSG0 而不是 ICSSG1、因此我必须按如下方式更改 HSR_prp_soc.c 中的一些 IRQ 设置:
/*通过 MDIO FW WA 配置的 TX_PRU 内核的 R10的值*/
CSL_REG32_WR (CSL_PRU_ICSSG0_DRAM0_SLV_RAM_BASE + CSL_ICSS_G_PR1_PDSP_TX0_IRAM_DEBUG_REGS_BASE + PRU_REG_10、MDIO_MANUAL_MODED_FW_CONFIG_VALUE);
/*通过 TX_PRU 内核的 R12值来仿真 MDIO 基址*/
CSL_REG32_WR (CSL_PRU_ICSSG0_DRAM0_SLV_RAM_BASE + CSL_ICSS_G_PR1_PDSP_TX0_IRAM_DEBUG_REGS_BASE + PRU_REG_12、MDIO_MANUAL_MODE_BASE_ADDRESS);
主要是 CSL_PRU_ICSSG0_DRAM0_SLV_RAM_BASE 不是 CSL_PRU_ICSSG1_DRAM0_SLV_RAM_BASE
我还 在 HSR_prp_main.c 中添加了自定义 MAC 地址、以初始化字段 lclMac
uint8_t lclMac[6]={0xA、0xB、0xB、0x0、0x0、 0x2};
我删除了函数 hsrprp_socgetMACAddress、因为不会从 EEPROM 读取 MAC 地址。
是否有其它配置更改可以推荐使用 ICSSG0而不是 ICSSG1?
展望未来
安德烈亚
尊敬的 Andrea:
感谢您重复相同的内容。 让我们在内部检查并返回。
[报价用户 id="484939" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1225938/mcu-plus-sdk-am243x-hsr-prp-qos-vlan-pcp-to-icss-emac-queue-number/4739586 #4739586"]*针对 MDIO FW WA 配置向 TX_PRU 内核的 R10传递值*/
CSL_REG32_WR (CSL_PRU_ICSSG0_DRAM0_SLV_RAM_BASE + CSL_ICSS_G_PR1_PDSP_TX0_IRAM_DEBUG_REGS_BASE + PRU_REG_10、MDIO_MANUAL_MODED_FW_CONFIG_VALUE);
/*通过 TX_PRU 内核的 R12值来仿真 MDIO 基址*/
CSL_REG32_WR (CSL_PRU_ICSSG0_DRAM0_SLV_RAM_BASE + CSL_ICSS_G_PR1_PDSP_TX0_IRAM_DEBUG_REGS_BASE + PRU_REG_12、MDIO_MANUAL_MODE_BASE_ADDRESS);
主要是 CSL_PRU_ICSSG0_DRAM0_SLV_RAM_BASE 不是 CSL_PRU_ICSSG1_DRAM0_SLV_RAM_BASE
[/报价]Himanshu 您好、您觉得这些更改有任何问题吗?
请 Nilabh 和 Himanshu、检查我是否需要更多更改才能将 PRU FW 配置为在 ICSSG0上运行。
由于我能够收集数据包,我想 IRQ 设置是可以的,但我怀疑的是,有一些其他的变化,我不知道,并丢失了...也许关于 VLAN
展望未来
安德烈亚
尊敬的 Nilabh:
为了加快解决此问题或配置错误的速度,您认为我们是否可以使用 PRU 源代码进行调试?
展望未来
安德烈亚
您好!
对我来说、所做的更改似乎很好。
它应该能提供用于调试的源代码、下面我再讨论一下。
谢谢 Himanshu、好消息。
尊敬的 Andrea:
我将设置一个共享文件夹以提供源文件。
很棒的 Himanshu
尊敬的 Andrea:
我们计划与我们的软件团队和您进行调试呼叫。 因为我们最终无法重现问题。
您可以共享 icssg 内存转储。
要获取存储器转储、您需要使用 CCS 中的"Memory Browser"。 当您使用 ICSSG0时、我们需要 ICSSG0存储器转储。
起始地址为0x030000000、结束地址为0x030080000
点击 SAVE、您应该会看到转储保存在弹出窗口中提到的位置": /resized-image/__size/320x240/__key/communityserver-discussions-components-files/908/pastedimage1691566719487v3.png
我还为与会议相关的查询共享了一封私人消息。
尊敬的 Nilabh:
感谢您的支持、我们与您的团队一起发现问题出在我们的系统中、因为我们有一个以太网交换机负责从 PRU1上注入的流量中移除 VLAN 标签。
我们做了一个新的测试平台、能够通过此交换机将 VLAN 流量注入 PRU0、我们发现了同样的问题、因此我们了解到您的 PRU 固件中没有该问题。
展望未来。
安德烈亚