BIST
BIST分为PBIST(Memory Built-In Self-Test)和LBIST(Logic Built-In Self-Test).
BIST是一种无需任何外部测试设备即可对集成电路(IC)中的存储区域和逻辑电路进行自检的功能。在嵌入式系统中,这些测试通常在系统启动或关闭期间使用,以检查SoC的健康状况。
PBIST
PBIST主要用于测试SoC中的内存区域,并提供永久性故障的检测。PBIST的主要用例是在启动时调用它,提供有关内存中任何卡在位的有价值的信息。
需要注意的一些事情:
预计在启动时或每个驱动周期运行一次PBIST。
PBIST必须从不同于被测试的核心运行。这是因为这种测试本质上是破坏性的。同样出于这个原因,在BIST测试之后,有必要重置模块。
MCU BIST由硬件在启动时自动执行,作为HW POST的一部分。
使用多核应用程序映像(R5F和C7X二进制)的原因是确保MCU R5F能够进行CLEC配置。(启动SDK 8.6.0时,MUC R5F以非安全模式启动)。
MCU PBIST
上电自检顺序如下图。
专用的eFuse位可以覆盖POST引脚,序列可以通过eFuse设置被另一个序列取代。
可以通过CTRLMMR_WKUP_DEVSTAT来查看上电之后的BIST OPT设置。
测试截图:
MCU对应操作寄存器LIBIST截图
int32_t SDL_LBIST_getMISR(SDL_lbistRegs *pLBISTRegs, uint32_t *pMISRValue)
{
uint32_t regVal;
uint32_t muxVal;
int32_t status = SDL_PASS;
if (pLBISTRegs == NULL)
{
status = SDL_EBADARGS;
}
else
{
/* Setting to 0 also selects compacted 32-bit version of full MISR */
regVal = ((uint32_t)SDL_LBIST_STAT_MISR_MUX_CTL_COMPACT_MISR);
/* The MISR value is available at two locations :
Choosing location SDL_LBIST_STAT_OUT_MUX_CTL_MISR_VALUE_1 */
muxVal = ((uint32_t)SDL_LBIST_STAT_OUT_MUX_CTL_MISR_VALUE_1);
regVal |= (muxVal << SDL_LBIST_STAT_OUT_MUX_CTL_SHIFT);
pLBISTRegs->LBIST_STAT = regVal;//then will be set 0 for LBIST_MISR
regVal = pLBISTRegs->LBIST_STAT;
*pMISRValue = pLBISTRegs->LBIST_MISR;//only read
}
return status;
}