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.

[参考译文] PROCESSOR-SDK-AM335X:在通过 CCS 调试 PRU 时、控制未使用 OCP 直接连接到 PRU 的 GPIO

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

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1420991/processor-sdk-am335x-control-gpios-not-directly-connected-to-prus-using-ocp-when-debugging-pru-via-ccs

器件型号:PROCESSOR-SDK-AM335X
主题中讨论的其他器件:SysConfig

工具与软件:

您好!

我需要使用 PRU 驱动 BeagleBone Black 的 P8_8 ~ GPIO2_3。 我将按照第一个示例"3.5.1.2"中的设置。 实验1:使用 PRU GPO切 换 LED" 。 我已经添加了以下 CONTROL_MODULE 寄存器更改、以将 pinmux 配置为 GEL 脚本的 PRU_PINMUX_Config ()中的模式7。 我确定了范围并证明、在 Cortex-A8上运行 GEL 脚本时、上拉更改是有效的。

    // CONTROL_MODULE register address is 0x44E1000, pin offset for P8_8 is 0x894
    *((unsigned int*) 0x44E10894) = AM335X_PIN_OUTPUT | 7;
    *((unsigned int*) 0x44E10894) = AM335X_PIN_OUTPUT_PULLUP | AM335X_PULL_UP;

下面是加载到 PRU0上的代码、如果使用 Code Composer Studio 进行调试、该代码无法切换 P8_8。 我还尝试了使用完整的 beaglebonebrack.gel 来初始化 所有内容、方法是先启动 AM335x_Beagconstrica Black_Initialization ()、然后再次启动 PRU_ICSS_Init ()来在顶部应用新的 pinmux 设置并停止 PRU、这样我就可以断开 Cortex-A8连接到 PRU0并加载下面编译的代码。  

如果我想 像在上面的 SDK 示例中那样使用 IDE 进行调试、是否有人可以帮助了解在允许 PRU 通过 OCP 控制此 GPIO 时缺少什么内容?

提前感谢您!

#include <stdint.h>
#include <pru_cfg.h>

#define GPIO2 0x481AC000
#define GPIO_CLEARDATAOUT   0x190/4     // Write 1 here to set a given bit
#define GPIO_SETDATAOUT     0x194/4     // A 1 here clears the corresponding bit

