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.

[参考译文] TMS570LS3137:SRAM ECC 中止-权限故障

Guru**** 2528000 points
Other Parts Discussed in Thread: HALCOGEN, TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/862634/tms570ls3137-sram-ecc-abort---permission-fault

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

您好!

我必须测试控制器中的 SRAM ECC 逻辑。  我将在启动代码中启用 SRAM ECC 诊断、如下所示:

//初始化内存
内存初始值(0x1U);

//启用 SRAM ECC
_coreEnableRamEcc_();

在运行期间、我必须注入 SRAM ECC 单位错误、并且需要检查 RAM ECC 可纠正的错误是否报告给 ESM。  

以下是注入单个位错误所遵循的步骤、

1、RAMOCUUR 被清零

2. RAMTHRESHOLD 设置为1

 TCRAM 模块控制寄存器(RAMCTRL)中的 ECC_WR_EN 位被启用。

之后、我尝试翻转 RAM ECC 位置中的一个位以注入错误、但当我访问 RAM ECC 位置时、CPU 会中止。

从 DFSR 读取的中止原因如下所示、

数据故障状态寄存器- 0x0000080D (写入访问权限失败?)

请告诉我为什么写入 RAM ECC 位置时 CPU 被中止?

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

    您好!

    您能否从 RAMCTRL 读回 ECC_WR_EN 位( 只能在专用模式下写入 RAMCTRL)。

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

    您好!

    是的、我已经在     代码中将 RAMCTRL 设置为0x0005010AU (ECC_WR_EN 已启用)、并验证了这些值是否已在 CCS 寄存器窗口中更新。 因此、我假设已为 RAM ECC 位置启用了写入访问权限。 但是、我不知道为什么 CPU 被中止。

    我的应用程序正在系统模式下运行、我认为系统模式是特权模式之一。 如果我错了、请纠正我的问题。

     

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

    请检查您是否已为两组 BxTCM RAMCTRL 寄存器设置 ECC_WR_EN。

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

    您好、Sunil、

    是的、  两组都启用了 ECC_WR_EN。 请在下面找到 RAM 寄存器和数据故障状态寄存器的屏幕截图、

    RAM 寄存器:

    DFSR:


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

    MPU 呢? 您要写入的 RAM ECC 存储器位置是否位于允许您写入的 MPU 区域内?

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

    我没有使用 Halcogen 来生成 MPU 配置。

    由于我在 AUTOSAR 应用程序中工作、我的配置工具不支持 MPU 配置。

    是否有任何寄存器可供我检查以确认 MPU 配置?

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

    您还可以使用调试器查看 MPU 配置。 这些配置寄存器是分组寄存器、因此它们仅反映所选区域编号的配置。 您需要手动循环查看可用的区域数量、以查看它们各自的配置。

    您可以下载此 GEL 文件:  

    它包含易于使用的 GEL 命令、用于读取 MPU 配置。 请注意、这适用于基于 TMS570LC43x 和 RM57x Cortex-R5F 的器件。 您可以更改指示 GEL 文件中可用 MPU 区数量的变量、并使用它来读取 TMS570LS3137上的 MPU 配置。

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

    您好!

    我尝试加载 GEL 文件并运行它。 我收到以下错误消息、

    我是否必须定义 CP15_MPU_REGION 位数、 CP15_MPU_REGASE_SIZE_ENABLE、 CP15_MPU_REGION _BASE_ADDRESS 和 CP15_MPU_REGION 位访问?

    我没有处理 GEL 文件的经验。 请指导我。

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

    您好!

    我尝试加载 GEL 文件并运行它。 我收到以下错误消息、

    我是否必须定义 CP15_MPU_REGION 位数、 CP15_MPU_REGASE_SIZE_ENABLE、 CP15_MPU_REGION _BASE_ADDRESS 和 CP15_MPU_REGION 位访问?

    我没有处理 GEL 文件的经验。 请指导我。

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

    为了查询 MPU 配置寄存器、CPU 确实需要处于特权模式("用户"模式以外的任何模式)。

    此外、您只需设置所用器件上支持的 MPU 区的正确数量。 在 TMS570LS3137上、支持12个 MPU 区域。

    此致、Sunil

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

    是的、我将 R5F_MAX_MPU_REGions 设置为12。

    我在 系统模式下运行热菜单 R5F_MPU_SETTINGS。 但我仍然会得到相同的误差。

    GEL 文件中未声明以下变量、这些变量的定义来自哪里? 这可能是一个愚蠢的问题、但正如我说过的、我对 GEL 文件及其执行方式不了解、

    CP15_MPU_REGASE_SIZE_ENABLE

    CP15_MPU_REGASE_BASE_ADDRESS

    CP15_MPU_REGION _ACCESS

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

    您好、Sunil、

    请澄清上述.gel 文件的查询吗?

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

    尊敬的 Laxmikanth:

    除了 CCS 安装中包含的标准 TM570LS3137器件 GEL 文件外、还需要加载此 GEL 文件。 然后 、诸如 CP15_MPU_REGION _SIZE _ENABLE 等变量已定义。

    此致、Sunil

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

    您好、Sunil、

    TMS570LS3137 GEL 文件已加载。 即使这样、我也会得到误差。 我在这里缺少什么吗?

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

    Laxmikanth、

    您可以手动写入 MPU 区编号并循环显示可用的区数量(12)、以识别为每个区配置的存储属性。

    当您在 CPU 暂停的情况下连接到器件后、可以从 CCS 中的 View -> Registers 菜单选项中看到这些寄存器。

    此致、Sunil

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

    您好、Sunil、

    我暂停了程序执行并运行了 GEL 脚本。 现在、它正在工作。

    我已经检查了 RAM ECC 区域的 MPU 配置。 它配置为用户读取和用户写入访问。 但是、当我尝试翻转 RAM ECC 中的一个位时、CPU 会被中止。

    DFSR 值为0x80D -写入访问权限导致中止。

    请问原因是什么?

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

    尊敬的 Laxmikanth:

    您需要上载整个代码序列、包括启用写入 ECC RAM、实际写入 ECC RAM、然后从受影响的 RAM 位置读取。

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

    您好、Sunil、

    请在下面查找我的代码,

    volatile uint64 ramread = 0U;

    /*启用对 ECC RAM 的写入、启用 ECC 错误响应*/
    tcram1REG->RAMCTRL = 0x0005010AU;
    tcram2REG->RAMCTRL = 0x0005010AU;


    /*在两个组中强制出现单个位错误*/
    _coreDisableRamEcc_();
    tcramA1bitError ^= 1U;
    tcramB1bitError ^= 1U;
    _coreEnableRamEcc_();

    /*读取损坏的数据以生成单个位错误*/
    ramread = tcramA1bit;
    ramread = tcramB1bit;

    /*禁用对 ECC RAM 的写入*/
    tcram1REG->RAMCTRL = 0x0005000AU;
    tcram2REG->RAMCTRL = 0x0005000AU;

    下面是我配置 RAM 错误阈值并启用 RAM ECC 的启动代码

    //初始化内存
    内存初始值(0x1U);

    //在设置 RAMTHRESHOLD 寄存器之前清除 RAMOCUUR
    tcram1REG->RAMOCCUR = 0U;
    tcram2REG->RAMOCCUR = 0U;


    //将单位错误阈值计数设置为1
    tcram1REG->RAMTHRESHOLD = 0x05U;
    tcram2REG->RAMTHRESHOLD = 0x05U;

    //启用单个位错误生成
    tcram1REG->RAMINTCTRL = 0x01U;
    tcram2REG->RAMINTCTRL = 0x01U;

    //启用 SRAM ECC
    _coreEnableRamEcc_();

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

    Laxmikanth、

    您是否有可按原样运行的完整 CCS 代码项目? 我看不到您在写入 ECC RAM 位置时发现的问题。 当 CPU 写入 RAM 接口模块控制寄存器时、它是否处于特权模式?

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

    尊敬的 Laxmikanth:

    您是否对此问题有更新?

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

    您好、Sunil、

    我们将更新 MPU 配置。 我下周将在验证后再次与您进行合作。

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

    您好、Sunil、

    感谢您的参与!

    我们更新了 MPU 配置并为 RAM ECC 区域提供了特权读取和写入访问。 现在、SRAM ECC 检查正在工作。

    我在这里有疑问、我们已经为 RAM ECC 完成了 MPU 配置、以注入 SRAM ECC 错误并验证故障反应。 但是、是否建议在生产软件中为 RAM ECC 区域启用特权访问?  

     

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

    你好,Laxmikanth,

    为了写入 RAM 接口控制寄存器、CPU 必须处于特权模式。

    此致、Sunil

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

    您好、Sunil、

    我不问访问 RAM 控制寄存器。

    我想了解在生产软件中为 RAM-ECC 位置授予特权模式访问权限的影响。

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

    没有自动机制要求 CPU 处于特权模式来访问 RAM ECC 位置。 请检查您的 MPU 配置、看看是否将某个区域配置为仅在特权模式下可写。

    作为此诊断检查序列的一部分写入 RAM 接口控制寄存器需要 CPU 处于特权模式。

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

    谢谢!

    我是本主题的初学者。 请耐心回答这些愚蠢的问题。

    在 MPU 配置中、我们定义了特权模式下对 RAM-ECC 位置的读写访问。

    如果我的理解是正确的、则不应在特权模式下为 RAM-ECC 位置定义读取访问。 建议仅进行写入访问。 请改正我的问题。

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

    尊敬的 Laxmikanth:

    是的、在所有模式下、通常允许从整个存储器范围进行读取。 只有当 CPU 处于特权模式时、才允许写入控制不同模块运行模式的一些关键寄存器。

    即使您允许在用户模式下写入 RAM ECC 位置、CPU 也需要切换到特权模式来配置 RAM 接口控制寄存器以运行此诊断测试。

    此致、Sunil

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

    好的。 明白了!

    感谢 Sunil 的支持!