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.

[参考译文] AM2634:PRU:无法启用 ECC 错误事件

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1163666/am2634-pru-ecc-error-event-impossible-to-enable

器件型号:AM2634

您好!

当 PRU-ICSS 的 RAM 中发生 ECC 事件时、我将尝试激活事件生成。 根据我基于 AM335x TRM 的理解、这可以通过 PRU 的 CFG 寄存器进行配置、更具体地说是通过 ISRP、ISP、IESP 和 IECP 寄存器进行配置。

我尝试了以下代码:

/* enable all ECC error events */
PRU_CFG.IESP = 0x000FFFFF;

/* read back IESP register */
uint32_t iesp = PRU_CFG.IESP; // I read back 0x00000000

/* test enabling - fake event */
PRU_CFG.ISRP = 0x000FFFFF;

/* read back raw event */
uint32_t isrp = PRU_CFG.ISRP; // I read back 0x000FFFFF

/* read back ecc error event */
uint32_t isp = PRU_CFG.ISP; // I read back 0x00000000

遗憾的是、配置看起来非常简单、但写入 IESP 似乎没有任何作用。 因此我进行了双校验、该寄存器(用于我的代码)位于地址0x0002601C 处、根据我可以访问的信息看起来很好。

可以有人帮助我解决这个问题吗? 我猜 ECC 错误事件在 AM263x 上的行为与在 AM335x 上的行为不同 、或者寄存器偏移在 AM335x 和 AM263x 之间发生变化。

谢谢大家、此致