void main(void)
{
    // Clear SYSCFG[STANDBY_INIT] to enable OCP master port
    CT_CFG.SYSCFG_bit.STANDBY_INIT = 0;

/* No effect
*    // unlock the BOOT_CFG space kick mechanism
*    *(volatile unsigned int *)(0x02620038) = 0x83E70B13; // BOOTCFG_KICK0
*    *(volatile unsigned int *)(0x0262003C) = 0x95A4F1E0; // BOOTCFG_KICK1
*/

    uint32_t *gpio2 = (uint32_t *)GPIO2;

    while(1) {
        gpio2[GPIO_CLEARDATAOUT] = (0x1<<3);
        __delay_cycles(10000);
        gpio2[GPIO_SETDATAOUT] = (0x1<<3);
        __delay_cycles(10000);
    }

    // Halt the PRU core
    __halt();
}

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

    您好!

    首先、您是尝试通过 GPIO 模块对 GPIO 引脚进行读写(由于信号必须通过处理器传输、然后传输到 GPIO 模块、然后 GPIO 模块实际上是对引脚进行读取或写入操作、这实际上需要一些时间)、还是您是尝试按照实践实验对 PRU GPI/PRU GPO 信号进行编程? 这些信号直接连接到 PRU 内核、因此读写速度超快。 如需更多信息、请参阅此常见问题解答:

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1269989/faq-what-is-a-pru-core-why-are-pru-gpio-signals-different-from-regular-gpios

    对于读取和写入 PRU GPI/PRU GPO 信号的示例、动手实验是一个很好的起点。 您可能还想尝试切换每一个 GPO 信号、以便更轻松地进行编程、因为您不必担心具体读取哪个引脚:
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am335x/PRU_gpioToggle/PRU_gpioToggle.c

    此致、

    Nick

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

    您好、Nick。

    感谢您的答复。 遗憾的是、由于硬件设计、我需要使用未映射到 PRU 多路复用器的 GPIO。 根据示例、我可以轻松地控制 PRU GPO、而不会出现问题。

    我已搜索论坛、SDK 以及 AM335x PRU-ICSS 参考指南和 AM335x 技术参考手册、但尚未弄清楚使用 CCS 加载此文件时缺少什么。

    再次感谢!

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

    您好!

    请注意、下周我都会去度假。 我将在10月14日这一周回到论坛。

    1) 1)让我们来讨论您的用例、以确保 GPIO 模块有意义  

    通常我看到 PRU 被用于直接按位连接协议(例如、PRU 上的以太网、或者通过这个定制 SPI 实现来采样多个 ADC 实例: https://www.ti.com/tool/TIDA-01555 和 https://git.ti.com/cgit/apps/tida01555 )、或者我看到 PRU 被用于控制芯片上的另一个外设(例如、此处的片上 ADC: https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am335x/PRU_ADC_onChip)。

    如果使用 PRU 来控制芯片上的另一个外设、则无关紧要、信号通过处理器内部总线结构到达外设需要额外的几纳秒时间。

    但是、如果您要尝试按位通信协议进行通信、则需要记住、访问 GPIO 模块所需的时间将超过几个 PRU 时钟周期。 此外、我不能确定到 GPIO 模块的访问延迟是固定的-处理器中的一些总线允许多个同时访问、但有些只允许一次访问一个-如果这些单访问总线中的任何一个在信号路径中、对 GPIO 的访问可能比其他访问要快或慢。

    因此、很难精确地为来自 GPIO 模块的输出波形计时、以及精确地为相对于其他输入和其他 PRU 代码的输入波形计时。 由于缺乏精度、我认为我们不能支持在 GPIO 模块上执行位拆裂协议。

    还应记住、如果 PRU 在使用该 GPIO 模块、我预计在 ARM 内核上运行的 Linux 或任何操作系统都不应使用该 GPIO 模块。

    2)考虑到以上注意事项、我不知道任何 TI 使用 GPIO 模块的 PRU 示例-我们始终编写位拆裂代码来使用 PRU GPI/PRU GPO 信号、因为这是使 PRU 内核独特和有用的重要部分。  

    我会向团队仔细核实、以防内部有一个我不知道的示例。

    3)双检查引脚复用  

    如果您尚未使用 pinmux 工具来协调 pinmux 设置、我强烈建议:
    dev.ti.com/sysconfig

    就像这样:

    此致、

    Nick

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

    您好、Nick。

    我理解您提出的限制和有效顾虑。 很遗憾、如上所述、我对已经投入现场的产品硬件设计感到有限。 我对我公司生产的这款产品并不熟悉、我负责将数据的额外处理添加到现有 PRU 代码中、以通过并行端口读取外部 ADC 芯片。 生产代码已使用这些非 PRU GPIO (如  P8_8)从外部 ADC 读取数据。  从 Linux 启动的 PRU 代码可正常运行、计时充足、可满足我们的项目要求。 这里没有问题。

    我的目标是按照 SDK 中的示例设置 CCS、以便我可以使用 IDE 单独调试对 PRU 代码所添加的更改、而现在不必担心 Linux。  

     加载到 Cortex-A8中的 GEL 脚本中可能有内容错误或缺失、我可能需要修改 内存映射文件?

    我来看看 pinmux 工具并查看它是否产生与我在 GEL 脚本中添加到 PINMUX 的结果不同的结果。

    未来、我们将围绕 AM335x 或类似器件设计自己的 PCB、并一定要确保通过使用正确的引脚来充分发挥 PRU 的潜力。

    感谢您的帮助、

    Ilya。

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

    您好、Ilya:

    线程所有者这周不在办公室。 如果您未收到回复、请在10月14日的一周内随意 ping 该主题。

    此致、Andreas

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

    您好、Nick。

    我只是想继续跟进这个问题。 目标是使用 Code Composer 启动和调试此代码、而不必通过 Linux 启动此代码即可使其正常运行。 我认为这是 需要在 config 或启动脚本中添加的基本内容。

    感谢您的观看、

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

    您好!

    非常感谢提出任何建议或建议、以供研究和尝试。

    谢谢!  

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

    您好 Ilya、

    对于延迟的响应、我们深表歉意、感谢您对 Ping 的操作。

    如果您已经验证过、较长的非确定性读写时间对于您的用例来说是可以的、那么至少从概念的角度来看、我希望您可以接受。

    在 Linux 引导期间、您仍然可以使用 CCS 调试 PRU 内核

    如果您的 Linux 引导已经按预期初始化内容、那么最简单的方法可能是只使用 Linux 来初始化系统。 您仍然可以 使用 CCS 连接已在运行并由 Linux 初始化的 PRU 固件。

    PRU 入门实验室可能会在调试过程中为您提供一些有用的想法:
    https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/09_01_00_001/exports/docs/common/PRU-ICSS/PRU-Getting-Started-Labs_Lab5.html

    我在这些实验中未说明的一点是如何将 CCS 连接到正在运行的 AM335x、然后执行 Load > Load Symbols、 以便将 CCS 附加到当前正在运行的 PRU 代码。 您可以 在连接调试器时立即开始查看代码、也可以添加无限循环以确保连接调试器时 PRU 固件处于已知位置。

    您可以在此处找到不同处理器的示例:
    https://dev.ti.com/tirex/explore/node?a=7qm9DIS__LATEST&node=A__AZVLTFgnCWyMV5cDwLf4gg__AM64-ACADEMY__WI1KRXP__LATEST

    该页面上有很多内容不适用于 AM335x。 只需忽略该页面的后半部分(特定于 AM64x)。

    但是... 我应该也能够使用 GEL 文件进行初始化、对吧?  

    我认为是这样。 但我个人除了设置引脚复用之外没有任何 GEL 文件操作的经验(例如、您在这里可以找到的代码: https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/09_01_00_001/exports/docs/common/PRU-ICSS/PRU-Hands-on-Labs.html)。 如果 Linux 打开时钟并初始化 GPIO 模块、则您还将需要在 GEL 文件中执行该操作。

    多年来、 我的大多数团队成员不仅仅只是将 GEL 文件用于基本初始化、而是使用 GEL 文件。 如果您愿意、我可以四处询问、但我不确定那里还有多少其他信息。

    此致、

    Nick

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

    您好、Nick。

    感谢您的答复。 我将尝试加载 Linux 来配置 PRU (而不是随附的 GEL 脚本)、 并返回报告以结束该线程、并为其他人记录解决方案。 遗憾的是、GEL 脚本显然不足以 将 CCS 作为真正的 IDE 解决方案来单独开发和调试 PRU。

    请向您的团队成员询问这一点。 如果他们确定解决方案是 GEL 脚本中的几处更改、我认为对于 希望 PRU 使用相同方法完全发挥作用的遵循 SDK 指南的每个人来说、这都是正确的解决方案。

    Ilya,

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

    好的、我已经将您关于 GEL 文件的问题转给了更广泛的团队-如果我获得任何有用的指示、我会传递给他们。

    同时、

    1) 1)您计划在 AM335x 上运行哪个版本的 Linux?

    2)您是否计划使用 RPMSG 与 Linux 通信?

    此致、

    Nick

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

    您好、Nick。

    关于#1:目前、BeagleBone black 正在引导 tisdk-default-image-am335x-evm.tar.xz 中从 Linux-AM335X 版本09_01_00_001中找到的 PROCESSOR-SDK-LINUX-RT 映像。 此映像中的 Linux 版本是6.1.46。

    关于#2:我计划将来使用 RPMSG。 需要 RPMsg 才能使 上述基本 GPIO 示例正常工作?

    为了在 加载自定义工程之前开始、我尝试了 以下操作:
    • 通过 CCS 打开和编译、 引用的工程 PRU_gpioToggle (TI_SDK_PATH)/example-applications/pru-icss-6.2.0/examples/am335x/PRU_gpioToggle
    • 我可以使用 SDK 中所述的 CCS 方法加载、调试和验证 P9_29上的 GPO 切换
      • 在没有 Linux 的情况下引导  
      • 连接到 Cortex-A8
      • 加载 GEL 脚本以配置 PRU
      • 断开与 Cortex-A8的连接
      • 连接至 PRU0
      • 加载 PRU_gpioToggle.out
    我将 PRU_gpioToggle.out 移至目标、并尝试使用以下步骤加载 PRU 二进制文件、刚完成了 CCS 中的 Run > Load > Load Symbols。 这会导致 CCS 调试会话跳转至 boot.c 中的_c_int00_noinit_noargs () 我还尝试了添加所链接示例中显示的 while 环路、但结果是相同的。
    • root@am335x-evm:/lib/firmware echo 'start'>/sys/class/remoteproc/remoteproc0/state
      ROOT@AM335x-EVM:/lib/firmware [ 7202.291517] remoteproc remoteproc0:为4a334000.pru
      [ 7202.291904] remoteproc remoteproc0:启动 FW 映像 PRU/PRU_gpioToggle.out、大小30460
      [ 7202.291935] remoteproc remoteproc0:无头资源表
      [ 7202.291983] remoteproc remoteproc0:无头资源表
      [ 7202.291993] remoteproc remoteproc0:远程处理器4a334000.pru 现已启动

    仅供参考、在线 SDK 指南(https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/)中的搜索功能已停止工作。

    如果您看到任何明显的东西、请告诉我? 调试工作后、我将更新器件树以设置 GPIO 设置。

    谢谢!   

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

    您好  Ilya、

    GEL 文件

    在 GEL 文件上、这些文件看起来位于 ti/ccs 下的 CCS 安装文件夹中 /ccs/ccs_base/emulation/gel. 但是、相对于较新的器件、AM335x 的详细 GEL 文件看起来不像。 我查看了 CCS 1020和1260、但尚未检查旧版本的 CCS、看看它们是否有不同的 AM335x GEL 文件。

    如果您的应用程序不想使用 RPMsg 在 Linux 和 PRU 之间进行通信、则无需 RPMsg  

    有关应在项目中使用哪个资源表的更多详细信息、请参阅此处的内容:
    https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/09_01_00_001/exports/docs/common/PRU-ICSS/Resource_Tables .html

    是否要在 Linux 初始化 PRU 后将 CCS 连接到 PRU 内核?  

    一位 AM57x 客户也在使用 RPMsg 进行一些调试工作(仅供参考、PRU RPMsg 在 AM335x SDK 9.1上无法开箱即用、需要进行一些微调。 它将在即将推出的 AM335x Linux SDK 9.3中实现开箱即用。 询问您是否需要更多详细信息)。 我已要求他确认是否需要执行任何其他步骤来连接 CCS:
    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1432897/am5728-pru_rpmsg_echo_interrupt1_0-unable-to-get-vring-interrupt-status--6/5501517#5501517

    搜索功能已损坏  

    是的,这是 SDK 9.1版本文档中的一个已知错误:/  

    我们在更高版本的 SDK 中修复了这个问题、因此搜索将在即将推出的 SDK 9.3版本中再次有效(它的搜索效果实际上应该比以前好一点)

    还有其他调试思路吗?  

    下面是通过读取和写入已知的存储器位置来调试 Linux 中的 PRU 内核的另一种方法:
    https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/09_01_00_001/exports/docs/common/PRU-ICSS/PRU-Getting-Started-Labs_Lab 5.html#debuging-the-pru-from-linux-core

    此致、

    Nick

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

    您好、Nick。

    关于您对 GEL 文件的评论。 我不知道你在 说什么。 我们已确定 最新 SDK 中提供的 GEL 文件允许 GPO 发挥作用、但即使 手动将 pinmux 设置添加到 GEL 文件中、GPIO 也不会发挥作用。 如果在没有 Linux 的情况下使用 CCS 进行调试、您的团队中是否有人对 GEL 文件中缺失的部分做出响应、以便使用 PRU 的全部功能?
    我继续操作、将 CCS 完全从设置中删除、如果 从目标中启动 PRU_gpioToggle.out、仍然观察到 P9_29切换。 在"3.2.1.5.2"部分下、我执行了 SDK 中的步骤。 编译器件树二进制文件"以添加到引脚多路复用器中对 AM335x-bonebark-prucape.dtsi 进行了更改、该版本将 p9_29设置为输出。 已完成的步骤汇总如下:
    • 在主机上
      • 创建新的 SD 卡
        • sudo bin/create-sdcard.sh
        • 选择选项1以创建 tisdk-default-image-am335x-evm
      • 将 am335x-boneblack-prucape.dtsi 复制到 /home/engr/ti-sdk-09.01.00.001/board-support/ti-linux-kernel-6.1.46 +gitAUTOINC+ccf548983b-gccf548983b/arch/arm/boot/dts
      • 将 #include "am335x-bonebrack-prucape.dtsi"添加到 AM335x-bonebrack.dts 文件底部
      • 编译新的设备树
        • make -j$(nproc) dtc_flags=-@ arch=arm cross_compile=/home/engr/ti-sdk-09.01.00.001/external-toolchain-dir/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf- am335x-bonebrack.dtb
      • 传输生成的设备树文件
        • sudo cp ~/ti-sdk-09.01.00.001/board-support/ti-linux-kernel-6.1.46+gitAUTOINC+ccf548983b-gccf548983b/arch/arm/boot/dts/am335x-bonebrack.dtb /media/engr/rootfs/boot/dtb
      • 传输 PRU_gpioToggle.out
        • μ C/ti-SDK-09.01.00.001/example-applications/PRU-ICSS-6.2.0/examples/AM335x/PRU_gpioToggle/gen/PRU_gpioToggle.out /media/engr/rootfs/lib/firmware/pru ~
    • 目标上
      • 引导 SD 卡
      • 加载 PRU 映像
        • echo "PRU/PRU_gpioToggle.out">/sys/class/remoteproc/remoteproc0/firmware
      • 启动 PRU 映像
        • echo "Start (开始)">/sys/class/remoteproc/remoteproc0/state
          • 输出:remoteproc remoteproc0:为4a334000.pru 上电
            remoteproc remoteproc0:为4a334000.pru 上电
            [2143.707703] remoteproc remoteproc0:引导固件映像 PRU/PRU_gpioToggle.out、大小为30336
            [2143.707782] remoteproc remoteproc0:远程处理器4a334000.pru 现在已启动
      • 未 观察到引脚切换
    此外、我对引导分区感到困惑、为什么/boot 中的设备树文件与/rootfs/boot/?中的设备树文件不匹配 我认为、如果我尝试同时替换/boot 中的 am335x-boneback.dtb、则启动后/sys/class/remoteproc 会为空。  
    是否有人使用 tisdk-default-image-am335x-evm 映像以及该最新 SDK 09_01_00_001版本中的更新器件树测试了 PRU 示例? 要使示例正常工作、我缺少什么?
    感谢您的任何帮助、谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    Pinmux 设置

    请附加您的 devicetree 更新、以便我可以仔细检查您的 PinMux 设置。 设置可能错误、或实际上未应用(PinMux 设置必须与得到探测的 devicetree 节点相关联、否则它们实际上并未设置)。

    根据您的终端输出、PRU 固件似乎按预期加载。 我希望 PRU RPMsg 以外的所有组件都可以在 SDK 9.1上正常运行-我们刚刚在 AM335x SDK 9.3上完成了 PRU 功能的测试、而且在我们应用完成 RPMsg 功能启用所需的补丁时、它能够按预期运行。

    GEL 文件  

    目前、我团队中没有人具备有关 AM335x GEL 文件的任何专业知识。 我告诉过您的就是我学到的-您可以在我在前一个响应中讨论的文件位置找到 TI 提供的 GEL 文件、但我没有看到任何预先写入的 GEL 文件可以执行您所寻找的 GPIO 初始化。

    要在每个引导分区中放置什么?  

    SD 卡分为两个分区:引导分区和根文件系统。

    引导分区包括 uboot 使用的文件和信息。

    根文件系统包括为 Linux 引导加载的内容、包括 Linux devicetre 文件(在[root_filesystem]/boot 下)和 PRU 示例(通常在[root_filesystem]/lib/firmware 下)。

    此致、

    Nick

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

    您好 Ilya、

    您可以将文件附加到 e2e 线程、如下所示:插入>图像/视频/文件>单击 灰色字体显示"upload"的按钮。 这将打开一个窗口以选择文件。

    如果不是太费力、我能让您将文件附加到 e2e 线程吗? 谷歌驱动器在工作计算机上被阻止,所以我需要审查我的个人计算机上的代码谷歌驱动器。

    此致、

    Nick

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

    您好、Nick。

    啊、我看到、灰色的上传文本也是一个按钮。 如果选择单个文件、则上传失败、因此会附加 zip 文件。  

    谢谢!

    e2e.ti.com/.../device_5F00_tree_5F00_am335x_2D00_boneblack.zip

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

    您好 Ilya、

    嗯。 在我的头上,我看不到任何明显的错误与你的 devicetree 文件。 在 SDK 8.2和 SDK 9.1之间、pruss devicetree 节点看起来保持相同的名称、因此我不会预计这会导致任何问题。

    要确认、是否未在开始运行 PRU 固件之后看到 BeagleBone black PRU Cape 上的指示灯开始每秒闪烁一次?

    我还没有在 SDK 9.1上尝试旧的 PRU 实践实验中的步骤、但我仍然希望它们能够起作用。 您尝试做的操作和我们在网站上记录的内容非常准确: https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/08_02_00_24/exports/docs/common/PRU-ICSS/PRU-Hands-on-Labs.html

    另外、面向未来读者:PRU Cape 资源现已隐藏在 AM335x Linux SDK 文档中、此处:
    https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/08_02_00_24/exports/docs/common/PRU-ICSS/PRU-Cape-Hardware-User-Guide.html

    此致、

    Nick

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

    如果您可以按照上文所述在运行时将 CCS 连接到 PRU 内核、这至少可以让您实时观察代码运行情况。

    调试信号的下一步是仔细检查 PinMux 寄存器的实际寄存器值、以确保 devicetree 软件设置实际上会在硬件中得到反映。

    此致、

    Nick

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

    您好、Nick。

    使用 CCS 调试我点击下面的问题:

    我将 pru_gpioToggle.out 移至目标并尝试使用以下步骤加载 PRU 二进制文件、刚完成了 Run > Load > Load Symbols in CCS。 这会导致 CCS 调试会话跳转至 boot.c 中的_c_int00_noinit_noargs () 我还尝试了添加所链接示例中显示的 while 循环、但结果是相同的。

    谢谢!

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

    闪烁的指示灯

    1)我能否让您确认在开始运行 PRU 固件后 PRU Cape 上没有任何闪烁灯? (这 ^您仍在使用__R30 = GPIO = 0xFFFFFFFF 切换每个 PRU GPO 输出;)

    CCS 连接

    2) 2)在 CCS Connect 上、您是否尝试单步执行代码? 在那之后、它是否达到了预期的程度? 如果您尝试重置 PRU 内核、情况会怎样?

    Devicetree/PinMux 验证

    首先检查内核 debugfs 以验证 padconfig 寄存器是否设置正确。 如果没有、请检查 sysfs devicetre 以查看在引导时应用的内核 DTB 中的 Pinmux 是否正确。

    此处、我正在验证 EVM 上的 I2C0设置:

    For my AM335x I2C0 example, I know the control module starts at 0x44E1_0000, and the pinmux offsets are 0x988 & 0x98C:
    linux-sdk$ grep -r AM335X_PIN_I2C0_SDA
    ...
    include/dt-bindings/pinctrl/am33xx.h:#define AM335X_PIN_I2C0_SDA                      0x988
    linux-sdk$ grep -r '#define AM335X_PIN_I2C0_SCL'
    include/dt-bindings/pinctrl/am33xx.h:#define AM335X_PIN_I2C0_SCL                        0x98c
    
    And I can verify the pinmux setting on the EVM here:
    # cd /sys/kernel/debug/pinctrl/
    root@am335x-evm:/sys/kernel/debug/pinctrl# ls
    44e10800.pinmux-pinctrl-single  44e3e000.rtc  pinctrl-devices  pinctrl-handles  pinctrl-maps
    root@am335x-evm:/sys/kernel/debug/pinctrl# cd 44e10800.pinmux-pinctrl-single/
    root@am335x-evm:/sys/kernel/debug/pinctrl/44e10800.pinmux-pinctrl-single# ls
    gpio-ranges  pingroups  pinmux-functions  pinmux-pins  pinmux-select  pins
    root@am335x-evm:/sys/kernel/debug/pinctrl/44e10800.pinmux-pinctrl-single# cat pins
    registered pins: 142
    ...
    pin 98 (PIN98) 5:gpio-64-95 44e10988 00000030 pinctrl-single
    pin 99 (PIN99) 6:gpio-64-95 44e1098c 00000030 pinctrl-single
    

    似乎相对于0x800偏移给出了 PRU 引脚多路复用设置。 例如、您的 devicetre 中的0x1a4寄存器偏移会转换为上面的0x9a4地址。

    让我们将其与 devicetree 文件设置中在引导时应用的原始寄存器值进行比较:

    // the devicetree settings that are actually applied are here:
    root@am335x-evm:~# cd /sys/firmware/devicetree/base/
    
    // let's figure out where the pinmux devicetree node is
    root@am335x-evm:/sys/firmware/devicetree/base# cd __symbols__/
    root@am335x-evm:/sys/firmware/devicetree/base/__symbols__# cat i2c0_pins
    /ocp/interconnect@44c00000/segment@200000/target-module@10000/scm@0/pinmux@800/pinmux_i2c0_pins
    
    root@am335x-evm:/sys/firmware/devicetree/base/__symbols__# cd ..
    root@am335x-evm:/sys/firmware/devicetree/base# cd ocp/interconnect@44c00000/segment@200000/target-module@10000/scm@0/pinmux@800/pinmux_i2c0_pins
    // I'll shorten my path to just "pinmux_i2c0_pins" for ease of reading 
    pinmux_i2c0_pins# ls
    name  phandle  pinctrl-single,pins
    pinmux_i2c0_pins# hexdump -C pinctrl-single,pins
    00000000  00 00 01 88 00 00 00 30  00 00 00 00 00 00 01 8c  |.......0........|
    00000010  00 00 00 30 00 00 00 00                           |...0....|
    00000018  
    

    根据之前的寄存器值、AM335x DTB hexdump 似乎具有以下格式

    [0x800的地址偏移为32位][引脚多路复用值为32位][ 32位0 ]

    此致、

    Nick

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

    您好、Nick。

    1) 1)我没有物理 PRU 电容器、我一直在使用示波器进行验证。  如果通过 CCS 使用 GEL 脚本启动 PRU、我会看到 GPO 引脚会切换。 从 Linux 启动的相同.out 文件没有任何作用。   

    我能够使用 SDK
    [quote userid="625631" url="~/support/processors-group/processors/f/processors-forum/1420991/processor-sdk-am335x-control-gpios-not-directly-connected-to-prus-using-ocp-when-debugging-pru-via-ccs/5509064 #5509064"]中描述的 CCS 方法在 P9_29上加载、调试和验证 GPO 切换我继续操作并完全 从设置中删除了 CCS、如果从目标开始切换、仍然不会观察 P9_gpioToggle。 [报价]

    2) 2)步入和超越不会在 CCS 控制台中执行任何操作或打印任何错误。 在 CCS 中按 RESTART 会在控制台中返回该错误:

    PRU_0: Trouble Setting Breakpoint with the Action "Finish Auto Run" at 0x1c: (Error -1066 @ 0x1C) Unable to set/clear requested breakpoint. Verify that the breakpoint address is in valid memory. (Emulation package 12.8.0.00189)

    我还尝试了使用 "make PRU-ICSS"进行编译并将其加载到 PRU 中、以及使用此.out 为 CCS 调试会话加载符号。

    3) 3)我将尝试设备树验证步骤并报告。

    谢谢!

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

    您好 Ilya、

    CCS 调试

    嗯。 我一时想不出 CCS 输出可能告诉我们什么。 如果您想要探索如何实现 CCS 调试、请随意创建第二个线程、我们可以将该线程发送给 CCS 团队、同时继续讨论有关该线程的其他内容。

    关于 CCS 调试需要注意的一点:我在 CCS 中使用的 PRU 项目与在 EVM 上使用的项目完全相同、以防万一。 例如、在 CCS 中编译 PRU 程序、并将.out 文件复制到 Linux 文件系统中。 我不完全确定符号映射的工作原理、但我看到以下问题:人们使用 makefile 与 CCS 分开构建二进制文件、将 makefile 二进制文件复制到 Linux 文件系统中、然后在 CCS 中第二次构建该项目、并尝试连接符号。

    引脚多路复用验证  

    期待看到结果!

    此致、

    Nick

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

    您好!

    对不起、深夜、我今天没有时间阅读全部答复。

    我忘记您使用的是 BeagleBone Black 了。 您是否确定从 SD 卡(而不是板载 EMMC)中加载文件系统? 您可以按住按钮以避免 EMMC 启动、也可以清除 EMMC (我这样做的原因是我厌倦了按住按钮)。 详情请访问: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/937973/beaglebk-powering-up-issues/3467335#3467335

    此致、

    Nick

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

    您好、Nick。

    可以、在完成任何测试之前、EMMC 已被擦除。

    谢谢!

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

    您好 Ilya、

    对这里的延迟答复深表歉意。 我希望你们能够在这段时间取得进展。

     如果您希望使用 PRU GPI/PRU GPO 信号、则这些引脚多路复用设置不正确(与 GPIO 模块信号不同)。 多路复用器模式7上没有任何 PRU GPI 或 PRU GPO 信号。

    您可以参考此处使用的特定多路复用模式:
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/pru_cape/am335x-boneblack-prucape.dtsi

    此致、

    Nick