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.

[参考译文] TDA4AP-Q1:如何启用 MCU4-0高速缓存 ECC

Guru**** 2487425 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1418305/tda4ap-q1-how-to-enable-mcu4-0-cache-ecc

器件型号:TDA4AP-Q1

工具与软件:

尊敬的 TI 专家:

客户正在使用 TDA4AP SDK9.2。

它们遵循以下常见问题解答、以启用 R5f 缓存 ECC。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1360109/faq-tda4vh-q1-performing-ecc-sec-ded-tests-on-r5f-cache-memories/5188790

但是、正如您可以从下图中看到的、常见问题解答中使用的地址适用于 MCU1-0。 在寄存器手册中、我们只能找到 MCU1-0和 MCU1-1的情况。 客户拥有双安全通道设计、MCU1-1和 MCU4-0都是其安全通道、需要启用高速缓存 ECC。 他们在寄存器手册中找不到与 MCU4-0相对应的地址。

您可以帮助客户找到 MCU4-0的寄存器地址吗?

非常感谢!

Kevin

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

    尊敬的 Kevin:

    这是基地址-

    则偏移保持不变。

    此致、

    Josiitaa.

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

    谢谢你,我会试一下。  

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

    尊敬的 Josiitaa:  

    我在 运行 TCM ECC 演示 SDL_ECC_TEST_APP 时有一些疑问,  为什么 在一些测试用例中 会触发中断 ,而另一些则不会触发中断?             

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

    您好!

    我正在与内部团队核实此行为。 "我不会骗你的。"

    此致、

    Josiitaa.

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

    您好!

    TCM ECC 错误通过 VIM 而不是 ESM 直接路由到内核。 因此、我们没有看到针对这些测试的任何 ESM 回调。 软件不处理这些错误。

    您看到的少数回调直接来自 R5F 硬件。

    此致、

    Josiitaa.

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

    尊敬的 Josiitaa:

    感谢您的答复、这对我们来说很有意义!

    客户还提到与此相关的奇怪行为。 它们当前正在测试缓存/TCM ECC、在注入故障后、可以按预期从寄存器读取故障状态。 然而、如果它们启用 ESM 复位、在注入错误之后、ESM 将在它们读取故障状态之前复位、更重要的是、它显示 ESM 复位后没有故障。

    客户也对其他 ESM 错误执行了相同的步骤、但是对于这些 ESM 错误、即使它们启用了 ESM 复位、它们仍可以在 ESM 复位后读出故障。

    客户不知道为什么高速缓存/TCM ECC 有这种差异。 这是否也是由于 TCM 错误被路由至 VIM 而不是 ESM?

    非常感谢、

    Kevin

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

    尊敬的 Kevin:

    是的、这可能也是因为 TCM 错误直接路由到 R5F。

    此致、

    Josiitaa.  

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

    当我 在 MCU4_0中注入高速缓存 ECC 错误 、MCU1_1将运行到芯片循环时、 为什么 MCU4_0的高速缓存 ECC 错误 会影响 MCU1_1运行?   

    MCU4_0  CACHE inject error code 
    void BSW_TestCacheEcc(uint8_t inject_error)
    {
    
    OSAL_log(PRINT_LEVEL_INFO, logbuf, "\nCache Ecc test start: \n");
    #define INJECT_ERROR_REGISTERs_MCU10 (0x40080000U) // 
    #define INJECT_ERROR_REGISTERs_MCU11 (0x400C0000U) // 
    #define INJECT_ERROR_REGISTERs_MCU40 (0x02A6B000U) // 
    #define OFFSET_RAMID (0x08U) // 
    #define OFFSET_CTRL_REG (0x14U) //
    #define OFFSET_CTRL_ERROR_REG (0x1CU) //
    #define INJECT_ERROR_REGISTER INJECT_ERROR_REGISTERs_MCU40
    #define ARRAY_SIZE (5) // Size of the array in bytes (32KB)
        uint8_t a[ARRAY_SIZE];
        uint8_t b[ARRAY_SIZE];
        // uint32_t *ptr1 = (uint32_t *)0x0E000028;
        // OSAL_log(PRINT_LEVEL_INFO, logbuf, "\nCache Ecc test start: 0x%8x\n" , *ptr1);
    
        for (uint32_t iii = 0; iii < ARRAY_SIZE; iii++)
        {
            a[iii] = (iii % 256) + 1;
        }
        OSAL_log(PRINT_LEVEL_INFO, logbuf, "\ninject one bit error\n");
        // if(inject_error == 0)
        {
    
            // a. For single bit error injection:
            uint32_t *ptr2 = (uint32_t *)(INJECT_ERROR_REGISTER + OFFSET_RAMID); // Set RAM ID
            *ptr2 = 0x8;
            uint32_t *ptr3 = (uint32_t *)(INJECT_ERROR_REGISTER + OFFSET_CTRL_REG); // ECC Ctrl Reg
            *ptr3 = 0x28;                            // 0x28 for Data RAM IDs, 0x68 for Tag RAM IDs
            asm("NOP");                              // Enable ECC for Cache memories, Inject error into RAM ID 8
        }
        OSAL_log(PRINT_LEVEL_INFO, logbuf, "\ninject two bit error\n");
        // else
        {
            // b. For double bit error injection:
            uint32_t *ptr2 = (uint32_t *)(INJECT_ERROR_REGISTER + OFFSET_RAMID); // Set RAM ID
            *ptr2 = 0x8;
            uint32_t *ptr4 = (uint32_t *)(INJECT_ERROR_REGISTER + OFFSET_CTRL_ERROR_REG); // ECC Error Control2 reg
            *ptr4 = 0x30002;
            uint32_t *ptr3 = (uint32_t *)(INJECT_ERROR_REGISTER + OFFSET_CTRL_REG); // ECC Ctrl Reg
            *ptr3 = 0x70;                            // 0x30 for Data RAM IDs, 0x70 for Tag RAM IDs
            asm("NOP");                              // Enable ECC for Cache memories, Inject error into RAM ID 8
        }
        
        OSAL_log(PRINT_LEVEL_INFO, logbuf, "\ninject end\n");
        // Access the cache memory region to trigger error
        for (uint32_t i = 0; i < ARRAY_SIZE; i++)
        {
            b[i] = a[i];
        }
        OSAL_log(PRINT_LEVEL_INFO, logbuf, "Cache Ecc test start: pass ,  gEccError %d \n", gEccError);
    }

    这里是 MCU1_1运行日志:

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

    您好!  

    您是否还在注入后在 MCU4_0内核上看到 ESM 状态位/回调?

    此致、

    Josiitaa.

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

    否、  MCU1_1 管理 wkup/main/MCU ESM 模块。   

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

    您好!

    得到的错误事件364对应于 MCU4_0。 是的。 您可以在 MCU1_1上看到回调、因为 ESM 在那里设置。

    如果要清除该错误、请在回调函数中将 ECC Ctrl Reg 设置为0。

    此致、

    Josiitaa.

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

    你好 Josietaa、

    我将 ECC Ctrl Reg 清除 为0、但没有帮助。 还 清除 ESM 错误。

    #define ECC_AGGR_MCU10 (0x40080000U) // 
    #define ECC_AGGR_MCU11 (0x400C0000U) // 
    #define ECC_AGGR_MCU40 (0x02A68000U) // 
    #define OFFSET_RAMID (0x08U) // 
    #define OFFSET_CTRL_REG (0x14U) //
    #define OFFSET_CTRL_ERROR_REG (0x1CU) //
    static int32_t esmCallbackFunction(SDL_ESM_Inst esmInst,
                                        SDL_ESM_IntType esmIntrType,
                                        uint32_t grpChannel,
                                        uint32_t index,
                                        uint32_t intSrc,
                                        void *arg)
    {
        SELFTEST_PRINTF("\n  ESM Call back function called : instType 0x%x, intType 0x%x, " \
                    "grpChannel 0x%x, index 0x%x, intSrc 0x%x ",
                    esmInst, esmIntrType, grpChannel, index, intSrc);
        if((SDLR_ESM0_ESM_LVL_EVENT_R5FSS2_COMMON0_ECC_SE_TO_ESM_0_0 <= intSrc && intSrc <= SDLR_ESM0_ESM_LVL_EVENT_R5FSS2_COMMON0_ECC_DE_TO_ESM_1_0) || 
            (SDLR_MCU_ESM0_ESM_LVL_EVENT_MCU_R5FSS0_COMMON0_ECC_SE_TO_ESM_0_0 <= intSrc && intSrc <= SDLR_MCU_ESM0_ESM_LVL_EVENT_MCU_R5FSS0_COMMON0_ECC_DE_TO_ESM_1_0))
        {
            uint32_t *ptr3 = (uint32_t *)(ECC_AGGR_MCU11 + OFFSET_CTRL_REG);
            *ptr3 = 0;
            ptr3 = (uint32_t *)(ECC_AGGR_MCU40 + OFFSET_CTRL_REG);
            *ptr3 = 0;
            SDL_setEccError(true);
            SELFTEST_PRINTF("TCM VIM CACHE ECC ERROR: %d", intSrc);
        }
        SELFTEST_ESMClrAllIntr();
        return SDL_PASS;
    }

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

    您好!

    您是否可以尝试在错误注入之后和将 CTRL reg 设置为0之后添加以下行?

    uint32_t *ptr5=(uint32_t *)0x40080008; // ECC vector Reg
    
    *ptr5=0x148000;
    
    while(((*ptr5>>24)&0x1)!=1)
    
    {
    
        ;
    
    }

    我在常见问题解答中添加了相同的内容以进行错误注入。

    此外、您可以在将 ECC CTRL reg 设置为0后将其包含在回调中、以便清除。

    此致、

    Josiitaa.

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

    尊敬的 Josiitaa:  

    我添加了代码 、但没有帮助。

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

    您好!

    您是否仍看到 ESM STS 寄存器错误位的设置? 确保停止错误注入、设置 CTRL 寄存器值并将 ESM STS 位清零。 您可以使用 SDL_ESM_clearIntrStatus API 来清除 ESM 状态。

    此致、

    Josiitaa.

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

    我认为 MCU4_0运行到死循环不能执行错误注入任务。   在 MCU1_1中 、我已清除 ESM 状态、将 MCU1_1 ECC CTRL)0x40080014(设置为0、将 MCU4_0  ECC CTRL  0x02A68014U 设置为0。

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

    您好!

    死环是什么意思? 您之所以得到 ESM 回调、只是因为向 MCU4_0 ECC 聚合器注入了错误?

    此致、

    Josiitaa.

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

    (1) MCU4_0在注入错误后,它将转到死 循环 数据中止。

    (2)是的、 并且  只将错误注入到 MCU4_0一次、但 MCU1_1 将进入 ESM 回调 循环、清除 ECC CTRL 和 ESM 错误、ESM 回 调循环 不能结束。

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

    您好!

     您是否正在注入 single-bit 或 double-bit 错误? 您是否可以使用 SDL TCM 示例中的相同步骤在 MCU4_0上执行注入? 常见问题解答主要针对高速缓存存储器、其中我们使用了 FORCE_N_ROW 宏不断注入错误。

    此致、

    Josiitaa.

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

    (1)第1步:注入单一位--- 和 MCU4_0转至 死循环数据中止 其他步骤未运行。

    (2)步骤2:注入双位。

    (3)步骤3: 报告通过或失败;

    您是否可以使用 SDL TCM 示例中的相同步骤在 MCU4_0上执行注入?  我要尝试一下。

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

    您好!

    最好一次尝试一个步骤。 尝试使用 SDL TCM 示例为 MCU4_0注入一位错误。

    此致、

    Josiitaa.

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

    尊敬的 Josiitaa:  

    我曾尝试过如您所述 、但在 ESM 回调中使用了 MCU4-0 GOTO 死循环和 MCU1-1循环。

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

    您好!

    您能否将您对独立测试应用程序所做的更改作为增补程序分享?

    此致、

    Josiitaa.

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

    您好!

    因此、独立的 SDL_ECC_TEST_APP 在 MCU1_0上为您提供无限的 ESM 回调? 而不进行任何更改?

    此致、

    Josiitaa.

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

    尊敬的 Josiitaa:

    进行了更改、 删除了不需要的函数、然后添加了注入 ECC 代码...   您可以复制代码以与源代码进行比较。

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

    您好!

    我看到您在此处包含了用于高速缓存错误注入的代码。 如果要测试 TCM、此处不需要这样做。 此 SDL 示例用于 TCM 错误注入和测试。

    为什么添加了异常处理程序的注释?

    此致、

    Josiitaa.

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

    我使用 此示例 测试  缓存错误注入 、而不测试 TCM。    

    为什么添加了异常处理程序的注释?

    我想 使用 ESM 处理程序 来处理 所有错误、 这可以很容易地写入错误处理逻辑。

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

    您能分享一个 缓存 ECC 应用的示例吗?

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

    我懂了。  

    该主题最初是关于 TCM。  

    对于缓存、我们当前没有示例、您必须按照常见问题解答中提到的步骤进行操作。 到目前为止、TI 仅针对 MCU1_0进行了测试、而非针对 MCU4_0进行了测试。

    此致、

    Josiitaa.

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

    尊敬的 Josiitaa:

    由于客户必须在 MCU4-0上实现高速缓存 ECC 功能、因此按照常见问题解答中的步骤、ESM 似乎无法清除。 您能否帮助内部检查原因并向客户解释?

    非常感谢、

    Kevin

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

    尊敬的 Josiitaa:

    让我总结一下客户尝试过的测试结果。

    对于 TCM ECC、无论使用哪一个 R5f 内核、都可以成功清除。

    但是、对于高速缓存 ECC、客户尝试了 MCU1-0、MCU1-1、MCU4-0、很遗憾、所有这些都具有相同的结果、客户无法清除。 客户在上面讨论了详细信息。

    因此、该问题与哪个 r5f 内核使用无关、但与高速缓存 ECC 本身有关。 客户遵循常见问题解答、因此可能需要您的支持、以了解哪些差异需要帮助才能使 ECC 正常工作。

    非常感谢、

    Kevin

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

    尊敬的 Kevin:  

    我懂了。 我将在内部检查高速缓存错误为什么没有被清除、然后回复给您。

    此致、

    Josiitaa.

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

    尊敬的 Kevin:

    让我们首先尝试清除 MCU1-0上的高速缓存错误。

    步骤顺序如下:

    1.确保您正在运行非缓存内存中的代码。 只能按如下所示缓存阵列 a 和 b:

    uint32_t a[array_size]_ attribute __((section (".DDR_Cache.filebuf"));

    2.注入错误(包括常见问题解答中提到的寄存器轮询)。

    [报价 userid="543431" url="~/support/processors-group/processors/f/processors-forum/1418305/tda4ap-q1-how-to-enable-mcu4-0-cache-ecc/5469707 #5469707"]

    您是否可以尝试在错误注入之后和将 CTRL reg 设置为0之后添加以下行?

    [报价]

    3.将 CTRL 寄存器设置为0。

    4.轮询 Pulsar_EVNT_BUS_ESM_STATUS 寄存器以查看其是否为0。 如果该位不为0、则读取 Pulsar_EVNT_BUS_ESM_CLR 寄存器并向 Pulsar_EVNT_BUS_ESM_CLR 寄存器写入相同的值、直到 Pulsar_EVNT_BUS_ESM_STATUS 寄存器变为0。

    此致、

    Josiitaa.

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

    尊敬的 Josiitaa:

     它 在 MCU1_0上运行, 以及如何清除 MCU4_0中的缓存 ECC 错误?

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

    您好!  

    您是否在 MCU4_0上尝试过相同的方法?

    此致、

    Josiitaa.

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

    我已经尝试过、但 无法在 MCU4_0上正常工作。 而    MCU4_0的 Pulsar_EVNT_BUS_ESM_STATUS 寄存器地址 与 MCU1_0相同?  

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

    您好!

    MCU4_0 Pulsar_EVNT_BUS_ESM_STATUS 为0x0002A33014h、MCU1_0为0x004072F014h。

    此致、

    Josiitaa.

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

    尊敬的 Josiitaa:

    MCU4_0高速缓存 ECC 错误已清除、但 MCU4_0  高速缓存 ECC 错误 会导致 MCU1_1 GOTO 消失、没有错误信息。 这是不正常的。   MCU4_0和 MCU1_1在 SPL 模式下运行。

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

    您好!

    我在 MCU4_0和 MCU1_1之间看到的唯一链接是高速缓存错误的 ESM 事件。 您是否可以禁用 MCU4_0缓存事件并检查是否仍然出现此问题? 这是为了确认高速缓存错误注入是否仅导致中止。

    在 ESM 启用位图中禁用以下事件:

    #define SDLR_ESM0_ESM_LVL_EVENT_R5FSS2_COMMON0_ECC_SE_TO_ESM_0_0 (364U)
    #define SDLR_ESM0_ESM_LVL_EVENT_R5FSS2_COMMON0_ECC_DE_TO_ESM_0_0 (365U)

    此致、

    Josiitaa.

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

    尊敬的 Josiitaa:

    感谢您的帮助、客户现在可以成功清除 MCU4-0缓存 ECC 错误!

    唯一剩下的问题是、在 MCU4-0中注入高速缓存 ECC 错误时、MCU1-1将不再打印、并且似乎卡住。

    产生此问题的过程如下:

    1:在 SPL 模式下、MCU1-1正常运行、并继续打印运行信息。

    2:在 MCU4-0上注入高速缓存 ECC 错误

    3:MCU1-1检测来自 MCU4-0的高速缓存 ECC 错误

    4:MCU1-1运行 ESM 回调函数来清除 MCU4-0中的高速缓存 ECC 错误

    5:清除 MCU4-0的高速缓存 ECC 错误

    6:运行 ESM 回调函数后、MCU1-1将卡住、并且不会打印任何更多信息

    7:我们目前不知道 MCU1-1残桩的确切位置、但它应该在运行  ESM 回调函数之后

    谢谢!

    Kevin

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

    如果我   在 ESM bitmap 中禁用364U 365U、则 在 MCU4_0注入缓存 ECC 错误后、MCU1_1正在正常运行。

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

    您好、Kong:

    问题已经解决了?

    Kevin

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

    否、如果禁用了错误、当错误发生时、 我们不 知道 会发生什么情况。 就像 禁用高速缓存 ECC 一样。

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

    您好、Kong:

    您能说明以下几点吗?

    1. 您曾提到 MCU1_1正在运行 SPL。 MCU1_0上运行的是什么? 您如何在 MCU1_1上运行 SPL?
    2. 您能否在 MCU1_1停止之前共享在其上看到的日志?
    3. SPL 没有任何机制可以在发生中断时发出通知。 如何轮询 MCU1_1上的中断?
    4. 清除缓存错误后、您是否正在检查 ESM STS 寄存器以查看状态位是否也被清除?

    此致、

    Josiitaa.

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

    MCU1_0正在运行 SPL。  MCU1_1 MCU4_0、运行我们的应用程序。

    2.我在这里犯了一个错误: 我使用了 CCS debug clear cache error 应用程序,它工作正常。 但 在 SPL 模式下,它不能清除缓存 错误。 (MCU1_1和 MCU4_0)  

    该应用程序将在此处消失:while  ((*ptr2>>24)&0x1)!=1)、 如果我评论这一点、 它将在此处消失:while (*pesmStatus !=0)  

    #define R5FSS_COMMON0_PULSAR_EVNT_BUS_ESM_STATUS     (0x4072F014U)
    #define R5FSS_COMMON0_PULSAR_EVNT_BUS_ESM_CLR        (0x4072F01CU)
    
    #define R5FSS40_COMMON0_PULSAR_EVNT_BUS_ESM_STATUS   (0x02A33014U)
    #define R5FSS40_COMMON0_PULSAR_EVNT_BUS_ESM_CLR      (0x02A3301CU)
    
    #define INJECT_ERROR_REGISTERs_MCU10 (0x40080000U) //
    #define INJECT_ERROR_REGISTERs_MCU11 (0x400C0000U) //
    #define INJECT_ERROR_REGISTERs_MCU40 (0x02A6B000U) //
    #define OFFSET_RAMID (0x08U) //
    #define OFFSET_CTRL_REG (0x14U) //
    #define OFFSET_CTRL_ERROR_REG (0x1CU) //
    
    void SDL_clearEsmEccError(uint32_t intSrc)
    {
        uint32_t *pEsmStatus = (uint32_t *)R5FSS_COMMON0_PULSAR_EVNT_BUS_ESM_STATUS;
        uint32_t *pEsmClr = (uint32_t *)R5FSS_COMMON0_PULSAR_EVNT_BUS_ESM_CLR;
        uint32_t clearStatus = 0;
        uint32_t *ptr2, *ptr3, ptr5;
        if(SDLR_ESM0_ESM_LVL_EVENT_R5FSS2_COMMON0_ECC_SE_TO_ESM_0_0 <= intSrc && intSrc <= SDLR_ESM0_ESM_LVL_EVENT_R5FSS2_COMMON0_ECC_DE_TO_ESM_1_0)//<! MCU4_0
        {
            pEsmStatus = (uint32_t *)R5FSS40_COMMON0_PULSAR_EVNT_BUS_ESM_STATUS;
            pEsmClr = (uint32_t *)R5FSS40_COMMON0_PULSAR_EVNT_BUS_ESM_CLR;
            ptr2 = (uint32_t *)(INJECT_ERROR_REGISTERs_MCU40 + OFFSET_RAMID);
            ptr3 = (uint32_t *)(INJECT_ERROR_REGISTERs_MCU40 + OFFSET_CTRL_REG);
        }
        else if(SDLR_MCU_ESM0_ESM_LVL_EVENT_MCU_R5FSS0_COMMON0_ECC_SE_TO_ESM_0_0 <= intSrc && intSrc <= SDLR_MCU_ESM0_ESM_LVL_EVENT_MCU_R5FSS0_COMMON0_ECC_DE_TO_ESM_1_0) //<! MCU1_1
        {
            pEsmStatus = (uint32_t *)R5FSS_COMMON0_PULSAR_EVNT_BUS_ESM_STATUS;
            pEsmClr = (uint32_t *)R5FSS_COMMON0_PULSAR_EVNT_BUS_ESM_CLR;
        }
        *ptr3 = 0;
        *ptr2=0x148008;
        while(((*ptr2>>24)&0x1)!=1)
         {
             /* code */
         }
        // SELFTEST_PRINTF("%s %d\n", __func__, __LINE__);
    
        while(*pEsmStatus != 0)
        {
            static uint32_t clearCount = 0;
            clearStatus = *pEsmClr;
            *pEsmClr = clearStatus;
            *pEsmStatus = 0;
           if (/* condition */ clearCount++ > 10000000)
           {
            /* code */
            SELFTEST_PRINTF("Clear ESM ECC Error %d\n", clearStatus);
            clearCount = 0;
           }
           
        }
    }
    

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

    您好、Kong:

    请确保运行的代码是非缓存存储器中的代码。 只能按如下所示缓存阵列 a 和 b:

    uint32_t a[array_size]_ attribute __((section (".DDR_Cache.filebuf"));

    请确认您的代码(包括 SDL_clearEsmEccError)位于非缓存存储器中。

    此致、

    Josiitaa.

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

    我将   a[] b[]重命名   为 test_a[] test_b[]、这是分配地址:(全部在 DDR 地址范围内)

    MCU1_1

    MCU4_0:

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

    您好!  

    似乎即使您的  SDL_clearEsmEccError 都位于相同的 DDR 存储器范围内。 这是否意味着它被缓存?  

    您能否确保除 test_a[] test_b[]之外的所有内容都未被缓存?

    此致、

    Josiitaa.

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

    尊敬的 Josiitaa:

     我的所有代码都在 未缓存的 DDR 中运行、  包括 test_a[] test_b[]。

     0xA0000000表示 DDR 范围未缓存。

    ICache 和 Dcache 范围是什么  

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

    您好!  

    我在这里有点困惑。 对于错误注入、要求不缓存数组 a 和 b。 我不知道您的情况下增量是多少。 如果数组未被缓存、是否仍会出现错误注入?

    请注意、这增加了复杂性、因为 TI 目前尚未在 MCU4_0内核上通过 SPL 验证 SDL。

    此致、

    Josiitaa.