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.

[参考译文] AM6442:为 AM6422上的 PRU IO 数据采集触发 DMA

Guru**** 2486065 points
Other Parts Discussed in Thread: AM6422, SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1426990/am6442-triggering-dma-for-pru-io-data-capture-on-am6422

器件型号:AM6442
主题中讨论的其他器件:AM6422SysConfig

工具与软件:

尊敬的 TI 团队:

我目前正在针对一个涉及2通道、14位外部 ADC 接口的项目评估 AM6422。 我们的目标是在时钟的每个上升沿捕获 ADC 数据。 主要要求是从28个 GPIO 读取并行数据并在50ns 窗口内将其发送到主域、因为 ADC 以该速率输出数据。

为了满足这些时序限制、我们使用 PRU 进行 ADC 数据采样、因为它可在 AM6422上提供出色的时序性能。 我已经使用 PRU 测量了 GPIO 读取/写入时序、可以实现50ns 窗口来读取样本。

我正在考虑使用在时钟的上升沿触发的 DMA 来读取 PRU IO 数据并将其传输到主域。 是否可以通过这种方式配置 DMA 并直接从 PRU IO 读取数据? 我查看了 ADC 示例(api_guide_am64x/drivers_pru_adc.html)、但没有找到任何关于使用由 GPIO 中断或时钟边沿触发的 DMA 的引用。

您能不能指引我访问可以帮助您完成此操作的任何相关文档或示例?

提前感谢您的支持。

