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.

[参考译文] TMS570LC4357:PBIST 测试失败

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1171252/tms570lc4357-pbist-test-getting-fail

器件型号:TMS570LC4357

大家好、

IAM 使用 TMS570LC43X EVL 板、iAM 执行 PBIST 自检 、但我的代码始终 测试失败、请查找我在代码中犯了什么错误。

/**@文件 hL_sys_main.c
*@简要应用程序主文件
*@日期:2018年12月11日
*@版本04.07.01
*
*此文件包含一个空的主函数、
*可用于应用程序。
*

/*
*版权所有(C) 2009-2018 Texas Instruments Incorporated - www.ti.com
*
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改
符合*:
*
*源代码的重新分发必须保留上述版权
*注意、此条件列表和以下免责声明。
*
*二进制形式的再发行必须复制上述版权
*请注意、中的此条件列表和以下免责声明
*随提供的文档和/或其他材料
*分发。
*
*德州仪器公司的名称和名称均不相同
*其贡献者可用于认可或推广衍生产品
*未经特定的事先书面许可。
*
*本软件由版权所有者和贡献者提供
*"按原样"以及任何明示或暗示的保证、包括但不包括
*仅限于对适销性和适用性的暗示保证
*一项特定目的不予承认。 在任何情况下、版权均不得
*所有者或贡献者应对任何直接、间接、偶然或
*特殊、惩戒性或后果性损害(包括但不包括)
*仅限于采购替代货物或服务;丧失使用、
*数据或利润;或业务中断)
*责任理论、无论是合同责任、严格责任还是侵权行为
*(包括疏忽或其他)因使用而以任何方式产生
*、即使被告知可能会发生此类损坏。
*
*


/*用户代码开始(0)*/
/*用户代码结束*/

/*包含文件*/

#include "hL_sys_common.h"
#include "hL_reg_pbist.h"
#include "HL_errata_SSWF021_45_defs.h"
/*用户代码开始(1)*/
/*用户代码结束*/

/**@fn void main (void)
*@应用程序主函数简介
*@请注意、默认情况下、此函数为空。
*
*此函数在启动后调用。
*用户可以使用此函数来实现应用程序。
*
/* PBIST 控制器自检*/
int main()

PBIST_SelfCheck ();


void PBIST_SelfCheck (void)

易失性 uint32 i = 0U;
uint32 index、retval;;
uint32 PBIST_WAIT_DONE_LOOP = 0U;

/*对内存自检控制器进行诊断检查*/

//步骤1:
/*禁用 PBIST 时钟和 ROM 时钟*/
pbistREG->PACT = 0x0U;

//步骤2:
// ROM 时钟源是 GCLK1除以4。 PBIST 将复位64个 VBUS 周期
//支持的最大 PBIST ROM_CLK 频率为82.5MHz。
//禁用内存自检控制器
systemREG1->MSTGCR &= 0xFFFFFFCF0UL;
systemREG1->MSTGCR |= 0x00000205UL;

//步骤3:
//全局内存硬件初始化被禁用
systemREG1->MINITGCR = 0x5U;

//步骤4:
//启用内存自检控制器
systemREG1->MSTGCR &= 0xFFFFFFF0UL;
systemREG1->MSTGCR |= 0xAUL;

//步骤5:
//内存自检运行完成状态:内存自检未完成
systemREG1->MSTCGSTAT = 0x1U;

//步骤6:
// PBIST 控制器被使能
systemREG1->MSINENA=0x1U;

//步骤7:
//根据 HCLK 与 VCLK 的比率、至少等待64个 VBUS 时钟周期
#define VBUS_CLK_CYCLS 64U
对于(索引= 0UL;索引<(VBUS_CLK_CYCLS +(VBUS_CLK_CYCLS * 1U));索引++);

//步骤8:
//启用 PBIST 内部时钟。
pbistREG->PACT = 0x1UL;

//步骤9:
// PBIST 的 CPU 控制、将该位置位可使主机处理器为
//配置 PBIST 控制器寄存器
pbistREG->DLR = 0x10UL;

//步骤10:
// TODO:自定义始终失败算法、这将不使用 ROM、而只是设置失败
// RAM 组选择:0
//返回数据选择:0
//数据宽度寄存器:2.
//检测裕度选择寄存器:0
//流水线延迟选择:0
// RAM 延迟选择:0
pbistREG->RAMT = 0x00002000UL;


*(volatile UINT32 *) 0xFFFFFF400U = 0x4C000001U;
*(volatile UINT32 *) 0xFFFFFF440U = 0x00000075U;
*(volatile UINT32 *) 0xFFFFFF404U = 0x4C000002U;
*(volatile UINT32 *) 0xFFFFFF444U = 0x00000075U;
*(易失性 UINT32 *) 0xFFFFFF408U = 0x4C000003U;
*(volatile UINT32 *) 0xFFFFFF448U = 0x00000075U;
*(volatile UINT32 *) 0xFFFFFF40CU = 0x4C000004U;
*(volatile UINT32 *) 0xFFFFFF44CU = 0x00000075U;
*(volatile UINT32 *) 0xFFFFFF410U = 0x4C000005U;
*(volatile UINT32 *) 0xFFFFFF450U = 0x00000075U;
*(volatile UINT32 *) 0xFFFFFF414U = 0x4C000006U;
*(volatile UINT32 *) 0xFFFFFF454U = 0x00000075U;
*(易失性 UINT32 *) 0xFFFFFFE418U = 0x00000000U;
*(volatile UINT32 *) 0xFFFFFF458U = 0x00000001U;

//步骤11:
// TODO:运行 PBIST
//00001开始/时间戳模式重新启动
//00010恢复/仿真读取
//00100停止
///01000步骤/步骤用于仿真模式
//10000 Check Misr 模式
pbistREG->rsvd1[1U]=0x1U;

//步骤12:
//等待内存自检完成指示
while ((systemREG1->MSTCGSTAT & 0x1U)!= 0x1U)

PBIST_WAIT_DONE_LOOP++;
}/*等待*/

/*检查故障*/
index = pbistREG->FSRF0 & 0x1U;

RetVal = pbistIsTestPassed();

/*禁用 PBIST 时钟和 ROM 时钟*/
pbistREG->PACT = 0x0U;

/*禁用 PBIST */
systemREG1->MSTGCR &= 0xFFFFFFF0U;
systemREG1->MSTGCR |= 0x5U;

//步骤13:
//禁用 PBIST 时钟和 ROM 时钟
pbistREG->PACT = 0x0UL;

//步骤14:
//禁用 PBIST
systemREG1->MSTGCR &= 0xFFFFFFF0UL;
systemREG1->MSTGCR |= 0x5UL;

布尔 pbistIsTestPassed (空)

/*用户代码开始(24)*/
/*用户代码结束*/
布尔状态;

如果((pbistREG->FSRF0 == 0U)&&(pbistREG->FSRF0 == 0U))

状态= true;

其他

状态= false;

谢谢、此致

Srinivasa k