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.

[参考译文] 是否可以在不对 ZxOTP_GPREG2和 ZxOTP_GPREG4进行编程的情况下对 ZxOTP_GPREG1和 ZxOTP_GPREG3进行编程?

Guru**** 2546020 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/946225/is-possible-to-program-zxotp_gpreg1-and-zxotp_gpreg3-without-programming-zxotp_gpreg2-and-zxotp_gpreg4

器件型号:TMS320F28388D

工具/软件:Code Composer Studio

您好!

我准备对 OTP 进行编程、以自定义引导模式选择引脚。 闪存 API 文档表示确实可以使用闪存 API 对 OTP 进行编程、但文档中有一个短语重复出现、用于 OTP 编程。

[引用][DCSM OTP]编程必须与128位地址边界对齐、并且每个128位字只能编程一次。[/引用]

我理解短语中的"只能编程一次"部分、 但是、当谈到128位对齐时、这意味着我必须对所有 ZxOTP_GPREGx 寄存器(总共8个 C28x 字、相当于16字节或128位)进行编程、即使我只打算使用 GPREG1和 GPREG3? 我知道、只要写入的字节数得到相应调整、就可以沿未对齐边界对主阵列闪存进行编程、但是否可以对 OTP 存储器执行相同的操作?

如果我决定将来使用 GPREG2和 GPREG4、该怎么办? f2838x_dcsm_z1otp.asm 在注释中包含以下警告:

[引述]

;如果是用户、建议不要将0xFFFFFFFF 编程到用户 OTP 位置
;;打算将来将任何位重新返回并重新编程为“0”。 IF 用户
;将0xFFFFFFFF 编程到任何 OTP 位置、ECC 位置将如此
;编程为未擦除状态,用户将无法返回
;并将 OTP 位置重新编程为另一个值。 请参阅 DCSM
;;器件 TRM 的一章、了解有关 DCSM 中位置 ECC 的更多详细信息。

[/报价]

如果 我必须从128位边界开始一次至少128位对 OTP 进行编程、此警告表明我无法保留 GPREG2和 GPREG4以备将来使用。

此致、

李孝华

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

    您好 Howard、

    [引述]  

    我准备对 OTP 进行编程、以自定义引导模式选择引脚。 闪存 API 文档表示确实可以使用闪存 API 对 OTP 进行编程、但文档中有一个短语重复出现、用于 OTP 编程。

    [DCSM OTP]编程必须与128位地址边界对齐、并且每个128位字只能编程一次。 [/报价]
    这是从之前器件的进位。 由于 ECC 值、它应与64位对齐。 我们将在下一个版本中更新该文档。
    此致、
    Vivek Singh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、但这仍然不能解决我的问题。

    我可以在不触摸 GPREG2和 GPREG4的情况下对 GPREG1和 GPREG3进行编程吗?

    编辑:经过一些思考后 、0x00078008 (GPREG1)落在128位边界上(这意味着它也落在64位边界上)。  0x0007800C (GPREG2)是 0x00078008之前的4个 C28x 字。 4个 C28x 字相当于8个字节、相当于64位、 因此0x0007800C 也是64位对齐的。

    我希望每个编程周期的写入值小于64位、因为我只需要对32位值进行编程。

    EDIT2:即使我只能对所需的寄存  器进行编程,我也担心使用带有自动 ECC 生成的 Fapi_issueProgrammingCommand()会导致 GPREG2和 GPREG4在将来不可更改,因为每个64位数据(数据不是假定为0xFF)都会生成 ECC。 我是否必须以某种方式手动创建 ECC?

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

    Howard、

    ECC 适用于64位、因此当您以64位对齐方式对任何地址进行编程时(即使仅限32位)、它将对 ECC 进行64位编程、这意味着您无法稍后更新另一个32位、因为它具有不同的 ECC 值、无法更新。 因此、在本例中、您必须同时对 GPREG1/GPREG2和 GPREG3/GPREG4进行编程。

    此致、

    Vivek Singh