此致、
Shivangi

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

    尊敬的 Shivangi:

    感谢您的提问。

     指定的专家不在办公室。 对该线程的响应将被延迟。  

    感谢您的耐心。

    此致、

    Tushar

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

    尊敬的 Shivangi:

    您尝试以下方法来实现您的要求。

    方法1:  读取主域上带有 PRU 内核的 GPIO 引脚。

    将 SOC 的序列组中的所有 ADC GPIO 引脚连接起来 。

    像有两个组每组支持16引脚,我们需要两个组32引脚读取24引脚.

    配置为根据 GPIO 上升沿触发 DMA。

    以下常见问题解答介绍了如何基于 GPIO 输入触发 DMA。

    在您的要求中,您需要更改源地址必须是 GPIO 数据寄存器。

    在这里, DMA 中断被触发达到 x 字节..这 x 通常大于64字节。

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1378150/faq-how-to-trigger-dma-with-the-help-of-gpio-on-am64x-am243-and-am62x-devices#:~:text=And%2C%20to%20trigger%20DMA%20from,%E2%86%92%20IA%20%E2%86%92%20Destination%20core

    方法2:  读取具有 PRU 内核的 GPIO 引脚  

    如上所述、PRU 正在处理读取所有 ADC 引脚。 然后、将这些数据复制到 PRU 存储器。

    现在、您需要在主域中读取这些数据。

    读取数据完成后、您只需将任何虚拟引脚从低电平更改为高电平或从高电平更改为低电平、然后此引脚激活 DMA 以将数据从 PRU 存储器传输到目标存储器。

    或者在 PRU 存储器中读取数据后、使用 IPC 方法将数据从 PRU 内核共享到主域存储器。

    此致、

    Anil。

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

    尊敬的 Shivangi:

    您尝试以下方法来实现您的要求。

    方法1:  读取主域上带有 PRU 内核的 GPIO 引脚。

    将 SOC 的序列组中的所有 ADC GPIO 引脚连接起来 。

    像有两个组每组支持16引脚,我们需要两个组32引脚读取24引脚.

    配置为根据 GPIO 上升沿触发 DMA。

    以下常见问题解答介绍了如何基于 GPIO 输入触发 DMA。

    在您的要求中,您需要更改源地址必须是 GPIO 数据寄存器。

    在这里, DMA 中断被触发达到 x 字节..这 x 通常大于64字节。

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1378150/faq-how-to-trigger-dma-with-the-help-of-gpio-on-am64x-am243-and-am62x-devices#:~:text=And%2C%20to%20trigger%20DMA%20from,%E2%86%92%20IA%20%E2%86%92%20Destination%20core

    方法2:  读取具有 PRU 内核的 GPIO 引脚  

    如上所述、PRU 正在处理读取所有 ADC 引脚。 然后、将这些数据复制到 PRU 存储器。

    现在、您需要在主域中读取这些数据。

    读取数据完成后、您只需将任何虚拟引脚从低电平更改为高电平或从高电平更改为低电平、然后此引脚激活 DMA 以将数据从 PRU 存储器传输到目标存储器。

    或者在 PRU 存储器中读取数据后、使用 IPC 方法将数据从 PRU 内核共享到主域存储器。

    此致、

    Anil。

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

    尊敬的 Swargam:
    根据提供的常见问题解答、我对设置 GPIO 中断有一些问题:  

    e2e.ti.com/.../faq-how-to-trigger-dma-with-the-help-of-gpio-on-am64x-am243-and-am62x-devices

     

    -按照建议,我将源地址从 PSRAM 更改为 PRU_ICSSG0_RAM_SLV_RAM(0x030010000)以满足我的要求并运行程序。  
    -然而,代码似乎卡在 Sciclient_gpioIrqSet()。 对为什么会发生这种情况有任何见解?
    -另外、我需要将 GPIO 触发引脚切换到 PRG1_PRU1_GPO18、才能进行设置。 您能否建议选择哪个 GPIO_MUX 路由器以及如何配置它? 我查看了常见问题解答、但发现步骤有点令人困惑。
    -我还需要修改 sciclient_defaultBoardcfg_rm.c 文件吗? 我可以在 SysConfig 窗口中访问资源管理配置、但我不确定应该调整哪些设置。

     

    如果有任何帮助都会非常感谢!

    谢谢!

    Vraj

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

    您好、Vraj、

    实际上、这是资源分配的 SCI 客户端问题。

    实际上、如果您查看上述常见问题解答、我会将 GPIO 路由器16的输出路由到 sciclient_defaultBoardcfg_rm.c 文件中的所有目标内核。

    此更改在您的环境中缺失、需要将此更改集成到应用程序中、稍后编译 sciclient_defaultBoardcfg_rm.c 文件并编译 SBL 和加载 SBL。

    所有这些步骤都在常见问题解答中得到了正确的信息、以及您执行这些步骤和相同步骤所需的链接。

    此致、

    Anil。

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

    尊敬的 Anil:

    [报价 userid="525901" url="~/support/processors-group/processors/f/processors-forum/1426990/am6442-triggering-dma-for-pru-io-data-capture-on-am6422/5520104 #5520104"]我将 GPIO 路由器16输出路由至 sciclient_defaultBoardcfg_rm.c 文件中的所有目标内核[/QUOT]

    您是否手动尝试过此操作? 因为当我尝试手动更改文件并重新编译代码时、手动更改就消失了。

    该文件由 SysConfig 自动生成。
    您能否建议 SysConfig 配置中可能缺少的内容、因为我无法像您一样看到这些更改?

    谢谢!

    Vraj

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

    您好、Vraj、

    是的、很遗憾、syscfg 中不支持上述配置、我将会提出错误。

    要手动编译、您可以按照以下步骤操作。

    将下面的路由器配置添加到 sciclient_defaultBoardcfg_rm。 C 语言文件中  

            {
                .num_resource = 1,
                .type = TISCI_RESASG_UTYPE (TISCI_DEV_MAIN_GPIOMUX_INTROUTER0, TISCI_RESASG_SUBTYPE_IR_OUTPUT),
                .start_resource = 16,
                .host_id = TISCI_HOST_ID_ALL,
            },

    接下来、将新入口点的大小增加到182、以前是181、现在增加了一个条目。

    所以,它增加到182。 条目大小数字可能不同、也可能不不同、具体取决于 MCU+SDK 版本。

    在我的测试设置中、我使用了 MCU+SDK 10版本、其中值为181、添加一个条目后为182。

    接下来、要完成这些文件、请提供以下命令。

     gmake -s -C .\tools\sysfw\boardcfg SOC=am64x

    之后、您可以按照上述常见问题解答中的步骤进行操作。

    此致、

    Anil。

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

    尊敬的 Anil:

    我已经实施了您建议的更改、并成功编译了 sciclient_defaultBoardcfg_rm。 C 语言文件中。

    我的 EVM 套件设置为 NoBoot 模式。

    此外、我从 SBL Null 示例重新编译了 SBL、并根据提供的步骤加载 JS 文件、还重新编译了 sciclient_CCS_init 示例。

    但是,当我运行程序时,我遇到 Sciclient_rmIrqSet() API 错误,返回值-1。 此后、消息[Error] Sciclient event config failed!!! 都会打印。


    您能帮我解决这个问题吗?

    谢谢!

    Vraj

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

    您好、 Vraj

    我正在查看您的问题,您可能希望 在今天之前得到回复。

    此致、

    ANI

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

    您好、 Vraj、

    [报价 userid="529589" url="~/support/processors-group/processors/f/processors-forum/1426990/am6442-triggering-dma-for-pru-io-data-capture-on-am6422/5530068 #5530068"]

    我的 EVM 套件设置为 NoBoot 模式。

    此外、我从 SBL Null 示例重新编译了 SBL、并根据提供的步骤加载 JS 文件、还重新编译了 sciclient_CCS_init 示例

    [报价]

    您似乎没有查看常见问题解答。 我清楚地说明了所有步骤。

    完成 SBL 后、您需要刷写已更新的 SBL  

    现在、您可以按照以下步骤操作。

    使用 SBL_NULL cfg 文件并刷写更新后的 SBL bin 文件。  

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/10_00_00_20/exports/docs/api_guide_am64x/GETTING_STARTED_FLASH.html

    SBL null 初始化所有内核、然后用户直接将调试器连接到所有内核、 而不是每次加载 Java 脚本。

    下一步在刷写 SBL 后,将 EVM 置于 ospi 引导模式而不是无引导模式。 将调试器连接到 R5F 内核、加载示例。

    此致、

    Anil。

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

    尊敬的 Anil:

    根据您的建议、我按照提供的链接进行操作、最初刷写了 hello_world 示例、以了解在 OSPI 模式下刷写应用程序的行为。

    随后、我刷写了常见问题解答中提到的 uDMA 工程、

    AM6442:为 AM6422上的 PRU IO 数据采集触发 DMA

    但它不会生成任何输出。 为了进一步调查、我从 SDK 中导入了 GPMC_PSRAM_IO 示例工程、并进行了与 uDMA 常见问题解答示例中指定的类似的更改。 但是、当我在 OSPI 模式下刷写这个修改后的工程时、遇到错误:

    [错误] Sciclient 事件配置失败!!!

    然后、我查看了 sciclient_defaultBoardcfg_rm.c 文件、发现它已包含常见问题解答中提到的更改。

    为确保准确性、我重新编译了 sciclient_defaultBoardcfg_rm.c、重新编译了 SBL_null、并再次刷写了它。

    完成此设置后、我再次刷新了更新的工程、但仍然遇到相同的错误:

    [错误] Sciclient 事件配置失败!!!

    总之、我能够在无引导模式和 OSPI 引导模式下成功刷写工程、但错误仍然存在。 请您协助解决 Sciclient config 故障问题。

    谢谢、此致、
    Vraj Joshi

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

    您好 Vraj Joshi、

    我假设您似乎没有正确遵循这些步骤。

    您正在编译 SBL 为空并刷写 SBL 为空、然后从 OPSI 刷写应用程序。 这些步骤不正确。

    构建 SBL null 之后、仅刷写更新的 bin 文件作为 SBL null 映像。

    稍后、直接从 CCS 加载应用程序。

    如果您想使用 SBL_OSPI 而不是 SBL 空值、请编译 SBL OSPI 并刷写 hello world 示例、而不是 您的 DMA 应用。

    如果从 OSPI 刷写 DMA 应用程序、从 CCS 加载该应用程序、则会遇到 SCI 客户端错误。

    因为当您从 OSPI 刷写 DMA 应用程序时,SYSFW 将为您的 DMA 应用程序内核和分配资源(GPIO routing )

    当从 CCS 加载相同的应用程序时,则 SYSFW 不会为两次分配相同的资源,因此会出现 SCI 错误。

    如果仍然遇到问题、我可以提供 SBL OSPI 映像文件。 您可以使用我的文件、将其刷写到您的硬件中、并从 CCS 和加载示例  

    查看是否仍遇到 SCI 客户端错误。

    此致、

    Anil。

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

    尊敬的 Anil:

    非常感谢您的  耐心和帮助。

    我很高兴告诉大家、我最终成功解决了错误后运行了 DMA 示例。

    虽然我已正确完成了大多数步骤、但问题是由于没有更新在 UART 模式下运行的配置文件中编译的 SBL 文件的路径。

    我最后有一个问题。 我在 OSPI 模式下运行 EVM 时使用编译的 SBL NULL。 在为 EVM 上电时、我会看到以下日志:

    正在启动 NULL 引导加载程序...

    DMSC 固件版本10.0.8--v10.00.08 (Fiery Fox)
    DMSC 固件版本0xA
    DMSC ABI 修订版4.0

    信息:bootloader_runCpu:180:CPU r5F1-0初始化为800000000 Hz!!
    信息:bootloader_runCpu:180:CPU r5F1-1被初始化为800000000 Hz!!
    信息:bootloader_runCpu:180:CPU m4f0-0初始化为400000000 Hz!!
    信息:bootloader_runCpu:180:CPU A530-0初始化为800000000 Hz!!
    信息:bootloader_runCpu:180:CPU A530-1初始化为800000000 Hz!!
    信息:bootloadSelfCpu:232:CPU r5f0-0被初始化为800000000 Hz!!
    信息:bootloadSelfCpu:232:CPU r5f0-1被初始化为800000000 Hz!!
    info: bootloader_runSelfCpu:242:全部完成,正在恢复自...

    之后、我通过 CCS 加载我的应用、它运行时没有出现任何错误。 但在开发过程中、我经常在不重启电路板的情况下修改并重新加载应用。 在本例中、我遇到 SciClient 配置失败。 如果我重新启动 EVM、然后加载应用程序、则在第一次尝试时就会正常工作。

    我想这种情况就是您在前面的答案中提到的 SYSFW 不会分配资源两次的情况。 您能否确认我的理解是否正确? 此外、是否有办法避免每次重启电路板?

    谢谢!

    Vraj Joshi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此后、我通过 CCS 加载我的应用程序、该应用程序运行时没有出现任何错误。 但在开发过程中、我经常在不重启电路板的情况下修改并重新加载应用。 在本例中、我遇到 SciClient 配置失败。

    您好 Vraj Joshi、

    很高兴听到您已解决问题。

    DMSC 内核 产生 问题。

    如上所述、当您首次从应用程序调用 SCI 时、GPIO 路由器16的输出由 DMSC 内核分配。

    下次修改 代码而不是重置 SOC 时、从 CCS 加载应用程序、则会出现问题。

    此处、DSMC 内核已将 GPIO 路由器16分配至 R5F 内核。

    您正在尝试调用 SCI API 来第二次分配 GPIO 路由器16、但这是不可能的。 因为,如果用户再次发送相同的请求, DMSC 内核可以分配资源一段时间,那么 DMSC 内核不能分配资源,它给出了否定响应。

    为了避免这些 SCI 客户端错误,您必须重置(从 CCS 或 POR 的 WarmReset )从 CCS 加载的每个应用程序的 SOC。

    对于每次加载应用程序,您都可以使用以下步骤从 CCS 进行重置并加载应用程序。

    如果您从 OSPI 刷写 DMA 应用程序、则无法再次从 CCS 加载同一个应用程序。 您可能会收到 SCI 客户端错误。

    对于开发、请使用 SBL Null 并从 CCS 加载应用程序、并且在修改您的代码之后以及在加载应用程序之前、通过 CCS 或 POR 重置 SOC。

    我将关闭此主题、您可以为新查询打开新主题。

    此致、

    Anil。

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

    谢谢 Anil、  
    重置系统(如图中所述)对我有效。 现在、我  每次都不需要重新启动 EVM 套件。  

    为了供将来参考、我为了使示例正常工作而执行的步骤如下:

    1. 按照此常见问题解答中的说明进行操作:(e2e.ti.com/.../faq-how-to-trigger-dma-with-the-help-of-gpio-on-am64x-am243-and-am62x-devices)

    2. 常见问题解答中提到了修改该 sciclient_defaultBoardcfg_rm.c 文件的问题。 我参考了本指南中提供的步骤: (https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/latest/exports/docs/api_guide_am64x/RESOURCE_ALLOCATION_GUIDE.html)。 由于 SysConfig 不支持这些更改、因此我手动更新了文件并按照指南中的步骤对其进行编译。

    3. 下载了第一个常见问题解答中提到的示例、但未按预期运行。 相反、我 gpmc_psram_io 从 SDK 中导入了示例、并应用了常见问题解答中所述的 uDMA 专用修改。

    4. 然后、我参考此常见问题解答: (https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/10_00_00_20/exports/docs/api_guide_am64x/GETTING_STARTED_FLASH.html、了解有关编译和加载 SBL 的说明。

    5. 我的错误是忽视了在配置中更新编译后的 SBL 文件路径的需求。 当我更新了应用映像文件的路径时、没能更新工作区目录中生成的新 SBL 文件的路径。

    我更正后、该应用就能完美运行。

    此致、

    Vraj