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.

[参考译文] AM1808:即使 MACHASHx 为零、也会接收 Enet 多播数据包

Guru**** 2551110 points
Other Parts Discussed in Thread: AM1808, OMAP-L138

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/610170/am1808-enet-multicast-packets-are-received-even-though-machashx-are-zero

器件型号:AM1808
主题中讨论的其他器件: OMAP-L138

您好!

客户在 AM1808 EMAC 上遇到问题、即使 MACHASH1和2已清零、它仍会接收多播数据包:

我们发现、如果我们的测试 PC 发送一个发送到 MAC 地址01:80:C2:00:00:01的以太网帧(请注意、这是一个多播地址)、那么 EMAC 将为此帧生成一个接收中断。 即使 MACHASH1和 MACHASH2寄存器都设为0、也会发生这种情况。 请参阅随附的 AM1808_EMAC_machash_eq_0_receive.pcapng、了解我们从测试 PC 传输的帧的捕获。


我们通过设置 RXUNICASTSET 的位0将 EMAC 配置为在通道0上接收单播流量。 我们在 RXMBPENABLE 中将 RXMULTEN 设置为"1"、将 RXMULTCH 设置为"001"、从而将通道1配置为接收多播流量。 我们通过设置 C1RXEN 的位1来启用接收多播流量的中断。 尽管我们在通道1上启用了多播接收、并且在通道1上启用了接收中断、但我们不希望生成任何中断、因为 MACHASH1和 MACHASH2寄存器都设置为0。

您能不能帮助我们了解为什么尽管 MACHASH 寄存器设置为0、但附加 Wireshark 捕获中的多播帧会在 EMAC 中生成接收中断? 尽管 MACHASH 寄存器被设置为0、是否还有其他形式的以太网帧可作为"详细信息"接收? 除了以太网帧中的目的 MAC 地址字段外、是否还有其他字段会影响 EMAC 是否接收到帧?

e2e.ti.com/.../6507.am1808_5F00_emac_5F00_machash_5F00_eq_5F00_0_5F00_receive.7z

谢谢、

