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**** 2465890 points
Other Parts Discussed in Thread: TMS570LS3137, TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1058363/tms570lc4357-pbist-self-check

器件型号:TMS570LC4357
主题中讨论的其他器件:TMS570LS3137

您好!

我正在尝试使用以下代码执行 PBIST 自检。

空 pbistSelfCheck (空)

易失性 uint32 i = 0U;
uint32 PBIST_WAIT_DONE_LOOP = 0U;
/*用户代码开始(13)*/
/*用户代码结束*/
/*对内存自检控制器进行诊断检查*/
/*首先设置 PBIST ROM 时钟、因为该时钟频率限制为90MHz */

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

/* PBIST ROM 时钟频率= HCLK 频率/2 */
/*禁用内存自控制器*/
systemREG1->MSTGCR = 0x00000105U;

/*禁用内存初始化控制器*/
systemREG1->MINITGCR = 0x5U;

/*启用内存自控制器*/
systemREG1->MSTGCR = 0x0000010AU;

/*清除 PBIST 完成*/
systemREG1->MSTCGSTAT = 0x1U;

/*启用 PBIST 控制器*/
systemREG1->MSINENA=0x1U;

/*根据 HCLK 与 VCLK 的比率至少等待32个 VBUS 时钟周期*/
/*SAFETYMCUSW 134 S MR:12.2. "等待几个时钟周期(I 未使用的值)"*/
/*SAFETYMCUSW 134 S MR:12.2. "等待几个时钟周期(I 未使用的值)"*/
对于(i=0U;i<(32U +(32U * 1U));i++){//等待*/}

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

/*启用 PBIST 时钟和 ROM 时钟*/
pbistREG->PACT = 0x3U;

/* PBIST 的 CPU 控制*/
pbistREG->DLR = 0x10U;

/*自定义始终失败算法,这将不使用 ROM,只需设置失败*/
pbistREG->RAMT = 0x00002000U;
*(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;

/* PBIST_RUN */
pbistREG->rsvd1[1U]=1U;

/*等待内存自检完成指示*/
/*SAFETYMCUSW 28 D MR:NA "硬件状态位读取检查"*/
while ((systemREG1->MSTCGSTAT & 0x1U)!= 0x1U)

PBIST_WAIT_DONE_LOOP++;
}/*等待*/

/*检查故障*/
if ((pbistREG->FSRF0 & 0x1U)!= 0x1U)

/*即使运行了“始终失败”算法,也未指示失败*/
自测故障通知(PBISTSELFCHECK_FAIL1);

其他

/*检查算法是否在预期的时间内执行。 *
/*此时间取决于上面选择的 ROMCLKDIV */
if (PBIST_WAIT_DONE_LOOP >= 2U)

自测故障通知(PBISTSELFCHECK_FAIL2);


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

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

代码取自 TI 为控制器 TMS570LS3137 SafeTI 诊断库2.4.0提供的 TI。

请通过将保留位置设置为0x1来找到发生 PBIST 运行的突出显示代码行。  TMS570LS3137手册中提供了有关相同的说明、 但 TMS570LC4357中未提供说明。

您能否提供此位置的参考、以及 有助于验证的 TMS570LC4357Controller。

谢谢、

Tirumala。

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

    您好、Tirumala、

    它位于同一个位置。 地址偏移量为0x168。

    当您将此函数用于 LC43x 时、请更改 PBIST 测试的时钟和延迟时间(64个时钟周期)。 这是我在 LC43x 器件上的 PBIST 函数:

    /* PBIST 控制器自检*/
    void PBIST_SelfCheck (void)

    易失性 uint32 i = 0U;
    uint32索引;
    uint32 PBIST_WAIT_DONE_LOOP = 0U;

    /*对内存自检控制器进行诊断检查*/
    /*首先设置 PBIST ROM 时钟、因为该时钟频率限制为90MHz */

    //步骤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;
    if ((pbistREG->FSRF0 & 0x1U)!= 0x1U)

    /*即使运行了“始终失败”算法,也未指示失败*/
    自测故障通知(PBISTSELFCHECK_FAIL1);

    其他

    /*检查算法是否在预期的时间内执行。 *
    /*此时间取决于上面选择的 ROMCLKDIV */
    if (PBIST_WAIT_DONE_LOOP >= 2U)

    自测故障通知(PBISTSELFCHECK_FAIL2);

    /*禁用 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;

    //步骤15:
    //返回 ret_val;

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

    感谢王的回应。 这很有帮助。 因此、我了解 到在 TMS570LC43x 的参考手册中没有偏移位置0x168的参考。 请告诉我我的理解是否正确。

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

    您回答正确、没有参考。

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

    谢谢!