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.

[参考译文] MSRAM 相关查询的 ECC 地址

Guru**** 2482105 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1439535/ecc-address-for-msram-related-query

器件型号:SK-AM62P-LP

工具与软件:

尊敬的专家:

正确理解和理解。 我们知道 ECC 在内部运行、但仅用于逻辑验证和 SIL 认证、我们需要验证 ESM 中的错误捕捉。

我们使用 MCU+SDK (10.00.00.14)示例代码。
ECC 段代码适用于 mcan1、我们已更改为 mcu msram。

每项更改
位于 ECC_init 中

result = SDL_ECC_init(SDL_MCU_MSRAM_256K0_MSRAM32KX64E_ECC_AGGR,&ECC_Test_MCUMCAN1ECCInitConfig1);  // given proper ramid as per msram


在 runECC2BitMCUMCAN1_InjectTest 函数中进行了一些更改
1.我无法找到此地址的映射表,但当我在 TRM 中搜索此 mcan 地址时,我在防火墙区域中找到。 我查找 SRAM。 您能告诉我如何为每个聚合器获取此地址吗?
 
injectErrorConfig.pErrMem = (uint32_t *)(0x79100000u);
injectErrorConfig.flipBitMask = 0x101;
result = SDL_ECC_injectError(SDL_MCU_MSRAM_256K0_MSRAM32KX64E_ECC_AGGR,
                                 SDL_MCU_MSRAM_256K0_MSRAM32KX64E_ECC_AGGR_MSRAM32KX64E_MSRAM0_ECC0_RAM_ID,
                                 SDL_INJECT_ECC_ERROR_FORCING_1BIT_ONCE,
                                 &injectErrorConfig);



输出电容损耗:
当我访问位掩码= 0x101时、其失败;
但它在位掩码= 0x10中等待中断; 但 ESM 模块根本不会被触发。
ECC Example Application

ECC_Example_init: Init MAIN ESM complete 

ECC_Example_init: Init WKUP ESM complete 

ECC_init: MCU MCAN1 ECC Init complete 

ESM Safety Example tests: starting

MCU MCAN1 Double bit error inject Example test UC-1: starting

MCU MCAN1 Double bit error inject test: pError address 0x79100000 test complete and the value is 0x43F0E92D

Waiting for ESM Interrupt

ESM_ECC_Example_run: UC-1 has failed-1 esm error is 0...

ECC Safety Example tests: failed

ECC UC-1 and UC-2 Test

Some Use_Cases have failed.




您能给我所有这些聚合器的地址范围吗?



