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.

[参考译文] RTOS/AM3356:PRU 以太网帧接收问题

Guru**** 2620175 points

Other Parts Discussed in Thread: DP83640

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/648493/rtos-am3356-pru-ethernet-frame-receive-problem

器件型号:AM3356
主题中讨论的其他器件:DP83640

工具/软件:TI-RTOS

您好!

我目前正在将 PRU-ICSS-PROFINET-SLAVE 01.00.01.00移植到定制硬件平台。 尝试向平台发送以太网帧时遇到问题。

发送以太网帧时、我看不到 ICSS_EmacRxInterruptHandler 的执行。

我能够确认、当我从平台上插入 RJ45以太网电缆并将其拔出时、我看到 ICCS_EmacLinkISR 正在执行。

使用调试器时、我暂停执行并检查 PRU ICSS SRSR0和 SRSR1寄存器(根据 SPRUHF8A)。 我认为这两个寄存器会报告挂起的中断。

暂停时、当我插入/拔下以太网电缆时、我看到 SRSR1 (地址0x4a320200)从0x0变为0x200。 0x200对应于系统事件41。

SPRUHF8A 文档和 tiswitch_pruss_intc_mapping.h 头文件在 examples\Profinet slave 目录中的内容似乎都表明系统事件41与 MMI_LINK0_EVENT (#define MMI_LINK0_EVENT 41)关联。 PRUSS_INTC_INITDATA 的#define 还将系统事件41设置为 CHANNEL7。

如果再次使用执行暂停的调试器、我向平台发送 ping、我看到 SRSR1从0x0更改为0xc。 在本例中、0xc 对应于系统事件35和系统事件36。

事件35和事件36似乎不是预期的系统事件--至少通过 PORT1_RX_EOF_EVENT (#define as 42)和 PORT2_RX_EOF_EVENT (#define as 54)的#define 来实现。

我已检查 PRU_ICSS MII_RT 寄存器(0x4a326002c)、并将其设置为0x1。 这似乎是正确的、当 PRU 接收到以太网帧时、我应该期待 Port1_RX_EOF_EVENT 或 port2_RX_EOF_EVENT。

我不确定如何继续。 您能否就如何确定正在发生的事情提供任何建议?

我使用的是 NDK 2.25.01.11、PDK AM335x_1_0_6、SDK RTOS AM335x_3_03_00_04和 PRU-ICSS-PROFINET-SLAVE 01.00.01.00。

谢谢。

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mark、

    根据您的详细分析、由于事件36 PRU0_RX_CRC、Port1_RX_EOF_EVENT 似乎从未发生。 CRC 错误事件应阻止 ICCS_EmacLinkISR 的执行。

    您是否尝试运行 ICSS_EMAC 环回单元测试来验证数据包是否可以在电路板上正确传输? 您还可以稍微修改代码以从外部流量生成器接收数据包。
    如果环回测试通过、您可以尝试在 PDK 中使用 Nimu ICSS EMAC 示例对电路板执行 ping 操作、然后查看是否得到相同的 CRC 错误。
    processors.wiki.ti.com/.../Processor_SDK_RTOS_ICSS-EMAC(DRIVER,FIRMWARE)
    processors.wiki.ti.com/.../Processor_SDK_RTOS_NDK

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

    Garrett、

     

    我遇到的问题是、PRU 似乎看不到接收到的 ENET 帧、这仅发生在我当前的移植工作中。   移植工作是使用最新版本的 NDK、PDK 和 PROFINET。

     

    我有一个早期版本、该版本能够正确接收和发送基于大约2015版本的 NDK、PDK、PROFINET 等的 ENET 帧

     

    我执行了另一个调试练习、其中包括调试工作版本、记录 PRU MII 引脚(0x44e108a0至0x443108d8)和 PRU 配置寄存器(0x4a326000至0x4a326054)的 PINMUX 设置、然后与不工作版本进行比较。

     

    PINMUX 设置完全相同、但 PRU ICSS 配置寄存器有一些差异:

     

     

    PRU_ICSS_CFG SYSCFG 寄存  器(0x4a326004)包含工作版本上的值0xA、非工作版本上的值0x36。

     

    PRU_ICSS_CFG CPCFG0 寄存  器(0x4a326008)在工作版本中包含0x3值、在非工作版本中包含0x1值。

     

    PRU_ICSS_CFG CPCFG1 寄存  器(0x4a32600c)在工作版本中包含值0x3、在非工作版本中包含值0x1。

     

    基于 SPRUHF8A 中的寄存器字段描述、CPCFG0和 CPCFG1寄存器差异对于我来说似乎令人担忧:      值1将 PRUx_GPI_MODE 设置为" 16并行捕获模式"、值3将模式设置为" Mi_RT 模式"。     这可能是我的问题的一部分吗?   

     

    PRUSSDRVPrucfgInit 函数执行 CPCFG0和 CPCFG1寄存器的初始化。   根据 ICSS_VERSION 的值将寄存器设置为0x1或0x3 (对于 ICSS_VERSION >= 0x201、设置为1)。       我相信 ICSS_VERSION 是通过读取 PRU_ICSS_CFG REVID 寄存器(0x4a326000)获得的–对于工作和不工作的寄存器、值均为0x47000000–产生的 ICSS_VERSION 为0x0

     

    这可以解释我接收 ENET 帧时遇到的问题吗?

     

    此外、SPRUHF8A-May2012是否于2013年6月修订为最新版本–该信息是否仍然准确?   如果有较新版本和/或较新文档、请提供链接。

     

    谢谢、

     

    标记

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

    SYSCFG、CPCFG0/1应初始化为工作版本-启用 OCP 主端口、Mi_RT 模式。

    您可以在 AM335x TRM SPRUH73P - www.ti.com/lit/ug/spruh73p/spruh73p.pdf 中找到最新的寄存器定义。 SPRUHF8似乎已停产、因为其大部分内容包含在 TRM 中、我们将 PASM 编译器转移到 TI PRU 编译器。

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

    感谢这个链接--不知道我是如何找到 SPRUHF8的--可能是谷歌搜索某个东西的。 甚至不想在 SPRUH73中查看。

    另一个问题:在 PRUSSDRVPrucfgInit 函数中测试的 ICSS_version 的预期版本是什么。

    我猜我的问题的另一个症状是 ICSS_VERSION 报告不正确。

    版本在 PRUICSS_create 中读取--我只是使用调试器来确认我正在从新端口中的地址0x4a326000读取0x47000000。

    代码的写入方式、我希望我应该从地址0x4a326000中读取0x47000201或更高版本。

    谢谢、

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

    Mark、

    0x47000201仅适用于 Sitara AM57x 系列。 我将了解设置 GPI 模式(Mi_RT 与16位并行捕捉)的背景信息、具体取决于 ICSS_VERSION。 在 PRUSSDRVPrucfgInit()之后以及在 PRU 上执行程序之前,是否尝试重新配置 SYSCFG/GPCFG0/GPCFG1?

    此致、Garrett

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

    Mark、

    更新 SYSCFG/GPCFG0/GPCFG1后、您是否能够解决以太网帧接收问题?

    此致、Garrett

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

    您好、Garrett、

    感谢后续行动!!!    遗憾的是、当我更新 SYSCFG/GPCF0/GPCFG1时、它似乎没有帮助。     我确实确认了我在 MII RXD 和时钟线路上获得了良好的信号、因此我认为 PHY 芯片配置正确且工作正常。

    我当前的工作是从 ICE2板上的 PROFINET 从站示例中执行"最小"端口。    不幸的是、事实证明、这比我希望的复杂得多、昨天我让它运行得非常好、足以确定我甚至看不到链路中断。

    如果您可以提供进一步的建议、了解如何进一步解决 RX 中断缺失的问题、 我认为这是我的更好的前进道路。

    谢谢、

    标记

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

    将 PROFINET 1.0.1移植到定制板时需要付出哪些努力? 是否可以在此处上传、以便我们可以帮助审核? 将 GPCFG 寄存器更新为 MI_RT 后、是否仍会看到相同的 CRC 错误事件? 您可以使用默认的 PROFINET 从站版本和您的电路板之间的呼叫流进行分步比较、而不是将 PROFINET 从站的最低版本移植到 ICEv2电路板?

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

    您好、Garret、

    我继续进行这方面的工作、我的最新步骤是在我们的平台上执行 ICEV2示例的另一个最小端口。

    在最小端口后、我能够让我们的平台成功响应以太网 ping。  我在 ICSS_EmacRxPkInfo2函数中设置了一个断点、并在处理接收到的 ARP 帧时检查了 RxPktInfo 结构。  RxPktInfo 结构的端口为1、队列为3。

    然后、我继续执行与平台功能要求相关的移植的第二步。   该平台具有两个以太网端口、但要求在任何时候只有其中一个处于活动状态、并且在上电期间读取跳线将确定两个端口中的哪一个处于活动状态。   我的测试代码仅尝试使用 ICSS_EMAC_MODE_MAC1、  但最终我计划让跳线在 MAC1和 MAC2之间做出决定。

    我修改了 main.c 代码、仅将 switchEmaccfg->portMask 从 ICSS_EMAC_MODE_SWITCH 更改为 ICSS_EMAC_MODE_MAC1、然后再次运行 ping 测试。   我观察到的结果与我之前看到的结果一样-- 我在插入/拔下以太网电缆时看到了链路中断, 但没有看到任何 RX 中断。

    我所做的更改如下所示。    通过定义"工作"、包括了代码原始代码、此代码确实响应了 ping。   当未定义"工作"时、几行代码被更改为 ICSS_EMAC_MODE_MAC1。

    当我将 switchEmaccfg->portMask 从 ICSS_EMAC_MODE_SWITCH 设置为 ICSS_EMAC_MODE_MAC1时,似乎没有正确完成操作。

    有几个问题:

    1) 1)  我正在使用的 PHY 芯片连接到 PR1_MII0。     ICSS_EMAC_MODE_MAC1是正确的选择吗?

    2) 2) 我可以继续执行的另一个选项是将 portMask 设置为 ICSS_EMAC_MODE_SWITCH 并禁用未使用的 PHY。   我们使用的是 DP83640 PHY、设置 PHY BMCR 寄存器的位10会隔离 PHY、我认为 PHY 应该有效地禁用它。     这是否起作用?    如果使用此选项、您是否看到任何其他问题或性能问题?

    3) 3)如果为 MAC1或 MAC2进行配置、 我是否需要使用不同的 PRUSS_INTC_INITDATA 结构而不是用于开关的结构?    如果是、 您能给我指出用于 MAC1和 MAC2的正确结构吗?

    4) 4)我注意到 PRU ICSS PROFINET (wiki.ti.com/index.php/PRU_ICSS_Profinet)--版本01.00.02 (使用 PROCESSOR-SDK-RTOS 04_02_09)的新版本、其版本为"2018年2月"。    您是否建议使用此版本?

    感谢您提供的任何帮助、

    标记

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

    尽管双 Mac 模式(ICSS_EMAC_MODE_MAC1)在独立的 PDK ICSS_EMAC 驱动程序中进行了测试。 建议与端口模式(ICSS_EMAC_MODE_SWITCH)上的默认 PROFINET 配置保持一致。

    1) 1)建议保留 ICSS_EMAC_MODE_SWITCH。

    2) 2)它应该能够将端口与 MII 隔离、但串行管理除外。 没有性能问题。

    3) 3)如果要尝试双 MAC 模式、是的、则交换机和双 MAC 之间的 PRUSS_INTC_INITDATA 结构不同、请参阅 pdk_AM335x_1_0_9\packages/ti\board\diag\ICSS_EMAC\src 中的 tiemac_pruss_intc_mapping.h

    4)是的、建议使用新版本1.0.2、该版本基于最新的 Processor SDK RTOS 4.2、可在几天内获得。

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Garrett 的支持。 当版本1.0.2可用时、我在哪里可以找到它?

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

    Mark、

    版本1.0.2将在 www.ti.com/.../PRU-ICSS-INDUSTRIAL-SW 上发布
    我们正与 CM/Web 团队合作、以便很快将其上线。

    此致、
    Garrett