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.

[参考译文] AM2434:PRU 缺少 RGMII 接收数据

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1606097/am2434-pru-missing-rgmii-receive-data

器件型号: AM2434

您好、

继续浏览 https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1505525/am2434-pru-icssg-rgmii-rx_tx-taskmanager-not-working-correctly:
IM 仍然面临通过 RGMII 接收超过 96 字节的问题。 问题似乎是有时未调用 NB_task、这会导致应用程序丢失 32 字节的块。 请提供最多 256 字节的工作示例。

此致

Lucas

 

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

    您好、Lucas:

    目前、我离岗到周末。 请预计响应会延迟到那时。 同时、我将向开发团队循环此主题、以检查是否可以提出任何建议。

    谢谢。此致、
    Teja。

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

    我发现了该问题的解决方案:需要设置 ICSSG_CORE_SYNC_REG 的 CORE_VBUSP_SYNC_EN 位。
    这会导致任务管理器正确处理传入的 RGMII Rx 数据、并且不会丢失任何中断或字节。  

    此致

    Lucas

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

    由于我找到了第一个问题的解决方案、因此我想讨论一些可能相关的 PRU 的奇怪行为:

    我在 prg0_pru0/pruicss0 上运行 PRU RGMII 驱动程序、在 pruicss1 上运行 EtherCAT tiesc。 RGMII 驱动程序基于 SORTE_G、但没有 phy 代码、因此基本是用于发送和接收的 RGMII 和任务管理器设置。 之后、主程序或后台任务在繁忙的循环中等待一些信号、然后传输数据。 RECEIVE 由任务管理器管理、应独立于发送。

    此代码等待信号(从 r5f0_1、r5f1_0、r5f1_1 产生 3 个中断):
     WAIT_FOR_INTERRUPT:
    ;轮询中断寄存器
       LDI   r0.W0、0x0208
       ldi   r0.w2、0x3002
      Lbbo  &r1、r0、0、4
      qbne  wait_for_interrupt、r1.b0、0x07

    现在对于奇怪的行为:接收到的数据是完全正常的、直到带有手动 mdio 和 tiesc 的 EtherCAT 驱动程序加载到 pruicss1 中、之后接收的数据似乎被一些重定向值覆盖、有时在~200us 和 11ms 之间的时间范围内(每 20us 发送和接收一次 RGMII 数据)。 接收到的数据可以正常并加载到 PRU 寄存器 R2-R9 中、但通过 xfr2vbus 或 sbbo 指令推入存储器的数据(已测试两者)与之前在寄存器中看到的数据不同。 我将存储器位置从 msram 更改为 PRU 局部 ram、但在覆盖数据的内容上没有区别、另外、在存储器位置上放置硬件断点似乎会注意到来自 r5f 内核的任何写入操作、这些写入操作可能会覆盖数据。

    将 4 线轮询替换为直接偏移负载解决了问题:
    WAIT_FOR_INTERRUPT:
    ;轮询中断寄存器
      Lbco  &R1、C6、0x08、4
      qbne  wait_for_interrupt、r1.b0、0x07

    有什么原因导致这种行为有什么解释吗?

    此致

    Lucas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“634641" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1606097/am2434-pru-missing-rgmii-receive-data/6213291 ]   LDI   r0.w0、0x0208
       ldi   r0.w2、0x3002
      lbbo  &r1、r0、0、4

    这些访问 INTC 寄存器通过外部地址(而不是 0x20208 本地)访问、因此、在 EtherCAT 并行运行时、访问会进入 ICSSG 外部进行互连、具体取决于仲裁 (R5F 堆栈可能会以高速率循环访问 ICSSG DMEM/SMEM)-没有仲裁本身、延迟为 42 个 PRU 周期左右、当 EtherCAT 并行运行时、这可能更高、并可能会中断自定义固件的时序