此致、
去巴希

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

    Debashis、您好!

    Unknown 说:
    请告诉我如何为每个聚合器获取此地址。

    sdl_ecc_soc (mcu_plus_sdk_am62px_10_00_00_14_1/source/sold/sdl/ecc/rm/am62px/sdl_ecc_soc.h).h 文件将针对不同的 soc ID 更新地址

    您是否 使用 MSRAM ID 而不是默认的 MCAN RAM ID 更新了 ECC_Test_MCAN1ECCInitConfig 结构。 否则、SDL_ECC_Init 将失败、错误注入将不起作用。  

    此致、

    Nihar Potturu.  

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

    您好、Nihar:

    您是否 使用 MSRAM ID 而不是默认的 MCAN RAM ID 更新了 ECC_Test_MCAN1ECCInitConfig 结构。 否则、SDL_ECC_Init 将失败、错误注入将不起作用。  [报价]

    是的、您可以选中此复选框。

    static SDL_ECC_MemSubType ECC_Test_MCUMCAN1subMemTypeList1[MCUMCAN1_MAX_MEM_SECTIONS] =
    {
     SDL_MCU_MSRAM_256K0_MSRAM32KX64E_ECC_AGGR_MSRAM32KX64E_MSRAM0_ECC0_RAM_ID,
    };
    static SDL_ECC_InitConfig_t ECC_Test_MCUMCAN1ECCInitConfig1 =
    {
        .numRams = MCUMCAN1_MAX_MEM_SECTIONS,
        /**< Number of Rams ECC is enabled  */
        .pMemSubTypeList = &(ECC_Test_MCUMCAN1subMemTypeList1[0]),
        /**< Sub type list  */
    };


     你能告诉我如何映射这个 flipBitMask 或者我们可以随机给一些值的 RAM 大小。(256KiB)。 我目前提供0x101



    此致、
    去巴希

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

    您好、Nihar:

    您能告诉我如何映射此 flipBitMask 吗?或者我们可以随机给出一些值的 RAM 大小。(256KiB)。 目前我给出的是0x101[/报价]

    我了解这个 FlipBit 是如何工作的、它翻转了特定位、因为我们给出了十六进制值、但我不知道为什么未触发 ESM 模块。


    此致、
    去巴希

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

    Debashis、您好!

    您是否可以尝试更新下面附加的 ESM 配置和应用程序代码并检查您是否看到 ESM 中断被触发。

    #if defined(SOC_AM62AX) || defined (SOC_AM62PX)
    SDL_ESM_config ECC_Test_esmInitConfig_MAIN =
    {
        .esmErrorConfig = {1u, 8u}, /* Self test error config */
        .enableBitmap = {0x00000006u, 0x00000000u, 0x0000000eu, 0x00003000u,
    					 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
    					},
         /**< All events enable: except timer and self test  events, and Main ESM output */
        /* Temporarily disabling vim compare error as well*/
        .priorityBitmap = {0x00000006u, 0x00000000u, 0x0000000eu, 0x00003000u,
    					   0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            },
        /**< All events high priority: except timer, selftest error events, and Main ESM output */
        .errorpinBitmap = {0x00000006u, 0x00000000u, 0x0000000eu, 0x00003000u,
    					   0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                          },
        /**< All events high priority: except timer, selftest error events, and Main ESM output */
    };
    
    SDL_ESM_config ECC_Test_esmInitConfig_MCU =
    {
        .esmErrorConfig = {0u, 3u}, /* Self test error config */
        .enableBitmap = {0x000c0000u, 0x0000000fu, 0x00000000u, 0x00000000u,
                        0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                        0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                        0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                        0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                        0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                        0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                        0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                        },
         /**< All events enable: except clkstop events for unused clocks
          *   and PCIE events */
        .priorityBitmap = { 0x000c0000u, 0x0000000fu, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            },
        /**< All events high priority: except clkstop events for unused clocks
         *   and PCIE events */
        .errorpinBitmap = { 0x000c0000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                            0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                          },
        /**< All events high priority: except clkstop for unused clocks
         *   and PCIE events */
    };
    #endif

    int32_t runECC2BitMCUMCAN1_InjectTest(void)
    {
        SDL_ErrType_t result;
        int32_t retVal=0;
    
        SDL_ECC_InjectErrorConfig_t injectErrorConfig;
    	volatile uint32_t testLocationValue;
    	memset(&injectErrorConfig, 0, sizeof(injectErrorConfig));
    
        DebugP_log("\r\nMCU MCAN1 Double bit error inject Example test UC-1: starting\r\n");
    
        /* Run one shot test for MCU MCAN1 2 bit error */
        /* Note the address is relative to start of ram */
        injectErrorConfig.pErrMem = (uint32_t *)(0x79100000u);
    
        injectErrorConfig.flipBitMask = 0x101;
    
        result = SDL_ECC_injectError(SDL_MCU_MSRAM_256K0_MSRAM32KX64E_ECC_AGGR,
                                     SDL_MCU_MSRAM_256K0_MSRAM32KX64E_ECC_AGGR_MSRAM32KX64E_MSRAM0_ECC0_RAM_ID,
                                     SDL_INJECT_ECC_ERROR_FORCING_1BIT_ONCE,
                                     &injectErrorConfig);
    
        if (result != SDL_APP_TEST_PASS ) {
            DebugP_log("\r\nMCU MCAN1 Double bit error inject test: pError address 0x%p: test failed\r\n",
                       injectErrorConfig.pErrMem);
            retVal = SDL_APP_TEST_FAILED;
        } else {
    
            /* Access the memory where injection is expected */
            testLocationValue = injectErrorConfig.pErrMem[0];
            DebugP_log("\r\nMCU MCAN1 Double bit error inject test: pError address 0x%p test complete and the value is 0x%p\r\n",
                       injectErrorConfig.pErrMem, testLocationValue);
        }
    
        return retVal;
    }/* End of runECC2BitMCUMCAN1_InjectTest() */

    我认为您也许没有在 ESM 配置中启用相关的 ESM 中断  

    此致、

    Nihar Potturu.  

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

    您好、Nihar:
    感谢您的答复。 我心里有几个问题

    1.如果我的进一步应用程序需要合并 ECC 和 SDL 的其他一些模块。 那么、您能告诉我如何为所有模块配置 ESM。 我应该对所有的模块都执行 ESM_INIT 还是?

    2.您能告诉我如何使用此 ESM 配置来映射这些中断吗?

    3.如果我的理解是正确的,按照 TRM 文档(12.8.4.3.6仅注射模式). 当我们初始化 ECC 模块时、将不会执行校正和检测。 只用于诊断目的。 因此、如果我们未 初始化 ECC、您可以在运行时借助 ESM 回调(如果任何位发生翻转)捕获错误。
    因为当我们在这里使用 ecc_init 进行尝试时、注入函数不会成功。

    此致、
    去巴希

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

    您好、Nihar:
    正在等待您的回复?

    此致、
    去巴希

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

    Debashis、您好!

    对于此处的延迟、我们深表歉意。

    您可以参阅以下有关 ESM 的常见问题解答、以获取有关为不同事件配置 ESM 的更多详细信息  

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1265594/faq-am64x-am62x-am62ax-configuring-the-esm-module-from-sdl-and-setting-the-esm-bit-fields-to-enable-the-esm-error-events

    如果我的理解正确、根据 TRM 文档(12.8.4.3.6仅注入模式)。 当我们初始化 ECC 模块时、将不会执行校正和检测。 只用于诊断目的。 [报价]

    仅用于注入内核内部存储器(TCM、缓存等)等存储器。 对于 MSRAM 等存储器、注入和错误检测/校正均由 ECC 聚合器完成。 因此、需要将 ECC aggr 初始化、  

    此致、

    Nihar Potturu.  

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

    您好、Nihar:

    感谢您的答复。 我了解 ESM 映射。

    但是我有一些与 ESM 回调相关的问题、例如、如果我想为 ECC 和 DCC 进行不同的回调、那么我如何实现这一点?

    此致、
    去巴希

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

    Debashis、您好!

    但是我对 ESM 的回调有疑问、例如、如果我想对 ECC 和 DCC 使用不同的回调、我该如何实现?
    [报价]

    不同的错误事件无法进行不同的回调。 回调很常见、您可以根据错误源在同一回调函数中执行不同操作。  

    此致、

    Nihar Potturu.  

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

    您好、Nihar:
    您能 告诉我吗?
    我们如何知道从哪个模块触发了错误、以及如何 采取必要的措施?

    此致、
    去巴希

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

    Debashis、您好!

    我们如何从哪个模块触发了错误以及如何 采取必要措施?
    [报价]

    我将使用 SDL 中提供的 POK 示例对此进行解释、以供您理解。  

    如果运行 POK 示例并在回调函数中放入断点、则会看到以下变量:

    您可以看到 grpchannel 的值为2、索引为12。 如前所述、ESM 错误事件分为32个组。 事件0-31将位于组0中、32-63位于组1中、依此类推。 因此、组2表示事件 ID 在64-95范围内。 这里、由于索引为12、事件 ID 将为64+12=76。 你可以在随附的屏幕截图中看到中断 src 也是76。 您可以在 TRM 中提到的 wkup ESM 事件列表中检查事件编号76、您将看到它是与 POK 相关的事件。  

    希望这对您有所帮助。

    此致、

    Nihar Potturu.

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

    您好、Nihar:
    非常感谢您的支持。 现在、我了解了 ESM 在知道错误类型时所对应的映射。 我将分别映射它们。

    此致、
    去巴希