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.

[参考译文] F28M35H52C:OTP存储器编程问题

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/615491/f28m35h52c-otp-memory-programming-problem

部件号:F28M35H52C

您好,

我们正在测试OTP存储器编程,存在以下问题。

我们希望将OTP的_EMAC_Address0编程为一位时间,以验证是否可以按以下所述完成: http://processors.wiki.ti.com/index.php/C2000_Flash_Common_Issues/FAQs#OTP_.28one_time_programmable.29_Memory

使用的命令是

DSLite flash -a OTPProgram -c user_files/configs/f28m35h52c1.ccXML -l user_files/settings/generated.ufsettings

其中generated.ufsettings contains:

{"Texas Instruments XDS100v2 USB调试探头/Cortex_M3_0":{"FlashM3EMACID1":"FFFFFFFE","FlashVerboseMode":TRUE},"Texas Instruments XDS100v2 USB调试探头/C28xx_0":{}}

这很顺利,我们可以用正确的值读回内存(位0 = 0)

然后,我们将generated.ufsettings修改为:

{"Texas Instruments XDS100v2 USB调试探头/Cortex_M3_0":{"FlashM3EMACID1":"FFFFFFFC","FlashVerboseMode":TRUE},"Texas Instruments XDS100v2 USB调试探头/C28xx_0":{}}

要编程下一位,但出现以下错误:

错误:Cortex_M3_0:闪存编程期间出错(闪存算法返回错误代码)。 操作已取消。
错误:Cortex_M3_0:请确保您正在编程的内存位置尚未编程。
错误:Cortex_M3_0:请确保您正在编程的内存位置尚未编程。
失败:未知错误

尝试写入FlashM3EMACID2时出现相同错误(OTP_EMAC_Address1)。

为什么会发生这种情况? 我们的DSlite命令是否有问题?

感谢你的帮助。

RIL

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

    在该设备上,闪存和OTP存储器空间受ECC保护。 在OTP中进行编程时,相应的ECC位置也会进行编程。 如果您尝试用不同的值重新编程相同的位置,它将尝试为ECC编程新值,这可能不会发生,因为该位置的某些位已经编程为'0',OTP是“一次性可编程”的。

    基本上,您不能对OTP位置进行重新编程。 您需要立即设定完整值。

    希望这一点是明确的。

    此致,

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

    感谢您的快速回答。

    对我来说,这似乎还是有点模糊。
    您能澄清一下“可能不会发生,因为有些位”吗?
    这是否特定于此特定设备?
    为什么OP中的链接在此不适用?

    例如,如果我在FlashM3EMACID1中写入一个位,那么即使我没有触摸FlashM3EMACID2,FlashM3EMACID1和FlashM3EMACID2也不能再写入,这是否正常??


    再次感谢。

    RIL

    编辑:

    我在另一篇论坛帖子上读到,这两个OTP区域是用户OTP位置,它们'是'一个共同的ECC,这意味着我们必须同时对整个区域进行编程。 是这样吗?

    参考邮递:e2e.ti.com/.../332410

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

    在对ECC编程时,应该对共享64位对齐内存的任何闪存或OTP字段进行一次编程。 用户在使用OTP字段时应更加小心,因为它们不能被擦除。

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

    [引述]我在另一篇论坛帖子上读到,这两个OTP区域是用户OTP位置,它们'是'一个共同的ECC,这意味着我们必须同时对整个区域进行编程。 是这样吗? [/引述]

    正确。 ECC的计算方法为64位。

    Vivek Singh

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

    RIL