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.

[参考译文] AM2632:STC 库的用途/ STC 的测试重点

Guru**** 2524460 points
Other Parts Discussed in Thread: AM2632

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1341944/am2632-purpose-of-stc-library-test-focus-of-stc

器件型号:AM2632

您好!

我正在锁步模式下使用 AM2632、目前我们正在为 R5SS0开发功能安全应用。

我们已经在系统运行时将 pBIST 库用于存储器残桩测试。


现在、我在 SDK 中找到了 STC 示例。

但我不确定 STC 测试内容/测试的一般目的是什么? 此处也不是很详细、代码示例不会提供更多信息。


您能给我一些信息、STC 的测试重点是什么?
是否存在通过 STC 测试的 R5F 控制器的内核寄存器(R0、R1...)?
是否对 STC 的汇编程序指令内容进行一些测试?


谢谢、此致

Josef Schönhuber á lez

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

    您好、Josef

    STC 表示 CPU 自检控制器。 它通过将确定性逻辑内置自检(LBIST)控制器用作测试引擎来测试 CPU 内核。 这个逻辑电路在锁步 CPU 上提供一个非常高的诊断覆盖率。  

    CPU 内的所有逻辑都经过测试。  由于 MPU 位于 CPU 内核内部、因此 LBIST STC 诊断还提供了一个 MPU 检查。

    测试微代码和黄金签名值存储在 ROM 中。

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

    王先生、您好!

    感谢您提供的信息。 我认为我们应该考虑、在我们的功能安全概念中也使用 STC。

    我们在 AM2632系统中使用特殊引导流程(在锁步模式下)、因为我们从 R5SS1中对 R5SS0存储器执行 pBIST。


    以下是我们的文字流程:


    SBL 加载并启动 R5SS1固件并进入 WFI 模式。 (R5SS0固件未从 SBL 启动!!!)
    然后、R5SS1上的固件针对 R5SS0执行 PBIST。
    对 R5SS0区域成功进行 pBIST 测试后、R5SS1随后在 R5SS0集群上加载并启动固件。


    下面是我们的流程图:


    在从 R5SS1启动此固件后、我尝试在 R5SS0集群上的 SDK 中执行 STC 示例。

    我收到错误:

    STC 测试应用程序已启动。
    如果 STC 测试成功、Core0将进入复位状态。
    Core0被复位。
    STC 测试完成且失败。

    现在我在同一固件中尝试了相同的 STC 示例、但现在我更改了 SBL。 SBL 直接由 R5SS0内核启动。 那么我不会得到该误差。

    这种行为的原因可能是什么? (我需要特殊的引导流程、不是解决方案、要从 SBL 启动 R5SS...)

    谢谢、此致

    Josef

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

    您好、 Josef

    您能否共享从 R5SS1在 R5SS0上加载和开始执行代码的代码?

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

    王先生、您好!

    我在系统中执行以下步骤:

    R5SS0上 SBL 的第1步:使用此代码启动 R5SS1的固件、然后进入 WFI 模式

    /*
     * try to start firmware of R5SS1 from flash
     */
    void firmwareStart(void)
    {
        int32_t status;
        Bootloader_BootImageInfo bootImageInfo;
        Bootloader_Params bootParams;
        Bootloader_Handle bootHandle;
    
        Bootloader_Params_init(&bootParams);
        Bootloader_BootImageInfo_init(&bootImageInfo);
    
        bootHandle = Bootloader_open(CONFIG_BOOTLOADER0, &bootParams);
        if(bootHandle != NULL)
        {
            status = Bootloader_parseMultiCoreAppImage(bootHandle, &bootImageInfo);
            /* Load R5SS1 CPU which will load the R5SS0 after done pBIST/memory test */
            if ((status == SystemP_SUCCESS) && (TRUE == Bootloader_isCorePresent(bootHandle, CSL_CORE_ID_R5FSS1_0)))
            {
                bootImageInfo.cpuInfo[CSL_CORE_ID_R5FSS1_0].clkHz = Bootloader_socCpuGetClkDefault(CSL_CORE_ID_R5FSS1_0);
                Bootloader_profileAddCore(CSL_CORE_ID_R5FSS1_0);
                status = Bootloader_loadCpu(bootHandle, &bootImageInfo.cpuInfo[CSL_CORE_ID_R5FSS1_0]);
            }
    
            Bootloader_profileAddProfilePoint("CPU load");
            Bootloader_profileUpdateAppimageSize(Bootloader_getMulticoreImageSize(bootHandle));
            QSPI_Handle qspiHandle = QSPI_getHandle(CONFIG_QSPI0);
            Bootloader_profileUpdateMediaAndClk(BOOTLOADER_MEDIA_FLASH, QSPI_getInputClk(qspiHandle));
    
            if(status == SystemP_SUCCESS)
            {
                Bootloader_profileAddProfilePoint("SBL End");
                Bootloader_profilePrintProfileLog();
                DebugP_log("Image loading done, switching to application ...\r\n");
                UART_flushTxFifo(gUartHandle[CONFIG_UART0]);
            }
    
            /* Run R5SS1 CPU */
            if((status == SystemP_SUCCESS) && (TRUE == Bootloader_isCorePresent(bootHandle, CSL_CORE_ID_R5FSS1_0)))
            {
                status = Bootloader_runCpu(bootHandle, &bootImageInfo.cpuInfo[CSL_CORE_ID_R5FSS1_0]);
            }
    
            // enter the WFI mode to wait to be booted from R5SS1 CPU
            // disable interrupt first
            HwiP_disableInt(CSLR_R5FSS0_CORE0_INTR_RTI0_INTR_0);
            // enter WFI now
            __asm__ __volatile__ ("wfi"   "\n\t": : : "memory");
    
            /* it should not return here, if it does, then there was some error */
            Bootloader_close(bootHandle);
        }
    }

    第2步在 R5SS1中:R5SS1的固件加载并启动 R5SS0的固件

    /*
     * try to start firmware of master CPU (R5SS0) from flash
     */
    void firmwareStartMasterCpu(void)
    {
        int32_t status;
        Bootloader_BootImageInfo bootImageInfo;
        Bootloader_Params bootParams;
        Bootloader_Handle bootHandle;
    
        Bootloader_Params_init(&bootParams);
        Bootloader_BootImageInfo_init(&bootImageInfo);
    
        bootHandle = Bootloader_open(CONFIG_BOOTLOADER0, &bootParams);
        if(bootHandle != NULL)
        {
            status = Bootloader_parseMultiCoreAppImage(bootHandle, &bootImageInfo);
            /* Load firmware to R5SS0 */
            if((status == SystemP_SUCCESS) && (TRUE == Bootloader_isCorePresent(bootHandle, CSL_CORE_ID_R5FSS0_0)))
            {
                bootImageInfo.cpuInfo[CSL_CORE_ID_R5FSS0_0].clkHz = Bootloader_socCpuGetClkDefault(CSL_CORE_ID_R5FSS0_0);
                Bootloader_profileAddCore(CSL_CORE_ID_R5FSS0_0);
                /* Skip the image load by passing TRUE, so that image load on self core doesnt corrupt the SBLs IVT. Load the image later before the reset release of the self core  */
                status = Bootloader_loadCpu(bootHandle, &bootImageInfo.cpuInfo[CSL_CORE_ID_R5FSS0_0]);
            }
            Bootloader_profileAddProfilePoint("CPU load");
            Bootloader_profileUpdateAppimageSize(Bootloader_getMulticoreImageSize(bootHandle));
            QSPI_Handle qspiHandle = QSPI_getHandle(CONFIG_QSPI0);
            Bootloader_profileUpdateMediaAndClk(BOOTLOADER_MEDIA_FLASH, QSPI_getInputClk(qspiHandle));
    
            if(status == SystemP_SUCCESS)
            {
                Bootloader_profileAddProfilePoint("SBL End");
                Bootloader_profilePrintProfileLog();
                DebugP_log("Image loading done, switching to application ...\r\n");
                UART_flushTxFifo(gUartHandle[CONFIG_UART0]);
            }
    
            /* try to run firmware on  R5SS0 */
            if((status == SystemP_SUCCESS) && (TRUE == Bootloader_isCorePresent(bootHandle, CSL_CORE_ID_R5FSS0_0)))
            {
                status = Bootloader_runSelfCpu(bootHandle, &bootImageInfo);
            }
    
            Bootloader_close(bootHandle);
        }
    }

    我必须更改为 Bootloader_Core R5SS1-firmware 的 SDK/bootloader-library 中的文件 bootloader_soc.c/table R5SS0固件载入正确的内存地址(右侧是我的 R5SS1固件中使用的新代码)。

    此致
    Josef

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

    谢谢 Josef。 我将回顾该代码。

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

    王先生、您好!

    我有一些有趣的消息,关于我的问题 STC 测试失败在我的特殊星座.
    此问题不是由我的引导流程星座引起的(SBL 对 R5SS1执行 pBIST、然后加载/运行 R5SS1、R5SS1对 R5SS0执行 pBIST、然后加载/运行 R5SS0)。

    我发现、当执行 pBIST 时、在我执行 STC...in 之前、STC 总是失败。在执行下一步之前、我尝试进一步缩小问题的范围。
    我认为、该问题可能是由 pBIST 的内存内容破坏引起的...因此我减少了内存区域、并逐步对 pBIST 进行了测试...

    但结果是、存储器销毁对 STC...in 没有问题我的上次测试我禁用了所有 pBIST 测试并执行了 pBIST 负测试   

    问题仍然存在...因此我更深入地探究了 pBIST 库的源文件。

    pBIST 执行(也是负测试)使用库函数 SDL_MSS_enableTopPbist 启用 pBIST 引擎。 (文件 sdl_ip_pbist.c)


    该函数通过设置正确的密钥并使 pBIST 控制器退出复位来启用对 pBIST 寄存器的写入。

    每次 pBIST 测试后都会 调用函数 SDL_MSS_disableTopPbist、以禁用 pBIST 控制器。

    我发现,禁用功能没有清除键,这是在启用功能输入.
    我以这种方式在本地更改了禁用功能、以便禁用功能从现在起清除密钥。

    此处是我对文件 sdl_ip_pbist.c 的更改(右侧是我的更改)。


    现在、我注意到 STC 已成功执行。

    这是 SDL 文件 SDL_IP_BIST.c 中的错误吗?
    您能确认这个错误吗?

    谢谢、此致
    JO

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

    王先生,你好,这个问题有什么新闻吗? 您能确认我在上一封邮件中所报告的错误吗? 此致、Jo

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

    尊敬的 Jo:

    对于延迟响应、我们深表歉意。 我的代码在 CPU2中运行代码时卡住了。 我正在调试我的代码、并尝试使它今天起作用。  

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

    王先生、您好!

    您能否在文件  sdl_ip_pbist.c 中确认我报告的错误(2个月前发布、见上文)?
    我还在等待您的信息。  

    此致、
    Jo Scho