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:HALCoGen 安全库示例在 SL 版本2.3.1下失败、在2.2.0上成功

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/618704/tms570lc4357-halcogen-safety-lib-example-fails-with-sl-version-2-3-1-succeeds-with-2-2-0

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

当我为安全库(example_SafetyLib.c)运行 HALCoGen (v 4.06.01)示例时、
它在使用安全库版本2.2.0时表现良好。

如果我使用相同的代码运行同一个示例、再次运行安全库版本2.3.1、它会在第一个 DCAN 检查中挂起。
由于测试失败,它会被锁定在此 while ()中:

if (sl_SelfTest_CAN (CAN_ECC_TEST_MODE_1BIT、SL_DCAN1)= false)
{
while (1);
}

失败的位置为:

/*验证 DCAN 是否已初始化*/
/*SAFETYMCUSW 439 S MR:11.3 注释_4*/
if ((布尔值) sl_canREG)
{
/*SAFETYMCUSW 134 S MR:12.2 备注_5*/
if (((uint32) CAN_init_bit =(sl_canREG->CTL 和 CAN_init_bit)){
SL_Log_Error (FUNC_ID_ST_CAN、ERR_TYPEE_INTURE_CON、3U);
RetVal = false;
返回 RetVal;
}
}

它很高兴地在2.2.0中成功调用、在2.3.1中失败

CCS 7.1

TMS570LC43 LaunchPad。

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

    我要附加项目。

    您可以通过编辑 Properties -> Resource -> Linked Resources 中的变量 sl_install_path 来在 SL 版本之间切换并执行重建。

    e2e.ti.com/.../6087.TMS570LC43_5F00_example_5F00_SafetyLib.zip

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

    1.在 HALCoGen 中启用 CAN1驱动程序、以便 HALCoGen 可以生成 CAN.c
    2.确保在执行 CAN1自检之前调用 canInit()
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    本报告更是向 TI 发送的一条消息,即 HALCoGen 4.06.01附带的 HALCoGen 示例 不适用于安全 LIB v2.3.1,
    而它可以与2.2.0配合使用

    这两个版本的编译都正常、但在 SL 运行时测试 sl_SelfTest_CAN ()失败

    > 1. 在 HALCoGen 中启用 CAN1驱动程序、以便 HALCoGen 可以生成 CAN.c

    我使用的是 HALCoGen e 4.06.01中的示例:Example_SafetyLib.c
    在此示例中启用了所有 CAN。

    >2. 确保在执行 CAN1自检之前调用 canInit()

    那么、这不应该是 HALCoGen 指令或该示例的源代码的一部分吗?

    我已将该项目附在我之前的答复中。 可通过 Hercules TMS570LC43 LaunchPad 复制

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

    感谢您的澄清。 我将进行快速测试、并尽快告知您我的结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jan、

    正如我说过的、CAN 模块未初始化。 CTL 寄存器中的 Init 位(位0)为"1"。  

    在我清除该位后、错误将消失。

     

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

    你是对的。 当我像这样改变控制寄存器时、测试成功。

    canREG1->CTL &=~(uint32)(0x00000041U);
    if (sl_SelfTest_CAN (CAN_ECC_TEST_MODE_1BIT、SL_DCAN1)= false)
    {
    while (1);
    }
    if (sl_SelfTest_CAN (CAN_ECC_TEST_MODE_2BIT、SL_DCAN1)= false)
    {
    while (1);
    }
    canREG2->CTL &=~(uint32)(0x00000041U);
    if (sl_SelfTest_CAN (CAN_ECC_TEST_MODE_1BIT、SL_DCAN2)= false)
    {
    while (1);
    }
    if (sl_SelfTest_CAN (CAN_ECC_TEST_MODE_2BIT、SL_DCAN2)= false)
    {
    while (1);
    }
    canREG3->CTL &=~(uint32)(0x00000041U);
    if (sl_SelfTest_CAN (CAN_ECC_TEST_MODE_1BIT、SL_DCAN3)= false)
    {
    while (1);
    }
    if (sl_SelfTest_CAN (CAN_ECC_TEST_MODE_2BIT、SL_DCAN3)= false)
    {
    while (1);
    }
    canREF4->CTL &=~(uint32)(0x00000041U);
    if (sl_SelfTest_CAN (CAN_ECC_TEST_MODE_1BIT、SL_DCAN4)= false)
    {
    while (1);
    }
    if (sl_SelfTest_CAN (CAN_ECC_TEST_MODE_2BIT、SL_DCAN4)= false)
    {
    while (1);
    }
    

    在下一个 HALCoGen 版本中可能需要纠正什么?

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

    干得好、1月 感谢您的宝贵建议。