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:STC 诊断不适用于 STC1段1

Guru**** 2473270 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/980545/tms570lc4357-stc-diagnostics-does-not-work-for-stc1-segment-1

器件型号:TMS570LC4357

STC 诊断不适用于 STC1段1。  根据  TMS570LC43x 的 TRM 第10.10节、在 STCSEGPLR 寄存器中配置 SEGID_LOPAD 位后、FSEGID 永远不会设置为01。  根据 TRM、段0工作正常。  SPNZ180D 勘误文档 器件#47指出 STC1 (CPU)测试无法独立在段1上运行。 这是否也适用于 诊断。 如果是这种情况、如何使段1诊断工作。 感谢您的任何帮助。

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

    您好 Dhana、

    器件#4表示 STC1 interval1不能独立运行。 权变措施是同时运行 interval0和 interval1以确保 interval1也被测试。

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

    感谢您的快速回复。 我在这里有几个问题。

    1)第10.10节诊断步骤1说明:在 STCGCR0寄存器中将间隔计数配置为1。

    这是否仍然有效(根据 TRM)或需要根据勘误表将间隔计数设置为2。 诊断代码与段0的间隔计数1一起工作。
    请确认。

    2)我的主要问题是 STC1、段1、即使在 STCSEGPLR 寄存器(0x1)和中配置了 SEGID_LOPAD 位、FSEGID 也不会设置为01
    根据 TRM 第10.10节、STCGCR0寄存器中的 RS_CNT 位更改为1 (STCGCR0 = 0x01)。 已尝试使用间隔计数1和2、但无法正常工作。

    我观察到、当设置 STCGCR0 = 0x02以启用 RS_CNT 时、FSEGID 设置为0x01、这是每个诊断所期望的。

    您能否确认在本例中、段1需要为 RS_CNT 启用哪些正确位。
    我有这个疑问、因为第3步中的 TRM 显示"Programming bit 0 of the STCGCR0 register to 1"。
    第4步将 STCGCR0寄存器中的 RS_CNT 位设为1。 为什么在为 RS_CNT 设置相同位时这两句话之间存在差异。

    如果它应该是 STCGCR0 = 0x01来启用 RS_CNT 位。 我还可以尝试使段1诊断正常工作

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

    您好 Dhana、  

    这是我对 STC1段1的测试结果:

    我的测试代码:

    /*执行 STC 模块自检*/
    void STC1_SelfCheck ()

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

    /*对 CPU 自检控制器运行诊断检查*/
    /*首先将 STC 时钟分频器设置为仅支持高达90MHz 的 STC */
    systemREG2->STCCLKDIV=(0x00u)<< 24;

    /* STC 时钟现在是正常模式 CPU 时钟频率/2 = 300MHz/3 */
    stcREG1->STCCLKDIV = 0x05050000U;//CLKDIV0和 CLKDIV1 = 5+1

    /*选择一个测试间隔,下次重新启动自检,0x00010001 */
    stcREG1->STCGCR0 = 0x00010001U;

    /*启用比较器自检并在 CPU 中插入卡在0故障、0x1A */
    stcREG1->STCSCSCR = 0x1AU;

    /*最大超时周期*/
    stcREG1->STCTPR = 0xFFFFFFU;

    stcREG1->STCSEGPLR = 0x1;//对于段1

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

    /*启用自检*/
    stcREG1->STCGCR1 = 0x50AU;//5:仅选择 Core1进行自检。

    /*用户代码开始(9)*/
    /*用户代码结束*/
    asm (" WFI");
    asm (" NOP");
    asm (" NOP");
    asm (" NOP");
    asm (" NOP");
    asm (" NOP");
    asm (" NOP");
    asm (" NOP");
    asm (" NOP");
    asm (" DMB");
    asm (" DMB");

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

    您好、Wang、

    非常感谢您的测试和提供代码。

    此示例代码针对带故障插入的段1进行配置、预期会在 STCFSTAT 寄存器中将 FSEG_ID 设置为1。
    但在此代码中、结果仅将 FSEG_ID 显示为0。 我认为 STCFSTAT 应该显示0x9。 请确认。

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

    您好、Wang、

    非常感谢您的测试和提供代码。

    此示例代码针对带故障插入的段1进行配置、预期会在 STCFSTAT 寄存器中将 FSEG_ID 设置为1。
    但在此代码中、结果仅将 FSEG_ID 显示为0。 我认为 STCFSTAT 应该显示0x9。 请确认。

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

    我将进行检查  

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

    您好 Dhana、

    我重新进行了测试、并注意到 FSEG_ID 为0、即使故障是由段1自检引起的。 我怀疑这是一个文献错误。

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

    您好、Wang、

    感谢你的帮助。 是 TRM 中与 RS_CNT 位(0x2而不是0x1)或其他任何内容相关的文献错误。 请确认。

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

    您好 Dhana、

    您完全正确。 向 RS_CNT 写入1x (10b 或11b)是为了从 STCSEGPLR 寄存器预加载间隔。

    我将提交一个文献错误 TT 以解决 TRM 中的问题。 感谢您指出这一点。

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

    这是我的测试:FSEG_ID 为1 (段1失败)