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.

[参考译文] TDA4VE-Q1:有关 VTM ESM 生成标准的问题

Guru**** 2455560 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1480378/tda4ve-q1-question-about-criteria-for-vtm-esm-generation

器件型号:TDA4VE-Q1

工具与软件:

尊敬的 TI 专家:

我已经实施了安全机制 VTM T1 :  包括错误测试在内的基本功能的软件测试。

为了测试和确认是否正确执行了任何负面测试、我使用降低的(低于当前温度)温度阈值实现了逻辑并进行了测试、但未生成 ESM 回调。

下面是我的测试代码过程:

1)设置正确的 ESM 位值、并在 VTM 逻辑之前运行 ESM 初始化。
  
(与其他配置位混合、但我认为它是真正的值)

2) 2)运行 SDL_VTM_initVd、SDL_VTM_initTS

3) 3)运行 SDL_VTM_getTemp 并检查当前温度(大约33~35'C)


4) 4)运行以下测试用例:

SDL_VTM_tsSetMaxTOutRgAlertThr (p_cfg2、SDL_VTM_INSTANCE_TS_01501500020000);

vtmTriggerTh (-15000、-18000、-23000)

我认为这些测试用例的温度阈值非常低、因此需要生成任何 ESM 回调、但事实并非如此。

您能否告诉我执行了错误的步骤?

