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.
您好的支持团队!
我使用 MSP432E401Y。 我在 Code Composer Studio 中编写一个汇编代码。
我想使用标准的 MSP432E401Y 功能进行 MAC 滤波。 首先、我尝试启用目标 MAC 过滤。 我将 MAC 写入 EMACADDR0L 和 EMACADDR0H。 目的 MAC 过滤功能完美。
对于源 MAC 过滤、我将采取以下步骤:
-我将 MAC 地址写入 EMACADDR1L 和 EMACADDR1H;
-我将寄存器 EMACADDR1H 中的第31位(AE)置位(地址滤波器模块使用第二个地址进行完美滤波)、第30位(SA)(MAC Address1[47:0]用于与接收帧的 SA 字段进行比较);
-我将寄存器 EMACFRAMEFLTR 中的位9 (SAF)置位(源地址滤波器被启用)。 EMACFRAMEFLTR 的所有其它位为0。
您将询问我如何检查滤波。 我向 MCU 发送一个具有以下参数的以太网帧:
-帧的目的 MAC 地址与 EMACADDR0x 中的地址不匹配
-帧的源 MAC 地址与 EMACADDR1x 中的地址匹配。
但 DMA 会丢弃帧。 我认为帧应该被接收、因为 EMACFRAMEFLTR 的第31位被清零(MAC RX 模块只传递通过 SA 或 DA 地址滤波器的帧)。
此外、我清零 EMACADDR1H 中的位30 (SA)(MAC 地址1[47:0]用于与接收帧的 DA 域进行比较)、并发送与 EMACADDR1x 中的地址匹配的目标 MAC 地址帧。 但 DMA 会再次丢弃数据包。 只有当帧的目的 MAC 字段与 EMACADDR0x 匹配时、EMAC 才会接收帧。
我没有发现我的错误。 看起来 EMACADDR1x 始终处于禁用状态。 EMAC“看不到”位于 EMACADDR1x 中的地址。 但位31 (AE)= 1。 我在调试会话期间在"Registers"窗口中进行了检查。
请帮帮我。 我觉得这个错误很小。
此致。
Eugen、您好!
根据您的解释、我在这里看不到任何明显的错误。
[引用 userid="471209" URL"~μ C/support/microriers/arm-based microrims-group/arm -based microrims/f/arm based microrims-forum/1124301/msp432e401y-source-mac-filtering-do-act"] AddressI clear 和 EMACADDR147中用于发送地址帧的位30 (SA)与 EMACADDR1中的 MAC 地址匹配,并与目标地址1:MAC 地址匹配。 但 DMA 会再次丢弃数据包。 EMAC 仅在帧的目的 MAC 字段与 EMACADDR0x 匹配时接收帧。[/QUERP]非常有趣。 使用 EMACADDR2x 时是否会发生相同的故障?
[~ userid="471209" URL" URL"μ C/support/microrims/arm-based microrims-group/arm -based microrims/f/arm based 微控制器-forume/1124301/msp432e401y-source-mac-filtering-do-act"]我没有发现我的错误。 看起来 EMACADDR1x 始终处于禁用状态。 EMAC“看不到”位于 EMACADDR1x 中的地址。 但位31 (AE)= 1。 我在调试会话期间在"Registers"窗口中进行了检查。
[/报价]要清除的是、您是否看到 在调试会话期间正确加载了预期的 MAC 地址?
在 EMACADDR1H 寄存器的[47:0]位设置为什么 MAC 地址?发送的地址是什么?
此致、
Brandon Fisher
尊敬的 Brandon:
非常感谢您的回复。 我会回答您的问题。
我没有尝试使用 EMACADDR2x 和 EMACADDR3x 执行此任务。 我将这样做(星期一,而不是更早)。
EMACADDR1x 和调试会话。 我有 MAC 00:39:11:2E:EE:22、因此我写:
EMACADDR1L:= 0x2E113900
EMACADDR1H:= 0x000022EE
然后、我修改位31和30:
EMACADDR1H:= 0xC00022EE
在调试会话期间,执行所有操作后,我会在 EMACADDR1H 中看到“0xC00022EE”。 因此、我 正确地写入了 EMACADDR1H。
发送 UDP 帧的 SA 字段= 00:39:11:2E:EE:22、DA 字段= 00:39:11:2E:EE:21。 从我的角度来看、EMAC 必须接收帧、因为其 SA 字段与 EMACADDR1x 匹配。 我添加了、为了避免 DA 匹配、我将00:39:11:2E:EE:90写入 EMACADDR0x。
此致。
Eugen、您好!
我在这些器件上进行 MAC 过滤的经验有限、但基于源地址和目标地址的寄存器值设置根据 TRM 看起来确实正确。 您可以尝试运行监听器来捕获实际的以太网流量。
此致、
Brandon Fisher
您好、Brandon。
我也尝试应用 EMACADDR2x 和 EMACADDR3x。 结果是相同的。
我尝试从另一侧检查滤波功能。 我将 EMACFRAMEFLTR 的位31置位、所有其他位为零。 在此模式下,“MAC 接收器模块将所有接收到的帧传递 给应用程序,而不管它们是否传递地址过滤器。 SA 或 DA 过滤的结果在接收状态字中相应的位被更新(通过或失败)”(SLAU723A、p946)。 在调试会话期间(带有断点)、我检查 RDES0的位30 (AFM)和位13 (SAF)。 我看到,位30变为“1”,但位13始终为“0”。
是的、我始终使用 Wireshark 检查以太网流量。 此应用对于编程人员非常有用、可用作电工用的示波器。
请尊敬的 Brandon、如果您发现 MAC 过滤的有用特点、请告诉我。
此致。
Eugen、您好!
我将更深入地研究这一点、看看我们是否有类似的示例、您可以对比一下。 我将在明天向您提供最新信息。
不过、在我看来、您描述的寄存器设置 应该是正确的、以便 进行完美的滤波。
此致、
Brandon Fisher
您好 Brandon。
感谢您的搜索。 我希望您能找到该示例。
我找到了一个解决方案、但这是一个糟糕的解决方案。 我以软件的方式过滤帧、但不在硬件中过滤帧。 我知道、这是一种异常的解决方案、但它部分解决了我的问题。 另一方面、通过这种方式、我可以创建更复杂的滤波器、其中包括优先级和各种条件。
对我来说,真正的解决办法是令人感兴趣的,所以我将等待你的答复。
此致。
Eugen、您好!
很抱歉耽误你的时间。 我很高兴您目前至少有某种变通办法。
浏览我们的代码库并 与我的一些同事一起检查它似乎没有显示出来、我们有显示完美滤波器设置的示例代码。MSP432E401Y 和 TMP4C129都是如此、它们具有类似的以太网外设、具有相似的配置要求。
我会要求检查您的源代码、但在汇编语言中编写此代码可能超出了我们的支持范围。
此致、
Brandon Fisher
您好 Brandon。
无论如何、非常感谢您。
是的、我可以为您提供我的代码的一部分。 整个代码太大。 但有很多事情是无法理解的,没有完整的准则和评论… 我可以将代码的一部分删除、然后删除所有次要详细信息、将评论翻译成英文。 我需要时间来完成它。
当听到我编写汇编代码时、许多人感到惊讶。 它是如此的陈旧。 但我发现汇编代码更简单、更易于理解。
此致。