Nicolas

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

    您好、Nicolas、

    我将对此进行研究、并很快与您联系。

    此致、
    弗兰克

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

    您好!

    谢谢你。 我期待您的回答。

    此致、Nicolas

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

    您好、Nicolas、

    我来自 Sitara MPU 团队(我们支持的器件与 Frank 的 Sitara MCU 团队成员略有不同)。 因此、我将从 Sitara MPU 器件的角度进行评论、例如 AM62x/AM64x。

    总结  

    如果您使用 PRU 软件支持包(PSSP)作为参考、请使用 AM62x 作为模板、而不是 AM335x。  https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/ 有关 AM263x 与 AM62x 的其他详细信息将在我的下一次答复中提供。

    详细信息

    是的、在 AM335x 上的 PRU-ICSS 版本与 AM263x 上的 PRU-ICSS 版本之间、中断寄存器名称确实发生了变化。

    您好像在使用 PRU 软件支持包中提供的头文件? 如果是、请参考 AM62x 头文件而不是 AM335x 头文件。 AM62x 应具有与 AM263x 相同的寄存器集。 首先、我要检查 PRU_INTC: https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/include/am62x/pru_intc.h

    请仔细检查 AM263x 技术参考手册(TRM)以了解准确性  

    用于为 AM263x 和 AM62x 生成 PRU 章节的文本中存在一个问题、其中记录了错误的寄存器名称。 我修复了 AM62x 的问题、但我不确定 AM263x TRM 是否已修复。 您能否检查 AM263x TRM 以查看其是否已正确更新? 如果没有、请告诉 Frank、以便他可以提交错误。

    在 PRU > PRU 本地 INTC 章节中:

    中断状态检查
    读取 ICSS_INTC_ENABLE_CLR_REGx 会显示中断的启用状态-->应显示 ICSS_INTC_ENA_STATUS_REGx

    中断状态清除
    写入 ICSS_INTC_ENABLE_CLR_REGx 将清除中断的状态->应显示 ICSS_INTC_ENA_STATUS_REGx

    中断控制器基本编程模型
    配置中断控制器时、通过向 ICSS_INTC_ENABLE_CLR_REGx 写入1h 来清除中断->应显示 ICSS_INTC_ENA_STATUS_REGx

    此致、

    Nick

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

    其他信息:PRU 资源、AM263x 与 AM62x 等  

    大多数 PRU 资源隐藏在 Sitara MPU Linux SDK 文档 中:https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/08_04_01_03/exports/docs/linux/Foundational_Components_PRU_Subsystem.html 

    MCU+ SDK 中用于 PRU 开发的文档非常少。 目前、仅记录了 PRUICSS 主机驱动程序: https://software-dl.ti.com/mcu-plus-sdk/esd/AM263X/08_04_00_17/exports/docs/api_guide_am263x/DRIVERS_PRUICSS_PAGE.html

    AM263x 使用 PRU-ICSS、后者是 AM335x/AM437x PRU-ICSS 的更新版本。 有关差异列表、请参阅 PRU 功能比较应用手册:  
    https://www.ti.com/lit/sprac90 

    AM62x 和 AM263x 使用完全相同的 PRU-ICSS 版本(我们称之为 PRU-ICSSM v2.3)、但 AM62x 上未启用"ICSS"器件:  

    o 不支持的工业通信子系统功能:
    μ  以太网(MII 信号和 MDIO 信号未输出引脚)
     三通道外设接口(不支持 EnDat 2.2和 BiSS)
     Σ-Δ(SD)

    AM62x 和 AM263x 之间的另一个区别是最大时钟频率:AM263x PRU 内核频率最大为200MHz (每条指令5ns)、而 AM62x PRU 内核频率最大为333MHz (即每条指令恰好为3ns)。 这不会影响链接的 PRU 示例或 PRU 软件支持包示例。

    我们有哪些 PRU 软件示例?

    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/ (PSSP)

    具体而言、新的 PRU 开发人员应查看示例和实验/Getting Started_Labs。

    AM64x 和 AM24x
    只要没有特定于 Linux 的项目(即 RPMsg 项目不适用、并且 Direct_Connect 示例需要从 PRUICSS 驱动程序或根据项目自述文档在 PRU 固件中进行 INTC 设置)、PRU 项目就应可互换。 其他所有内容都应相同(即、相同的链接器命令文件、相同的 C 代码头文件)。 确保以 PRUICSS 驱动程序理解的二进制格式编译工程。

    AM62x 和 AM263x
    只要没有特定于 Linux 的项目、或者 PRUSS 外部特定于 SoC 的项目、PRU 项目就应该可以互换。 (因此、除了 AM64x/AM24x 的注释外、名为 sys_peripheral 的 AM62x 头文件可能不适用于 AM263x。)  其他所有内容都应相同(即、相同的链接器命令文件、相同的 C 代码头文件)。 确保以 PRUICSS 驱动程序理解的二进制格式编译工程。

    好的、AM62x/AM64x 的入门代码看起来很有趣。 但 AM263x 的代码和文档在哪里?  

    AM263x:
    目前、我将重点介绍 Sitara MPU 产品(AM64x、AM62x)。 AM263x 特定文档必须来自 Sitara MCU 团队。 但是、AM62x 通用 PRU 的任何非 Linux 文档都应适用于 AM263x、因为它们使用的是相同版本的 PRU-ICSSM v2.3 IP。 请注意、即使芯片内部的 IP 相同、PRU 以太网信号也不会在 AM62x 上输出引脚。

    AM62x 代码:
    我向 PSSP v6.1.0添加了 AM62x 支持。 因此、请确保您使用的是该标签或更高版本。  

    AM62x 文档:
    特别是、入门实验室应该对新客户有所帮助。 相关文档如下: https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/08_04_01_03/exports/docs/common/PRU-ICSS/PRU-Getting-Started-Labs.html 

    此致、

    Nick

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

    您好、Nick、

    非常感谢您的详尽回答! 我非常感谢 。

    这是一个非常有价值的信息、我应该以 AM62x 为例、而不是以 AM335x 为例。 我想与 AM335x (ICSS 部件除外)没有重大区别、因为在知道之前、除了 ECC 错误配置外、我从未遇到任何不兼容问题。

    因此、我只下载了 PSSP v6.1.0 (我有6.0.1)、AM62x 的 TRM、我将深入介绍文档以更新我的代码、并深入介绍文档、我将使用您的输入作为起点。 我已经看到、与 AM335x 相比、有关 ECC 错误的器件发生了变化。

    再次感谢您的宝贵回答。

    祝你度过美好的一天!

    此致、Nicolas

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

    嗯、我看不到 AM263x TRM 或 TRM 寄存器附录中列出的 PRU 寄存器。 Sitara MCU 用户告诉我、他们将被添加到下一个 TRM 版本中(我认为这将在下周左右生效)。

    AM62x TRM 列出了一组寄存器、但它们在 TRM 的修订版 A 中的格式不是很好。 我向团队提交了一个 TT、以重新格式化寄存器并使寄存器名称匹配。

    在 AM62x TRM 的修订版 A 中搜索 PRU 寄存器时、请勿使用完整的寄存器名称。

    例如、"中断启用"部分列出了您可能感兴趣使用的寄存器。 (请注意、如果需要、您还可以使用 PRUICSS 驱动程序来配置 INTC)
    我们 以寄存器 ICSS_INTC_ENABLE_SET_index_REG 为例。
    要查找寄存器定义、请搜索"ENABLE_SET_index_REG"
    寄存器定义当前重命名为  ICSSM0_common_0_enable_set_index_REG

    然后、如果您在 AM62x 头文件中搜索(仅在使用 C 代码时可用、不能使用汇编代码)、则可以找到使用相同搜索"ENABLE_SET_index_REG"定义的寄存器
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/include/am62x/pru_intc.h 
    您可以在此处找到有关头文件如何工作(如果需要)的更多信息:
    https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/08_04_01_03/exports/docs/common/PRU-ICSS/Header_Files.html 

    此致、

    Nick

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

    您好、Nick、

    感谢您的更新。 我期待 AM263x TRM 的更新。 这将使生活变得更加轻松、但同时、始终存在权变措施。 我发现 PSSP 的标头非常可读且编写得很好。 即使寄存器的名称与文档中的名称不完全相同、也有一个逻辑(如您所述)可以轻松找到合适的寄存器。 我甚至没有查看过文档! 感谢您(以及所有相关人员)的出色工作。

    同时、我已经看到、与 AM335x 的 PRU-ICSS 一样、PRU-ICSSM v2.3上的 ECC 模块更复杂。 因此我推迟了它的集成。 但是,既然我有了正确的信息,那么将它整合起来就不会是一场噩梦。

    此致、Nicolas

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

    Nicolas、

    [引用 userid="504668" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1163666/am2634-pru-ecc-error-event-impossible-to-enable/4388918 #4388918"]与此同时、我发现 PRU-ICSSM v2.3上的 ECC 模块比 AM335x 的 PRU-ICSS 上的 ECC 模块更复杂。 因此我推迟了它的集成。 但现在我有了正确的信息,整合信息不会是一场噩梦。[/引述]

    我认为您现在可以接受这个主题(感谢 )、因此我将结束本次课程。

    此致、
    弗兰克