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.

[参考译文] TMDS570LS31HDK:ADC 电压读数>4.5V 或<0.5V 损坏闪存。

Guru**** 1815690 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/1247456/tmds570ls31hdk-adc-voltage-readings-4-5v-or-0-5v-corrupts-flash-memory

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

您好!

我尝试使用 HDK 上的 ADC 从电流传感器中读取电压。 我发现、当任何通道读取0.5-4.5V 范围之外的电压时、ESM 将发出第3组 FMC 不可纠正的错误信号并触发 nERROR 引脚。 然后、需要通过一个上电复位来清除它。 我已经隔离了该行为、并在下面附加了一个示例 MAIN 和 HCG DIL 文件。  

在该文件中、您将注意到我进行的转换如下所示:

    adcStartConversion(currentSensorAdcHandle_, currentSensorAdcLowGroup_);

    /* Wait for conversion to complete. */
//    while ((adcIsConversionComplete(adcREG1,adcGROUP1))==0);                  <--- TRIGGERS A FAIL
//    i = adcIsFifoFull(currentSensorAdcHandle_, currentSensorAdcLowGroup_);    <--- TRIGGERS A FAIL
    while (i < 1000) {
        i++;
    }
    
    /* Read the data. */
    adcRet = adcGetData(currentSensorAdcHandle_, currentSensorAdcLowGroup_, &adcOutBuf);

如果我使用 adcIsConversionComplete ()或 adcIsFifoFull ()等函数来检查状态,甚至只是在循环时延迟,就会触发 ESM 错误。 在我的原始代码中,我使用的是在 adcnotification ()中发布的一个 FRTOS 信标,但这也引发了问题。  

重现步骤:

1.将电压设置为2.47V 至 ADC1 CH0和 CH1。

2.构建二进制文件并将其刷写到 HDK 上

3.应正常读取电流值(预计约为-1、不应触发 nERROR)。

4.在施加新电压之前暂停执行

向 ADC1 CH0施加4.95V 的电压。 (电流传感器低灵敏度通道)

6. 向 ADC1 CH1施加2.85的电压。 (电流传感器高灵敏度通道)

7.恢复代码;应触发 nERROR 引脚、且 ESM SR G3应读取0x80。 仍应能够读取电流(预期~92)

8.代码应该继续执行而不会有任何问题,但是要清除 nERROR 板必须是 PORRST。 RST 不应清除 nERROR 引脚(符合技术手册预期)

请告诉我您是否可以重现此行为。 谢谢。

e2e.ti.com/.../ex_5F00_halcogen.zip

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

    您好、Robin、

    我们已着手解决您的问题、并将很快提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    您好、Robin、

    实际上、FMC 不可纠正的错误应该在以下条件下产生:

    闪存 ECC 错误检测和校正由 CPU 完成。  

    为了使能 ACTM (主闪存) ECC、 辅助控制寄存器的位25应该被置位。  

    如果在 CPU 中启用了 ECC、但未在包装器中启用、CPU 仍将检查和校正单位 ECC 错误、并在主闪存出现不可纠正的错误时生成中止。 如果 未启用 FEDACCTRL1的 EDACEN、 ECC 错误将不会被报告给 ESM 寄存器和闪存状态寄存器。

    如果  未启用 EnableFlashEcc(),将不会检测到闪存 ECC 错误。

    --

    谢谢。此致、
    Jagadish。

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

    你好、Jagadish。

    我知道0x80仅与 FMC 不可纠正的错误一起发生。 这就是为什么这个问题让我感到困惑、因为我不明白为什么  adc 模块 触发  闪存错误 。 此外、由于它是 Group3错误、根据文档正确描述、它不应该生成中止?


    如果您使用我附加的 HALCOGEN 文件生成 sys_startup.c,EnableFlashECC ()将作为常规启动序列的一部分运行。 我们需要启用该功能以满足其他功能安全要求。

    您是否能够使用我提供的文件在您的开发环境中测试行为?

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

    您好、Robin、

    此外,由于是组3错误,它不应该生成中止,因为根据文档是否正确?

    但事实并非如此、该表表明组3错误不会生成任何中断、但它们将生成中止。

    您是否能够使用我提供的文件在开发环境中测试行为?

    否、由于缺少电路板、我没有测试此模块。 但我会努力的。

    --

    谢谢。此致、
    Jagadish。

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

    单独找到问题。 由于 ECC 闪存空洞、预取中止会触发中止。 为空穴生成 ECC 后、我们不再看到问题。