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.

[参考译文] TMDS64EVM:PRU 通过 Remoteproc 运行时不获取 GPIO 输入

Guru**** 2481465 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1446898/tmds64evm-pru-gets-no-gpio-input-when-run-via-remoteproc

器件型号:TMDS64EVM
主题中讨论的其他器件:SysConfig

工具与软件:

您好!
我一直在尝试 从 PRU 向 Linux 用户空间发送高速扩展输入数据。

Remoteproc 和 RPMSG 对我来说工作正常、我可以将字符串从 PRU 发送到 Linux 上指定的 rpmsg 文件。

现在、我希望从 R31获取输入、并使用 rpmsg 将其发送出去。
我注意到、当我使用 Yocto Linux 引导 EVM 板并通过启动目标配置来连接调试器、并连接到 PRU 时、在加载固件并启动固件之后、R31寄存器在连接的输入信号下根本不会发生变化。



一个工程会启动"empty_am64x-evm_r5fss0-0_freertos_ti-arm-clang"示例、每个 GPIO PRU 在 SysConfig 中都配置为"Input"。
在 R5_0_0内核上启动该程序后、我为 PRU 加载另一个示例工程、该工程基本上不会执行任何操作、只会设置"ct_CFG.gpcfg0_reg = 0;"
通过偏置和恢复 PRU 项目、我可以读取 R31寄存器中的内容。 现在我得到预期的结果。



在 Linux 上使用 Remoteproc 运行 Msg_Echo_Interrupt 固件时、可从 PRU 软件支持包中运行"pru_SC720"示例、并添加类似以下内容: "ct_CFG.gpcfg0_reg = 0;"
我运行该固件的方法是将固件保存在板上(在/usr/lib/firmware 中)并将固件文件的名称保存在右侧 Pru Remoteproc (例如"echo 'firmwarename.out'> sys/class/remoteproc/remoteproc/firmware")、然后启动它并使用 cat 命令读取随后创建的 rpmsg_pru 文件。
然后我使用 CCS 连接到 PRU0_0内核、并暂停/恢复它以读取寄存器、但这次它保持在 0x40000000。

我是否遗漏了某些内容或者我是否可能未能设置标记?
非常感谢您的任何帮助!

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

    您好!

    听起来您想要读取 PRU GPI 信号。 为了做到这一点、我们需要确保您的 pinmux 设置正确。

    在 Linux 初始化 PRU 内核时、您如何设置 PRU 信号的 pinmux?

    在下一主题中、我将讨论从 Linux 为 PRU 设置引脚复用的一种方法:
    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1442234/processor-sdk-am62x-am62x-pruss-core

    此致、

    Nick

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

    您好、Nick。
    我尝试过您在其他论坛帖子中提到的解决方案。 我是这样做的:
    我首先查看需要添加哪些引脚多路复用设置、方法是转到 SysConfig 并为我要在本例中使用的 Pru0_0添加 P_RU_ICSSG0_PRU:

    然后、我访问了 SDK 并访问了 ti-processor-sdk-linux-am64xx-evm-10.00.07.04-linux\board-support\ti-linux-kernel-6.6.6.32+git-ti\arch\arm64\boot\dts\ti 并 使用编辑器打开 k3-am642-evm.dts。

    我 deletet rgmii1_pins_default 和 rgmii2_pins_default :  
    以及 &cpsw3g :
    因为它们将我需要的某些 Prg0_Pru0引脚用作输入。

    之后、我将所需的所有引脚添加到文件中:

    完成后、我使用 WSL Ubuntu 22.04.05LTS 翻译了文件:  

    然后、我使用 scp 将/boot/dtb/ti 中现有的 k3-am642-evm.dtb 文件替换为新转换的文件、以此将 DTB 文件移动到电路板中。
    然后我重新启动板。 并再次尝试读取 intput、只是在通过 CCS (固件正在运行)读取时、在寄存器 R31中停留在相同的"0x40000000"位置。

    我有一种感觉、因为我只添加了 SysConfig 显示的内容、即它不符合实际使用。
    我曾看到过您提到的 UART 示例、将 Pinmux 设置添加到 此处的相关 UART 声明中
    但我在 PRU 的任何地方都没有看到我可能输入了 PRU0_0所需的设置。

    有没有遗漏的东西?
    提前感谢您的帮助!


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

    您好!

    您的 PinMux 设置"mypru...pins_default"是否实际由任何器件节点引用?

    Linux 内核仅在从得到探测的 devicetree 节点链接 Pinmux 设置时才会应用这些设置、因此仅将其添加到 devicetree 文件是不够的。 这就是为什么我建议将 pinmux 设置添加到在前一个 e2e 主题中探测的驱动程序的 pinmux 设置中的原因。

    在调试期间、您还可以检查 EVM 上应用的实际引脚多路复用设置。 我在此提供一个示例、说明如何做到这一点:
    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1421640/am625-what-is-difference-between-the-pr0_ecap0_in_apwm_out-and-ecap2_in_apwm_out-signals/5521914#5521914 

    此致、

    Nick