-Gunter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Gunter、

    我已将此事转发给 EMAC 专家。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    所有、

    我们没有看到对我们的问题的任何答复。 专家是否已了解 EMAC 的这个问题?

    谢谢、

    -Gunter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    可以通过三种方式接收指定的地址

    设置所有帧的复制(CAF)位

    设置 Copy-All-Mac-Frames (CAM)位

    设置哈希位。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Gunter
    除了 IP 团队提供的上述说明外、下面还提供了一些其他调试建议

    1.清除所有统计信息寄存器(IP 复位或手动写清零)
    2.在尽可能少的以太网活动的情况下重现错误的多播接收
    3.转储所有统计信息和配置寄存器

    统计数据应提供大量有关 IP 如何解释数据包的线索。 配置寄存器应确认根本原因(假设是软件配置错误,而不是 IP 硬件错误)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、Mukul。

    我们将清除/重新生成偏移量0x200和0x28C 之间的问题/转储所有网络统计寄存器、并尽快返回给您。

    请告知我们是否应转储任何其他寄存器。

    谢谢、

    -Gunter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    有关 EMAC 寄存器的转储、请参阅随附的 zero_machash_multicast_rx_stat_regs.xlsx。

    我使用以下步骤来收集寄存器数据:

    1. 将代码下载到目标,在 main()处停止
    2. 在向与配置为接收多播流量的通道(通道2)对应的 C1RXEN 位写入"1"之前、在 EMAC 初始化逻辑中设置一个断点
    3. 在接收 ISR 中为配置为接收多播流量的通道设置断点
    4. 运行目标运行(仍在 main 暂停)
    5. 到达#2中的断点后、运行目标并立即从 PC 发出违规的多播流量

    在#5中、我使用 scapy 从我的 PC 发送多播流量:

    sendp (dst='01:80:C2:00:01'、src='ff:ff:ff:ff:ff:ff:ff'、len=3)/LLC (DSAP=0、SSAP=1、ctrl=2)/Padding ('\x00'*43)、 iface=IFACES.dev_from_index(6)) 

    我从器件上拔下以太网电缆、并且在器件在接收 ISR (#3)中的断点处停止时从调试器"Registers"窗口捕获了寄存器信息。 请参阅随附 的 e2e.ti.com/.../zero_5F00_machash_5F00_multicast_5F00_rx_5F00_stat_5F00_regs.xlsx。

    我可以在 RXMBPENABLE 中看到 RXCMFEN 和 RXCAFEN 为0、我还可以看到 MACHASH 寄存器为0、因此 EMAC 不应该接收到多播消息。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您拥有的 CPGMAC 包含类型2地址映射表。

    也就是说、有一个32条目地址表、其中可以包含任何地址。 您也可以转储此表吗?

    2.3.1.2类型2地址匹配和过滤逻辑

    第二种类型的地址匹配逻辑包含一个32 x 53位双端口 RAM 并提供

    能够根据传入数据包的目标执行地址匹配和地址过滤

    地址。 RAM 包含32个地址位置、每个地址位置包含一个48位接收地址加号

    有效、通道和匹配/滤波器位。 主机必须初始化所有 RAM 位置(包括要位于的位置)

    未使用)、主机负责从 RAM 中添加和删除地址。

    每个地址位置的53位被写入三个连续的32位 VBUS 访问。 主机

    必须将索引写入 MacIndex (4:0)寄存器的 RAM 中、后跟地址的高32位

    (存储在保存寄存器中)、后跟地址的低16位(带有控制位)。 。

    写入低位时、写入53位索引 RAM 位置。

    多播数据包地址可能包含在 RAM 中、但关联的通道必须具有

    单播使能位设置(即使它是多播地址)。 单播启用,而不是多播

    散列使能位与 RAM 中的多播地址一起使用。 因此,可以禁用哈希匹配

    然而、特定的多播地址可以在 RAM 中匹配(或过滤)。 如果是多播数据包哈希

    匹配时、数据包仍可在 RAM 中进行过滤。 每个数据包只能发送到单个通道。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Dennis

    感谢您的详细答复。  下面是我们初始化 MAC 地址的代码:

    get_mac_address (mac_address);
    
    EMAC->MACINDEX = 0;
    
    EMAC->MACADDRHI =(*(uint32 *) mac_address);
    
    EMAC->MACADDRLO =(*(uint16 *)&mac_address[4])| MACADDRLO_VALID | MACADDRLO_ADDRLO_ADDRLO =
    
    
    
    (*);对于 MATI+(i+= 1);对于 MATI+(i+)
    
    EMAC->MACINDEX = I;
    
    EMAC->MACADDRLO =*((UINT16 *)&MAC_ADDRES[4]);
    
    } 

    您提到需要配置32个地址、但 EMAC 文档(sprufu9a)显示只有8个地址。 此外、文档只提到 MACINDEX 的位2:0。  

    我尝试修改代码以将索引1-31初始化为零、但尽管 MACHASH 寄存器设置为零、我仍然看到同一多播帧的中断。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您也参考了哪种规格?
    您的代码似乎已配置为1类地址、但器件寄存器转储指示支持的2类地址。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Denis
    该系列的 EMAC 用户指南为
    www.ti.com/.../spruh82c.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Denis:

    您查看的规格与 Gabriel 使用的规格是否存在差异、这是上面提到的 UG Mukul 吗?

    您能评论一下 MACINDEX 的区别吗、您说有32个地址、而 UG 只显示8个地址?

    谢谢、
    -Gunter
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    加布里埃尔

    请尝试使用不同的多播地址。 您当前使用的是网桥预留的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Gunter
    让我看看我是否能够对内部设计规格与 TRM 差异进行排序、这可能超出 Denis 的范围。
    Denis 的另一个建议是尝试另一个多播地址、因为当前正在使用的地址似乎是为网桥保留的地址。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    DK-,

    响应:

    [引用 user="-DK-"]

    加布里埃尔

    请尝试使用不同的多播地址。 您当前使用的是网桥预留的。

    [/报价]

    我们无法控制网络中存在的数据。 如果另一个器件发送到指定的 MAC 地址(01:80:C2:00:01)、那么尽管 MACHASH 寄存器被设置为0、EMAC 将接收帧。 我们正在寻求以下问题的答案:

    1. 为什么 EMAC 在 MACHASH 寄存器为零时接收多播流量?
    2. 还有其他情况下 EMAC 将接收帧吗? (除了广播流量和发往 EMAC 中配置的 MAC 地址的单播流量之外、以及与 MACHASH 寄存器中的哈希集匹配的多播流量)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Gabriel、

    该团队正在研究细节。 需要以下信息:

    []是否可以确认寄存器 RXMBPENABLE 的值? 我们需要您确认 RXCMFEN 位以及包括 RXCAFEN 在内的其他位的值。

    []是否可以发送不需要的多播数据包附带的缓冲区描述符字(全部四个32位字)?

    谢谢、

    -Gunter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Gunter

    RXMBPENABLE 为0x10002022。

    四个缓冲区描述符字是(按顺序):

    0x01E20610

    0xC1558020

    0x0000003C

    0xC000003C

    非所需的多播数据包是 EMAC 通道自启动以来唯一接收到的数据包。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    要扩展我以前的答案:

    虽然 OMAP-L138 TRM (spruh77c)的2016年9月修订版以及 AM1808 TRM (spruh82.c)的2016年9月修订版表明 MACINDEX 寄存器的 MACINDEX 位字段为2:0、但我在写入 MACEX 寄存器时观察到以下行为:

    写入的值 读取的值
    0x07 0x07
    0x0F 0x0F
    0x1f 0x1f
    0x3F 0x1f

    因此、MACINDEX 位域看起来是4:0而不是2:0。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗯、这与我在8月18日提到的情况相匹配。 地址表长度为32个条目。

    我们是否可以转储地址表以查看其中包含哪些内容?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Dennis

    下面是表的转储。 我通过置位 MACINDEX 寄存器、然后读取 MACADDRLO 和 MACADDRHI 寄存器来创建这个转储。 MACADDRHI 寄存器不应受 MACINDEX 寄存器的影响、但我看到它在 MACINDEX 8-31中的值发生了变化、这让我想知道 TRM 对于 MACINDEX 为2:0是否正确

    索引 MACADDRLO MACADDRHI
    0 0x0018ED51 0x12A73000
    1 0x0000ED51 0x12A73000
    2. 0x0000ED51 0x12A73000
    3. 0x0000ED51 0x12A73000
    4. 0x0000ED51 0x12A73000
    5. 0x0000ED51 0x12A73000
    6. 0x0000ED51 0x12A73000
    7. 0x0000ED51 0x12A73000
    8. 0x001F1B73 0xB0A4C70F
    9. 0x0019B14C 0x6B6F821B
    10. 0x00108A6B 0x479443E8
    11. 0x001A638F 0x4B20891C
    12. 0x0002B454 0x051D2AC9
    13. 0x00011100 0x40BD8C9B
    14. 0x00077310 0xE6C284E1
    15. 0x00015FB1 0x151D98AE
    16. 0x001F2918 0xDA4B989E
    17. 0x000FBD1A 0x055DC1A6
    18 0x0010FFC2 0x73347247
    19. 0x0009B573 0x62F58F1A
    20. 0x001D219C 0x62C4224F
    21. 0x000430AA 0xBB52993C
    22. 0x0004BD0E 0xC9307D9F
    23 0x001EA853 0x09B1CEF8
    24 0x001B0820 0x90B75F0E
    25 0x000E29D2 0x1AB7CE36
    26 0x001004AB 0x62064A64
    27. 0x0018C2B5 0xF11C968F
    28. 0x001CA7EC 0xD1572359
    29. 0x00174244 0x00870960
    30 0x000B9BF1 0x265EB063
    31. 0x000BB053 0x57206BBD

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Gabriel、

    假设有32个地址、您现在能否使用以下写入规则(类型2规则)写入所有32个地址

    每个地址位置的53位被写入三个连续的32位 VBUS 访问。  主机必须将索引写入 MacIndex (4:0)寄存器的 RAM 中、后跟地址的高32位(存储在保存寄存器中)、后跟地址的低16位(带有控制位)。  写入低位位置时、将写入53位索引 RAM 位置。

    因此、写入32 个 MAC 地址中的每一个都有这些步骤

    []编写 MACINDEX

    []将 MAC 地址的32位高电平部分写入 MACADDRHI

    []将 MAC 地址和控制位的16位低电平部分写入 MACADDRLO

    对于类型2地址、不共享 MACADDRHI、因此它们可以是唯一的。

    如果您可以再次测试、那将非常好。

    此致、

    -Gunter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Gunter

    我想我们已经发现了这个问题。 如果我使用类型2规则为所有32个索引(而不是8个)设置 MACADDRHI 和 MACADDRLO、那么我不再接收不需要的多播流量。 由于 EMAC 文档描述的 MACINDEX 行为不正确、我们什么时候可以看到 EMAC 文档的更正副本?

    感谢所有的帮助和坚持不懈、

    Gabriel