谢谢!
Taehong Kim

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

    嗨、

    您能否共享"SDL_VTM_initVd、SDL_VTM_initT"的配置、以及是否启用阈值中断、

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

    尊敬的 Manojna:

    我重复使用了所提供的 Vtm_example.c SDK 中的相同配置。

        uint32_t                        tempVal = 0U;
        SDL_VTM_configVd                vdConfig = {0};
        SDL_VTM_tsGlobal_cfg            tsGlobal_cfg = {0};
        SDL_VTM_InstVd                  vdIns = 0;
    
        SDL_VTM_configTs                tsConfig = {0};
        SDL_VTM_Ctrlcfg                 ctrlCfg = {0};
        SDL_VTM_InstTs                  tsIns = 0;
        SDL_VTM_tsThrVal                thrVal = {0};
        SDL_VTM_Stat_read_ctrl          pCtrl = {0};
    
        SDL_VTM_Stat_val                statVal = {0};
    
        const SDL_VTM_cfg1Regs          *p_cfg1 = {0};
        const SDL_VTM_cfg2Regs          *p_cfg2 = {0};
    
        p_cfg1 = (SDL_VTM_cfg1Regs *) SDL_VTM_CFG1_BASE;
        p_cfg2 = (SDL_VTM_cfg2Regs *) SDL_VTM_CFG2_BASE;
    
        vdConfig.configVdCtrl = (SDL_VTM_VD_CONFIG_CTRL_EVT_SEL | SDL_VTM_VD_CONFIG_CTRL_GLB_CFG);
        tsConfig.configTsCtrl = (SDL_VTM_VD_CONFIG_CTRL_SET_CTL | SDL_VTM_VD_CONFIG_CTRL_OUTRNG_ALRT | SDL_VTM_VD_CONFIG_CTRL_SET_THR);                                
        tsGlobal_cfg.validMap = (SDL_VTM_TSGLOBAL_CLK_SEL_VALID |
                                SDL_VTM_TSGLOBAL_CLK_DIV_VALID |
                                SDL_VTM_TSGLOBAL_ANY_MAXT_OUTRG_ALERT_EN_VALID |
                                SDL_VTM_TSGLOBAL_MAXT_OUTRG_ALERT_THR0_VALID   |
                                SDL_VTM_TSGLOBAL_MAXT_OUTRG_ALERT_THR_VALID    |
                                SDL_VTM_TSGLOBAL_SAMPLES_PER_CNT_VALID);
        vdConfig.vd_temp_evts   = SDL_VTM_VD_EVT_SELECT_TEMP_SENSOR_0;                                
        tsGlobal_cfg.clkSel     = SDL_VTM_TSGLOBAL_CLK_CTRL_CLK_SEL_FIX_REF_CLK;
        tsGlobal_cfg.clkDiv = SDL_VTM_TSGLOBAL_CLK_CTRL_CLK_DIV_BY_1;
        tsGlobal_cfg.any_maxt_outrg_alert_en = SDL_VTM_TSGLOBAL_ANY_MAXT_OUTRG_ALERT_ENABLE;
        tsGlobal_cfg.maxt_outrg_alert_thr0   = (SDL_VTM_adc_code)186; 
        tsGlobal_cfg.maxt_outrg_alert_thr    = (SDL_VTM_adc_code)716; 
        tsGlobal_cfg.samplesPerCnt           = 1;
        vdConfig.tsGlobal_cfg                = tsGlobal_cfg;
    
        ctrlCfg.valid_map    =  (SDL_VTM_TS_CTRL_MAXT_OUTG_ALERT_VALID | SDL_VTM_TS_CTRL_RESET_CTRL_VALID | \
                                SDL_VTM_TS_CTRL_SOC_VALID | SDL_VTM_TS_CTRL_MODE_VALID);
        ctrlCfg.maxt_outrg_alert_en     =    SDL_VTM_TS_CTRL_MAXT_OUTRG_GEN_ALERT;
        ctrlCfg.tsReset                 =    SDL_VTM_TS_CTRL_SENSOR_NORM_OP;
        ctrlCfg.adc_stat                =    SDL_VTM_TS_CTRL_SINGLESHOT_ADC_CONV_IN_PROGRESS;
        ctrlCfg.mode                    =    SDL_VTM_TS_CTRL_SINGLESHOT_MODE;
        tsConfig.tsCtrl_cfg.valid_map   =    SDL_VTM_TS_CTRL_MODE_VALID;
        tsConfig.tsCtrl_cfg.mode        =    SDL_VTM_TS_CTRL_CONTINUOUS_MODE;                             
        tsConfig.tsCtrl_cfg             =    ctrlCfg;
    
        thrVal.thrValidMap = (SDL_VTM_GT_TH1_VALID | SDL_VTM_GT_TH2_VALID | SDL_VTM_LT_TH0_VALID);
        thrVal.ltTh0En = TRUE;
        thrVal.gtTh1En = TRUE;
        thrVal.gtTh2En = TRUE;
        thrVal.ltTh0 = 300;
        thrVal.gtTh2 = 500;
        thrVal.gtTh1 = 400;
    
        pCtrl = (SDL_VTM_TS_READ_VD_MAP_VAL | SDL_VTM_TS_READ_ALL_THRESHOLD_ALERTS | SDL_VTM_TS_READ_FIRST_TIME_EOC_BIT | \
                SDL_VTM_TS_READ_DATA_VALID_BIT | SDL_VTM_TS_READ_DATA_OUT_VAL);
        tsConfig.thr_val    =    thrVal;

    谢谢!
    Taehong Kim

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

    嗨、 Taehong,

    可以参阅 2.5。 VTM:电压和热管理—软件诊断库(SDL)- J721S2用户指南

    有关您已共享的配置的详细信息、  

    ctrlCfg.valid_map =(SDL_VTM_TS_CTRL_MAXT_OUTG_ALERT_VALID | SDL_VTM_TS_CTRL_RESET_CTRL_VALID |\
    SDL_VTM_TS_CTRL_SOC_VALID | SDL_VTM_TS_CTRL_MODE_VALID);
    ctrlCfg.maxt_outg_alert_en = SDL_VTM_TS_CTRL_MAXT_OUTRG_GEN_ALERT;
    ctrlCfg.tsReset = SDL_VTM_TS_CTRL_SENSOR_NORM_OP;
    ctrlCfg.adc_stat = SDL_VTM_TS_CTRL_SINGLESHOT_ADC_CONV_IN_PROGRESS;
    ctrlCfg.mode = SDL_VTM_TS_CTRL_SINGLESHOT_MODE;
    tsConfig.tstrl_cfg.valid_map = SDL_VTM_TS_CTRL_MODE_VALID;
    tsConfig.tsCtrl_cfg.mode = SDL_VTM_TS_CTRL_CONTINUOUS_MODE;
    tsConfig.tsCtrl_cfg = ctrlCfg;

    您已对其进行了两次初始化、它将被覆盖、但我建议您坚持使用其中一个、

    除此之外、请更改下面的 tsConfig.configTsCtr

    " tsConfig.configTsCtrl =(SDL_VTM_VD_CONFIG_CTRL_SET_CTL | SDL_VTM_VD_CONFIG_CTRL_OUTRNG_ALRT | SDL_VTM_VD_CONFIG_CTRL_SET_THR);"  

    NEW、 tsConfig.configTsCtr =  (SDL_VTM_VD_CONFIG_CTRL_SET_THR);

    您可以查看用户指南的共享链接,了解更多信息。

    此致、

    Manojna

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

    尊敬的 Manoja:

    谢谢您提供指南、我还有一个问题。

    我已经研究了中包含的测试代码  3.2. VTM 安全示例—软件诊断库(SDL)-《J721S2用户指南》、  
    它会运行 BootApp_vtmFxn (包含在 SDK v10.1中)中编码的两个测试用例、但您可以在本代码中看到、我想它运行的代码正好是两次。

        int32_t       retVal = 0;
        UART_printf("\nStarting Use Case %d \n", useCaseId);
        switch(useCaseId)
        {
            case 0:
                /* UC-1: Low Priority interrupt on WKUP ESM -
                 * VTM less than THR1 */
                currEsmInstance = SDL_ESM_INST_WKUP_ESM0;
                retVal = BootApp_vtmConfig();
                if (retVal == 0) {
                    UART_printf("case 0 success\n");
                    vtmEventInputTrig[useCaseId] = USE_CASE_STATUS_COMPLETED_SUCCESS;
                } else{
                    UART_printf("case 0 failure\n");
                    vtmEventInputTrig[useCaseId] = USE_CASE_STATUS_COMPLETED_FAILURE;
                }
                break;
    
            case 1:
                /* UC-2: High Priority interrupt on WKUP ESM -
                 * VTM greater than THR2 with clearing
                 * of MCU_SAFETY_ERRORn pin */
    
                /* Start the Pin Control and Measurement Timer */
                currEsmInstance = SDL_ESM_INST_WKUP_ESM0;
                retVal = BootApp_vtmConfig();
                if (retVal == 0) {
                    vtmEventInputTrig[useCaseId] = USE_CASE_STATUS_COMPLETED_SUCCESS;
                } else {
                    vtmEventInputTrig[useCaseId] = USE_CASE_STATUS_COMPLETED_FAILURE;
                }
                break;
    
            default:
                UART_printf("ERR: Invalid Test Case ID %d \n", useCaseId);
                retVal = -1;
                break;
        }


    这两种情况下运行 BootApp_vtmConfig()而没有任何输入。 指南说明它有两个不同的输入事件、但它在哪里触发呢?
    如果我错了或这个测试代码有任何缺陷、请告知我。

    谢谢!
    Taehong

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

    嗨、

    在查看示例问题的用例时、

    3.2. VTM 安全示例—软件诊断库(SDL)- J721S2用户指南

    用例的说明如下:

    这里、两个用例首先都会触发预警、然后它们的实现会发生变化、您可以查看  

    BootApp_esmApplicationCallbackFunction (在早期警告中命中)、从此处调用  
    BootApp_deactivateTrigger()函数用于根据不同的用例更改阈值。
    此致、
    Manojna