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:TMS570LC43x SAFETI 诊断

Guru**** 2434370 points
Other Parts Discussed in Thread: TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1246470/tms570lc4357-tms570lc43x-safeti-diagnostic

器件型号:TMS570LC4357

大家好!  

我正在使用具有 SafeTI 诊断库的 TMS570LC43 MCU、并 与 RTOS 集成。

在 fterSTC()函数中  

代码到达  sl_SelfTest_VIM (VIM_software_test); 在该函数内部运行并失败。

此处"tmp = sl_SelfTest_CCMR5F (CCMR5F_CPUCOMP_ERROR_FORCE_TEST、true、&failInfoCCMR5F)"内部

* ccmr5fKeyReg = CCMR5F_CCMKEYR_MODE_ERRFORCING;            <-"CCMkeyR1"寄存器0xFFFFF604内的值为0

while (CCMR5F_CCMKEYR_MODE_lockstep!=(* ccmr5fKeyReg 和 CCMR5F_CCMKEYR_MODE)){

 卡在这里、系统将进行软件复位。

您能告诉我们的原因是什么,我们已经做了 viminit();

两个 SL_SelfTest_VIM (VIM_software_test);和 SL_SelfTest_DMA (DMA_software_test);  失败

谢谢  

V·潘卡

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

    尊敬的 Pankaj:

    我们已开始处理您的问题、并将很快提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    是否有更新和解决方案?

    谢谢  

    V·潘卡

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

    尊敬的 Pankaj:

    首先、我希望您使用的是"FreeRTOS "而不是"TI RTOS "、因为 Hercules 器件不支持"TI RTOS "。

    同样、我们从未使用"FreeRTOS"测试过 SafeTI 诊断库。

    只需确保错误与以下错误无关:

    (+) TMS570LC4357:SafeTI 诊断库中的标志阵列声明问题-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    如果问题仍然存在、请附加完整项目、以便我在结束时对该项目进行一次调试。 您甚至可以执行私人消息、这样任何人都无法看到代码。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    我使用的是基于许可证的安全 RTOS。

    因此、对我来说、无法共享我的项目。

    同时、 我将创建另一个基于免费 RTOS 的项目并集成 safeTI 诊断库、并且我将与您分享。  

    我调试出缓冲区 sl_priv_FLAG_set[57]、位编号57和11为1。  

    此问题与共享线程无关。

    我剪切一些图像以供您参考、  

    我看到以下代码卡在 while 状态。

    while (CCMR5F_CCMKEYR_MODE_lockstep!=(* ccmr5fKeyReg 和 CCMR5F_CCMKEYR_MODE)){

     卡在这里、系统将进行软件复位。

        case CCMR5F_CPUCOMP_ERROR_FORCING_TEST:
        case CCMR5F_CPUCOMP_ERROR_FORCING_TEST_FAULT_INJECT:
        case CCMR5F_VIMCOMP_ERROR_FORCING_TEST:
        case CCMR5F_VIMCOMP_ERROR_FORCING_TEST_FAULT_INJECT:
        case CCMR5F_PDCOMP_ERROR_FORCING_TEST:
        case CCMR5F_PDCOMP_ERROR_FORCING_TEST_FAULT_INJECT:
        case CCMR5F_INMCOMP_ERROR_FORCING_TEST:
        case CCMR5F_INMCOMP_ERROR_FORCING_TEST_FAULT_INJECT:
            retVal = TRUE;
            regBkupIntEnaSet = esmREG->IESR1;
            regBckupErrInfulence = esmREG->EEPAPR1;
            SL_FLAG_SET(testType);
            if(_sl_fault_injection == FALSE) {
                 /*flag is set to indicate the current test which is ongoing and
                   These flags are used in the sl_esm.c so as to mask the esm callback*/
                 esmREG->IECR1 = GET_ESM_BIT_NUM(ESM_G1ERR_CCMR5_SELFTEST);
                 esmREG->DEPAPR1 = GET_ESM_BIT_NUM(ESM_G1ERR_CCMR5_SELFTEST);
             }
            *ccmr5fKeyReg = CCMR5F_CCMKEYR_MODE_ERRFORCING;
            while (CCMR5F_CCMKEYR_MODE_LOCKSTEP != (*ccmr5fKeyReg & CCMR5F_CCMKEYR_MODE)) {
            }

    我们能否安排团队通话、以便我们详细讨论。

    谢谢

    V·潘卡

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

    尊敬的 Pankaj:

    当调试器被连接时、CCMR5F 被禁用、所以当调试器被连接时不要运行。

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

    您好、Wang、

    确定"在调试器被连接时、CCMR5F 被禁用、所以当调试器被连接时不运行。"

    我关注的是:  

    我始终只在调试模式下运行 safeTI 演示代码。 并且 TI 演示代码可以正常运行。    (<---无 RTOS)

    所有初始化和自检用例均可正常执行。   "仅限调试模式"

    只有1-2个测试用例出现故障、否则所有测试用例都能正常运行。   "仅调试模式"

    在我的代码中、我只遇到了 CCMR5F 问题。      (<---与 RTOS 一起)。

    SL_SelfTest_VIM (VIM_SOFTWARE_TEST);  失败

    我将尝试不使用调试器、并让您知道、但我认为这不是解决方案。

    谢谢

    V·潘卡  

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

    SL_SelfTest_CCMR5F (..) 由  sl_SelfTest_VIM (..)调用 用于 VIM 软件测试。

    从 TMS570LC4357 TRM (第507页):

    13.2.5在 CPU 调试模式期间运行  
    某些调试操作将 CPU 置于暂停调试状态、在此状态下、代码执行暂停。
    由于停止调试事件是异步的、调试请求有可能导致
    锁步丢失。 CCM-R5F 将在检测到暂停调试请求时禁用所有功能诊断。
    不会生成内核比较错误并且标志不会更新。 需要进行 CPU 复位以确保
    CPU 再次处于锁步状态、也会重新启用 CCM-R5F、

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

    您好、Wang、

    我不知道是否有调试模式的问题。

    使用此功能可以正常工作。   

    但在我的调试模式   SL_SelfTest_VIM (VIM_software_test)内的代码(带安全库的 SafeRTOS  )中;以及 SL_SelfTest_DMA (DMA_software_test);未能执行。  

    目前我有注释  sl_SelfTest_VIM (VIM_software_test); 和 sl_SelfTest_DMA (DMA_software_test); 行。

    检查代码的其余部分、

    我已经看到了 in xTaskStartScheduler( pdTRUE );  

    /*开始第一个任务。 */
    portSTART_FIRST_TASK();     <--不在这里

    并进入  

    复位入口
    b _c_int00
    B vUndefAbort
    B vSafeRTOSSVCHandler         <---先
    B vPrefetchAbort
    b vDataAbort                    <--比这里。
    反向中断
    LDR PC、[PC,#-0x1b0]
    LDR PC、[PC,#-0x1b0]

    我不明白为什么 portSTART_FIRST_TASK();  在这里失败。

    您能支持吗?

    谢谢

    Pankaj Verma.

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

    尊敬的 Pankaj:

    此处的调试模式不是 CCS"Debug"模式。 它表示调试器插入 JTAG 接头时的模式。

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

    您好、Wang、

    是的、您回答正确。

    但 当我将调试器连接到 EVK 板 JTAG 接头并运行目标板时、 运行正常、所有自检用例都能正常执行。  

    RESET_RELEASE 变量值为 RESET_TYPE_DEBUG。

    这里它通过了所有测试用例。

    在我的场景中  

    不管用。 我遵循的流程相同。

    您能看到我与 Jagadish 分享的代码吗? (特别是链接器文件、HL_sys_intvecs.asm 和启动文件)

    谢谢  

    V·潘卡

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

    Pankaj,

    感谢您与我们分享该代码。 除了自检失败之外、共享代码是否是 CCS 工作工程? 我会找到共享的项目,并在我从我的旅行回来后在我的工作台上尝试它。   

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

    您好、Wang、

    是的、除了自检故障、共享项目在 CCS 环境中工作。

    内部 hl_sys_startup.c

    我已经创建了一些宏、供您参考、

    /*用户代码结束*/
    #define SL_STARTUP_Format1 1                <-  这个宏用于 从演示代码中的自检启动代码参考
    #define SL_STARTUP_Format2 0                <- 此宏用于 Helcogen 自检启动代码  "你可以忽略它"
    #define freertos_def.                        <-  此宏用于"如果您想在没有自检代码的情况下运行 FreeRTOS 代码"

    谢谢  

    V·潘卡

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

    尊敬的  Pankaj:

    我搜索了电子邮件、但找不到源代码的链接。 正在与 Jagadish 核实您的源代码。

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

    尊敬的  Pankaj:

    您的代码在 Launchpad 上、但它会重复导致复位。 代码不会跳转至 VIM 自检。  

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

    您好、Wang、

    在我的代码中、如果您使用 safeTI 库、它最初被复位。

    调试复位2/3后、它将显示 DEBUG_RESET。 它将执行 After_STC()函数。

    RTOS 代码在不使用 SAFETI 代码的情况下可以正常工作。

    如果我处于活动 #define FreeRTOS_DEF 状态、     宏 RTOS 代码被激活(使用 safeTI 代码/lib)并且 代码运行正常。

    #define FreeRTOS_DEF        1   

    内部 hl_sys_startup.c

    我已经创建了一些宏、供您参考、

    /*用户代码结束*/
    #define SL_STARTUP_Format1 0                <-  这个宏用于 从演示代码中的自检启动代码参考


    #define SL_STARTUP_Format2 0                <- 此宏用于 Helcogen 自检启动代码  "你可以忽略它"


    #define FreeRTOS_DEF        1                <-  此宏用于"如果您想在没有自检代码的情况下运行 FreeRTOS 代码"

    如果我们使用 safeTI 库代码、那么我们面临重置和初始化问题以及 RTOS 调度问题。

    请激活上述宏并查看结果。

    仍然面临着任何问题、请告诉我。

    我们将在团队中讨论、并在我身边向您展示。

    谢谢  

    V·潘卡

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

    在我的代码中、如果您使用 safeTI 库、它最初被复位。

    调试复位2/3后、它将显示 DEBUG_RESET。 它将执行 After_STC()函数。

    [/报价]

    我知道这一点。 这是意料之中的。  无论通过与否、CPU 自检和 STC 自检都在测试完成后发出 CPU 复位命令。

    我在  After_STC() 函数的随机位置进行了重置。

    若要运行 SDL 函数、MCU 必须处于特权模式。  

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

    您好、Wang、

    s 代码与(FreeRTOS + safeTI lib)在您结束时有效?

    如果是、请告诉我问题是什么?

    除用户模式之外的任何处理器模式都是特权模式。 我已检查我们的代码是否仅在主管模式"特权模式"下运行。

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

    不是的。 在创建任务和任务调度之前、它会被重置。  

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

    您好、Wang、

     在我身边、当我在没有 SDL 的情况下运行代码时、代码运行正常、所有任务和 schedular 均可正常启动。

    但是、如果我将 SDL 与 RTOS 配合使用、我还会在 VIM 自检和 schedular 启动时遇到重置问题。

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

    如果代码不执行 VIM 自检、带有 RTOS 的代码是否可以工作?  

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

    否、没有 VIM Selftest、则 RTOS 也不工作。

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

    我没有可正常使用的 FreeRTOS + SDL 示例。 我不确定问题是不是由 FreeRTOS 中的 MPU 设置引起的。

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

    我开发了一个在 FreeRTOS 中使用 SDL 的示例。 在我的示例中有两个任务。 一项任务在用户模式下切换一个 GPIO 引脚、另一项任务在特权模式(系统模式)下执行 CAN RAM ECC /奇偶校验自检。

    闪存相关的自检必须从 SRAM 执行、因此 API 会复制到 SRAM 的一个部分、并且此 RAM 部分的 MPU 区域无法配置为"从不执行"。  一些自检必须在特权模式下执行。 在任务2中执行自检之前、该模式会切换到系统模式、在完成自检后、该模式会切换回用户模式。

     我的 TMS570LC43x Launchpad 和 HDK 上已经测试了此示例。 我在 TIDRIVE 中与您分享了该示例。

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

    您好、Wang、

    感谢您的支持。

    我们正在进行研究和检查。 我们很快会更新您的信息。

    我有一个问题  

     SafeTILib_TMS570LC43_BE.lib 文件有何用途?

    库文件中包含什么内容、 该文件是否是运行 safeTI 功能所必需的?

    请联系我们。

    谢谢  

    V·潘卡

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

    它是适用于 TMS570LC4357的 SDL 库。 您可以使用库或源代码(sl_selftest.c 和其他 c 或 asm 文件)。 我的示例工程未链接该库。

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

    感谢 Wang、

    我们已尝试您的代码。 代码正在运行,但我认为 checkPLL1Slip()函数干扰了系统节拍,导致任务定时的执行不准确。

    我也签入了我的代码。 我已经看到、在使用 SDL 之前、节拍为1ms。 使用带有 checkPLL1Slip()的 SDL 后,节拍为20ms。

    这是不正确的。 您能再次检查一下吗?

    您能否共享的代码部分  vPortEnablePrivilegedMode( void );

    我在代码中没有找到它所在的位置。

    谢谢  

    V·潘卡

     。

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

    CheckPLL1Slip()通过更改 PLL 乘法因子特意生成 PLL 跳周。 GCM 时钟源被切换至 OSCLK、此时钟比来自 PLL 输出的时钟慢很多。 但 GCM 时钟源在 checkPLL1Slip()函数结束时恢复到正常。

    使用 TI 编译器的 SWI_ALIAS pragma 将 vPortEnablePrivilegedMode ()映射到软件中断向量。  

    软件中断 ISR (vPortSWI)在 os_portosm.asm 中定义:

    请参阅此文章、了解 SWI_ALIAS pragma:

    http://downloads.ti.com/docs/esd/SPNU151/the-swi-alias-pragma-spnu1513554.html