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.

[参考译文] AM4378:在 AM4378处理器中加载 PRU-ICSS 固件时出现问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1497651/am4378-problem-in-loading-pru-icss-firmware-in-the-am4378-processor

器件型号:AM4378
主题:AM4372中讨论的其他器件

工具/软件:

我有一个基于 AM4372处理器的定制板。 我的 Linux 内核版本为 5.4.106-rt54、使用 ti-processor-sdk-linux-RT-AM437X-EVM-07.03.00.005构建。 我想在此平台中使用 PRU UART、但如果使用预构建固件或在 PRU-software-support-package 和 ti-CGT-PRU_2.3.3中编译来自源代码的固件、然后使用回声命令手动加载并启动它、会出现以下消息。

用户空间消息:
  echo:写入错误:参数无效

内核消息:
  Remoteproc Remoteproc0:启动54434000.PRU
  Remoteproc Remoteproc0:引导固件映像 PRU_Hardware_UART.out、大小为30668
  Remoteproc remoteproc0:引导失败:-22

另外一点是、使用 SoM 供应商提供的预构建固件时、这些错误不会显示、并且固件加载成功且 PRU 内核上电。

问题是什么?

谢谢

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

    您好!

    这里可能会发生一些事情。

    首先、Linux 内核5.4应使用 PRU 软件支持包(PSSP) v5.9.0或更早版本。 请确认您使用的 PSSP 版本:
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/

    可能导致错误代码-22的一件事是缺少资源表。 有关更多信息、请参阅"资源表"页面:
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/

    我假设您正在构建 PRU 硬件 UART 示例而未进行任何修改?
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am437x/PRU_Hardware_UART?h=v5.9.0

    此致、

    Nick

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

    感谢您的答复。
    此问题已解决、但我无法使用驱动程序、因为我没有任何开发标准固件的资源手册。  
    示例包含环回测试、但我不知道固件的标准结构以及应该在其中开发哪些函数。

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

    你好、MOH、

    请详细说明您在系统中尝试执行的操作。

    例如、是否只需要 Linux 的一个额外 UART 端口、以及是否希望 Linux 能够在 PRU 子系统中使用硬件 UART? 在这种情况下、您实际上不需要对 PRU 内核进行编程。 您可以只对 Linux 进行编程。 您将看到适用于 AM335x 的 Linux 驱动程序、并且您可以修改驱动程序和器件树文件以在 Foundational_Components Linux_Drivers 中添加对相同软件的支持:https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/09_03_05_02/exports/docs/linux/AM437x/PRU-ICSS/Linux/ pruss-uart.html

    如果您要执行其他操作、请解释用例。

    此致、

    Nick

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

    我需要 Linux 的额外 UART 端口、该端口由 PRU 内核而不是主内核控制。 我之前 使用8250_pruss.c 驱动程序在 PRU 子系统中启动硬件 UART、但由于硬件限制、这个额外 UART 的性能对于我的应用来说并不足够。 我想增加一个在实时响应方面与主要 UART 端口或更好的端口相同的 UART 端口。

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

    你好、MOH、

    如果我有任何误解、请纠正我:

    1)你想要的东西能够听到 UART 端口上的输入,然后快速响应(即,有一个很好的"实时响应")

    2)当 Linux 控制 UART 端口时,即使在运行 RT Linux 时, Linux 也没有足够快的响应

    后续问题:

    1)您需要的"周期时间"是多少? (UART 信号到达处理器与需要执行操作之间相隔多长时间?)

    2)在 UART 输入后需要执行什么操作?

    3)是否需要在 Linux 和 PRU 内核之间进行处理器间通信(IPC)? 如果是、此 IPC 是否需要在周期时间内进行?

    此致、

    Nick

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

    主 UART 可以正常工作、但由主处理器控制的额外 PRU UART 在总线负载较高时无法正确响应。 出现这种问题的原因是、与主 UART 的64字节 FIFO 大小相比、其 FIFO 大小仅为16个字节、并且主处理器无法有效处理中断。 我怀疑如果额外的 PRU UART 由 PRU 内核控制、则问题可能会得到解决。

    在我的测试期间、接收到的数据包的频率为200Hz。 除了计算接收到的大约120字节数据包的 CRC 校验之外、在该周期内未执行任何重要的处理。 不过、由于一些字节丢失、大约1%的数据包未能正确接收。

     我的项目中没有任何处理器间通信。