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.

[参考译文] TMS570LS1224:生成损坏的 RAM 区域

Guru**** 2383020 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/624975/tms570ls1224-generate-a-corrupt-ram-region

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

您好!

我想创建内存损坏以进行测试。 您能否建议如何造成内存损坏?  

/CLN

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

    如果要检查 RAM ECC 的正确操作、并且使用 HALCoGen 创建启动代码、只需选中"Enable ESRAM ECC Check"框即可。

    这会导致在 RAM 初始化后的启动中调用函数 checkRAMECC()。

    /**@fn void checkRAMECC (void)
    *@简要检查 TCRAM ECC 错误检测逻辑。
    *
    *此函数检查 TCRAM ECC 错误检测逻辑。
    //
    //* sourceId:selftest_sourceId_034 *//
    //* DesignId:selftest_DesignId_019 *//
    ////*要求:hL_SR408 */
    void checkRAMECC (void)
    {
    volatile uint64 ramread = 0U;
    volatile UINT32 regread = 0U;
    uint32 tcram1ErrStat、tcram2ErrStat = 0U;
    
    uint64 tcrama1_bk = tcramA1bit;
    uint64 tcramB1_bk = tcramB1bit;
    uint64 tcrama2_bk = tcramA2bit;
    uint64 tcramb2_bk = tcramB2bit;
    
    /*在设置 RAMTHRESHOLD 寄存器之前清除 RAMOCUUR */
    tcram1REG->RAMOCCUR = 0U;
    tcram2REG->RAMOCCUR = 0U;
    
    /*将单位错误阈值计数设置为1 */
    tcram1REG->RAMTHRESHOLD = 1U;
    tcram2REG->RAMTHRESHOLD = 1U;
    
    /*启用单个位错误生成*/
    tcram1REG->RAMINTCTRL = 1U;
    tcram2REG->RAMINTCTRL = 1U;
    
    /*启用对 ECC RAM 的写入、启用 ECC 错误响应*/
    tcram1REG->RAMCTRL = 0x0005010AU;
    tcram2REG->RAMCTRL = 0x0005010AU;
    
    /*在两个组中强制出现单个位错误*/
    _coreDisableRamEcc_();
    tcramA1bitError ^= 1U;
    tcramB1bitError ^= 1U;
    _coreEnableRamEcc_();
    
    /*读取损坏的数据以生成单个位错误*/
    ramread = tcramA1bit;
    ramread = tcramb1bit;
    
    //检查错误状态*/
    tcram1ErrStat = tcram1REG->RAMERRSTATUS & 0x1U;
    tcram2ErrStat = tcram2REG->RAMERRSTATUS & 0x1U;
    /*SAFETYMCUSW 139 S MR:13.7 "LDRA 工具问题"*/
    /* SAFETYMCUSW 139 S MR:13.7 "LDRA 工具问题"*/
    if ((tcram1ErrStat =0U)||(tcram2ErrStat ==0U))
    {
    /* TCRAM 模块不反映 CPU 报告的1位错误*/
    自测故障通知(CHECKRAMECC_FAIL1);
    }
    其他
    {
    if ((esmREG->SR1[0U]& 0x14000000U)!= 0x14000000U)
    {
    /* ESM 中未标记 TCRAM 1位错误*/
    自测故障通知(CHECKRAMECC_FAIL2);
    }
    其他
    {
    /*清除 TCRAM 模块中的单个位错误标志*/
    tcram1REG->RAMERRSTATUS = 0x1U;
    tcram2REG->RAMERRSTATUS = 0x1U;
    
    /*清除 ESM 状态*/
    esmREG->SR1[0U]= 0x14000000U;
    }
    }
    
    /*在两个组中强制出现双位错误*/
    _coreDisableRamEcc_();
    tcramA2bitError ^= 3U;
    tcramB2bitError ^= 3U;
    _coreEnableRamEcc_();
    
    /*读取损坏的数据以生成双位错误*/
    ramread = tcramA2bit;
    ramread = tcramB2bit;
    
    regread = tcram1REG->RAMUERRADDR;
    regread = tcram2REG->RAMUERRADDR;
    
    /*禁用对 ECC RAM 的写入*/
    tcram1REG->RAMCTRL = 0x0005000AU;
    tcram2REG->RAMCTRL = 0x0005000AU;
    
    /*计算正确 ECC */
    tcramA1bit = tcramA1_bk;
    tcramB1bit = tcramB1_bk;
    tcramA2bit = tcramA2_bk;
    tcramB2bit = tcramB2_bk;
    }
    
    

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

    感谢 Bob