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:TMS570LC43安全库

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1469248/tms570lc4357-tms570lc43-safety-library

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

工具与软件:

我正在尝试将 Halcogen 生成的 SafeTI 启动测试代码与 Halcogen 得出的 UART 示例结合使用。 我将 TI 编译器与 CCS 12.8.1.00005和 TMDX570LC43HDK 开发板配合使用。

启用 不限 在启动安全测试中、任务栏上的调试符号全部显示为灰色、相应程序不会运行。 无法设置断点或查看寄存器。 调试和发布版本都属于这种情况。 但是、如果我禁用某些启动测试并重置电路板(系统重置或上电重置)、则红色 ERROR LED (错误 LED)会短暂亮起、并且释放程序确实会运行。

这是我通过试错得出的测试的工作组合:

#define STC_ENABLE 1

#define PBIST_ROM_ENABLE 1

#define PBIST_L2RAM_ENABLE 1

#define PBIST_PERIPHRAM_ENABLE 0

#define PBIST_VIM_ENABLE 0

#define L2RAMECCHECK_ENABLE 1

#define FLASHECCHECK_ENABLE 1

#define PERIPHRAMECCCHECK_ENABLE 0

#define EFUSETEST_ENABLE 0

#define CCMR5TEST_ENABLE 1

这是预期行为吗? 如果没有、除了按照示例中的指令进行操作以允许调试并启用所有安全测试、我应该做什么?

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

    Paul、你好!

    Unknown 说:
    ]如果我启用 不限 在启动安全测试中、任务栏上的调试符号全部显示为灰色、相应程序不会运行。 无法设置断点或查看寄存器。 调试和发布版本都属于这种情况。 但是、如果我禁用某些启动测试并重置电路板(系统重置或上电重置)、则红色错误 LED 指示灯将短暂亮起、释放程序将确实运行。

    您是否在 HALCoGen 生成的代码外部包含了 SafeTI?

    由于我无法直接从 HALCoGen 查看用于此器件的 SafeTI、您能否进一步说明一下? 如果您可以提供一些有关具体启用情况的屏幕截图、这将有助于进一步解决此问题。

    ——
    谢谢、此致、
    Jagadish。

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

    Paul、你好!

    我对延迟响应表示诚挚的歉意、在这段时间内、我一直在关注其他问题。

    [报价用户 id="637553" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1469248/tms570lc4357-tms570lc43-safety-library "]

    #define STC_ENABLE 1

    #define PBIST_ROM_ENABLE 1

    #define PBIST_L2RAM_ENABLE 1

    #define PBIST_PERIPHRAM_ENABLE 0

    #define PBIST_VIM_ENABLE 0

    #define L2RAMECCHECK_ENABLE 1

    #define FLASHECCHECK_ENABLE 1

    #define PERIPHRAMECCCHECK_ENABLE 0

    #define EFUSETEST_ENABLE 0

    #define CCMR5TEST_ENABLE 1

    [报价]

    我在版本2.4.0的整个 safeTI 诊断库文件夹中搜索了这些宏、但我找不到它们。

    是否可以与您正在讨论的问题共享您的项目或任何示例项目? 您甚至可以通过私人消息发送它。 这将有助于我轻松地从我的末端调试此问题

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

    我使用的是 HALCoGen 4.07.01。 该帮助文件提供了有关如何将 example_SafetyLib.c (来自 HALCoGen 示例)添加到另一个 HALCoGen 工程的说明。 我最初使用 example_rtiBlinky 尝试、但由于该操作只会在硬复位后运行、因此我尝试 example_sci_uart_9600、以便修改它来输出状态寄存器。 宏位于 example_SafetyLib.c 中、用于确定使用 SafeTI 库的测试实际运行。

    我对这两个文件做了最少的修改

    Example_SafetyLib.c……

    #define STC_ENABLE 1 //产生错误、但会运行
    #define PBIST_ROM_ENABLE 1
    #define PBIST_L2RAM_ENABLE 1
    #define PBIST_PERIPHRAM_ENABLE 0
    #define PBIST_VIM_ENABLE 0
    #define L2RAMECCHECK_ENABLE 1
    #define FLASHECCHECK_ENABLE 0 //防止使用变量输出运行
    #define PERIPHRAMECCCHECK_ENABLE 0
    #define EFUSETEST_ENABLE 0
    #define CCMR5TEST_ENABLE 1

    ... and example_rtiblinky.c in main ()...

    while (1)/*连续显示*/

    cnt1 =(int) sl_esmREG->SR1[0];
    cnt2 =(int) sl_esmREG->SR1[1];
    cnt3 =(int) sl_esmREG->SR1[2];
    sprintf (buf、"sr1:%x %x\r\n"、cnt1、cnt2、cnt3);
    sciDisplayText (uart、(uint8*) buf、strlen (buf));

    cnt1 =(int) sl_esmREG->SR4[0];
    cnt2 =(int) sl_esmREG->SR4[1];
    cnt3 =(int) sl_esmREG->SR4[2];
    sprintf (buf、"sr4:%x %x\r\n"、cnt1、cnt2、cnt3);
    sciDisplayText (uart、(uint8*) buf、strlen (buf));

    cnt1 =(int) sl_esmREG->SR7[0];
    cnt2 =(int) sl_esmREG->SR7[1];
    cnt3 =(int) sl_esmREG->SR7[2];
    sprintf (buf、"SR7:%x %x\r\n"、cnt1、cnt2、cnt3);
    sciDisplayText (uart、(uint8*) buf、strlen (buf));

    cnt1 =(int) sl_esmREG->EPSR;
    sprintf (buf、"eps:%x\r\n"、cnt1);
    sciDisplayText (uart、(uint8*) buf、strlen (buf));

    //sciDisplayText (UART、&text1[0]、TSIZE1);/*发送文本代码1 */

    等待(200);
    };

    ...在 hl_system.h 中、我添加到 resetSource_t

    CPU1_RESET = 0x0040U、/**< CPU 1复位的别名*/

    如果我将所有宏设定为零、安全库测试全部被禁用、并且代码将在调试下愉快地运行。 如果我启用其中的任何一个、便会显示错误、并且无法查看寄存器。 如果我使用上面显示的组合、代码将从硬复位运行、但从 UART 输出运行、SR2为0x8、SR4为0x100000。 所有其他状态寄存器均为零。

    由于我似乎没有获得任何相关信息、因此我决定尝试 SafeTI 诊断库2.3.1中的示例 TMS570LC4357_Noos。

    实际上有两个文件与 main()、所以我选择使用 hl_sys_main.c 为了解析一些未定义的符号、我对 hl_sys_intvecs.asm 进行了以下修改...

    ;导入中断例程的引用

    .ref _c_int00
    .ref _excpt_vec_udef_instr
    .ref _except_vec_svc
    .ref _except_vec_abort_pref
    .ref _except_vec_abort_data
    .ref phantomInterrupt
    .def resetEntry

    ....和作为 sl_vists Init_Stack ()被使用,而不是_core 启动代码。 我向 hl_sys_startup.c 添加了以下内容...

    UINT32 StackModeSVC = SRAM_START;
    UINT32 StackModeFIQ = SRAM_START + STACK_SIZE_MODE_SVC;
    UINT32 StackModeIRQ = SRAM_START + STACK_SIZE_MODE_SVC + STACK_SIZE_MODE_FIQ;
    UINT32 StackModeABT = SRAM_START + STACK_SIZE_MODE_SVC + STACK_SIZE_MODE_FIQ + STACK_SIZE_MODE_IRQ;
    UINT32 StackModeUND = SRAM_START + STACK_SIZE_MODE_SVC + STACK_SIZE_MODE_FIQ + STACK_SIZE_MODE_IRQ + STACK_SIZE_MODE_ABT;
    UINT32 StackModeSYS = SRAM_START + STACK_SIZE_MODE_SVC + STACK_SIZE_MODE_FIQ + STACK_SIZE_MODE_IRQ + STACK_SIZE_MODE_ABT + STACK_SIZE_MODE_UND;

    ...并修改了链接器命令文件中的 RAM 设置以允许相当大的堆栈设置。 我从另一个 HALCoGen 示例中对链接器文件进行了其他修改、定义符号(_TMS570LC43x__VFP_SUPPORTE_=1、但不是 EXTERNAL_SP_INIT、因为 sl_HALCoInters Init_Stack ()会执行此操作)。

    代码会编译、但再次不会通过调试运行、因此我不能看到计数器是否在递增。

    不用说,我很沮丧。 我们将需要在医疗应用中使用安全库、我希望演示示例可以"开箱即用"。 我需要解决这个问题、才能取得任何进一步的进展。

    谢谢!

    Paul