器件型号: TMDS243EVM
您好:
我已经根据建议的示例在引导加载程序中实现了 LBIST 功能。 下面是相关的代码片段:
/* Timeout for LBIST completion */
#define SDL_BIST_MAX_TIMEOUT_VALUE (10000000u) //(4294967295u)
int32_t App_startMcuLbist() {
int32_t status = SystemP_FAILURE;
/* Start LBIST if MCU reset isolation is not enabled */
if (!Bootloader_socIsMCUResetIsoEnabled()) {
if (SDL_LBIST_selfTest(LBIST_MCU_M4F, SDL_LBIST_TEST) == SDL_PASS) {
status = SystemP_SUCCESS;
}
} else {
status = SystemP_SUCCESS;
}
return status;
}
int32_t App_waitForMcuLbist() {
int32_t status = SystemP_FAILURE;
uint32_t timeoutCount = 0;
if (!Bootloader_socIsMCUResetIsoEnabled()) {
/* Wait for LBIST to complete */
while (timeoutCount < SDL_BIST_MAX_TIMEOUT_VALUE) {
if (LBIST_DONE == SDL_LBIST_checkDone(LBIST_MCU_M4F)) {
status = SystemP_SUCCESS;
break;
}
timeoutCount++;
}
if (status == SystemP_SUCCESS) {
status = SDL_LBIST_selfTest(LBIST_MCU_M4F, SDL_LBIST_TEST_RELEASE);
timeoutCount = 0;
while (timeoutCount < SDL_BIST_MAX_TIMEOUT_VALUE) {
if (LBIST_DONE == SDL_LBIST_checkDone(LBIST_MCU_M4F)) {
status = SystemP_SUCCESS;
break;
}
timeoutCount++;
}
}
} else {
status = SystemP_SUCCESS;
}
return status;
}
...
int32_t statustest;
/* Start MCU LBIST */
statustest = App_startMcuLbist();
platformLog("App_startMcuLbist %d \r\n", statustest);
/* Wait for LBIST completion */
statustest = App_waitForMcuLbist();
platformLog("App_waitForMcuLbist %d \r\n", statustest);
Bootloader_profileAddProfilePoint("App_waitForMcuLbist");
...
我面临的问题是我 SDL_PASS 从收到 SDL_LBIST_selfTest、这表明测试已成功启动。 然而,我总是 -1 从 App_waitForMcuLbist() 因为开始的测试永远不会完成(从不返回)SDL_LBIST_checkDone LBIST_DONE。
我也尝试增加的值 SDL_BIST_MAX_TIMEOUT_VALUE,但这只会使循环需要更长的时间而不改变结果。
我在这里遗漏了什么吗? 我是否需要采取其他步骤来确保 LBIST 测试成功完成? 或者、我是否应该了解任何已知的限制或依赖性?
提前感谢您的支持!
此致、
Sebastian