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.

[参考译文] TMS320F280025:对 DCSM OTP 进行编程

Guru**** 2524550 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1243470/tms320f280025-issue-programing-the-dcsm-otp

器件型号:TMS320F280025
主题中讨论的其他器件:UNIFLASH

您好、专家。

CCS:版本:11.1.0.00011

UniFlash:版本: 8.1.0.4135

我有以下问题。 我需要使用生成的.hex 来刷写 MCU (请注意、使用任何其他文件格式都不是讨论事项)

项目中的一些背景知识:

我们根据需要将程序存储器分为三个分区、而 CCS 并未提供实现这一目标的方法。 闪存的一部分分配给启动有效应用程序的启动器、其他两个部分为可以驻留在任何应用分区中的实际应用程序分配空间。

现在、话虽如此、我们需要在十六进制文件中包含区域1的 DCSM OTP 值、这样、一旦我们刷写 MCU、它就会保留这些值、我们无需手动执行该操作、这在生产中非常不方便。

我已经尝试通过 UniFlash 刷写 MCU、但在使用包含 DCSM OTP 存储器部分的文件时、它无法正常工作。 不包含此内容的十六进制文件可以正常工作、但如果没有 DCSM 设置、MCU 将无法工作、因为默认情况下、它不会从闪存引导。

以下是我们.hex 文件的开头部分、

:020000040007F3
:20800000FFFF1FFFFFFFFFFFFFFF1FFFFFFFFFFFFFFF1FFFFFFFFFFFFFFF5AFFFFFF5AFF6A
:20801000FFFFFB7FFFFF7FFFFFFF4BFFFFFF3FFFFFFF9FFFFFFF0FFFFF03FFFFFFFFFFFF34
:020000040008F2
:2000000000480784000000000000000000000000D00600C8081C8F05D22E86A940C4FFED98
:2000100000F876228F05D20E18C4FFFD761A02177640C6798F45D2088F05D232CCC500037C
:2000200088A9CCC4000280A9AAA90EA8FF5A92AB900327A992A7CAA688A92BAAA9A90FA61C
:20003000611276228F05D20E18C4FFFE761A020C7640C679AAA99000910376480719020B63

前三行对应于 DCMS OTP 区域1地址(0x78000)、如果没有 DCSM 设置、MCU 将不工作、因为默认情况下它不从闪存引导。

以下是 DCSM 设置:

这些设置与十六进制文件中的部分设置相同。

在我第一次尝试刷写 MCU 之前、我读取存储器、得到以下结果:

闪存会失败、因为我将在下文中显示、但我再次以如下方式读取内存:

因此、DCSM 地址上的部分值发生了更改、但刷写过程中断、原因我不知道。

以下是我在不同尝试使用 UniFlash 进行刷写时遇到的错误:

如前所述、如果我使用的 hex 文件不包含 DCSM 的内容(本例中的前三行)、则使用 UniFlash 刷写 MCU 是可行的、但这些设置是必要的、以便 MCU 从闪存引导。 过去、我使用了.out 文件、该文件似乎通过项目中包含的 asm 和 cmd 文件的正确 DCSM 设置为 MCU 刷写、但这对我们不起作用、因为我们在项目的不同部分中分配了多个应用 步骤。 为了解决此问题、我必须使用包含 Launcher 和应用程序的十六进制文件重新刷写 MCU、但我提到这对于生产来说非常方便。

那么、我的问题是、如何在十六进制文件中包含 DCSM OTP ZONE1的正确设置、以便与 UniFlash 配合使用? 我缺少什么?

我真的很感激任何帮助。

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

    Wilson 您好、

    我们将在下周早些时候对此进行回顾与您联系。

    谢谢。此致、

    瓦姆西

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

    Wilson 您好、

    我在我们的安全团队中循环使用-他们可能会建议使用安全工具。

    谢谢。此致、

    瓦姆西

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

    Wilson 您好、

    如果闪存编程仅在您不包含 DCSM 部分时有效、则十六进制值可能包含 DCSM 值、该值会尝试将0编程为1或更改已编程的 OTP 中的值。 用户 OTP 编程为64位块、每个块只能编程一次。 因此、如果您已经在用户 OTP 中对任何值进行编程、则必须继续将这些值编程为当前值。

    另一种可能是、如果您已经编写了任何 CSM 密码、用户 OTP 将在器件复位后变为安全/锁定、并且您将无法对任何用户 OTP 值进行编程、除非您已解锁了相应的区域(区域1或区域2)。 在嵌入到 CCS 中的片上闪存工具中、有一个在对闪存进行编程之前复位器件的复选框、但我不知道 UniFlash 中是否存在此选项。

    您能否验证以下内容:

    1) 1)由十六进制值编程的用户 OTP 中的值不会更新已编程的任何位置、也不会尝试对当前为0到1的任何位进行编程。

    2) 2)您尚未对任何 CSM 密码进行编程、或者在编程前已解锁区域1并且没有在编程前复位器件。

    谢谢!

    卢克

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

    我已经成功地在十六进制文件中包含 OTP 数据。 感谢您的回复。