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.

[参考译文] TMDSDOCK28035:简单闪存帮助

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1021877/tmdsdock28035-simple-flash-help

器件型号:TMDSDOCK28035
Thread 中讨论的其他器件:controlSUITE

简单来说、如何对 OTP_KEY 和 OTP_BMODE 值进行编程?? 我需要一个清晰的示例或代码、因为我已经在大量文档和示例中进行了大量的输入、并且到目前为止无法设置这些值。 我还想获得一个故障排除提示、在此提示中、我可以使用仿真器来查看内存位置是否正确。

PS -我已经能够更新 EMU_KEY 和 EMU_BMODE 并通过 Code Composer Studio 中的存储器浏览器查看这些值。

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

    尊敬的 Jeff:

    在 CCS 中连接到器件时、您可以在"Scripts"选项卡中设置 EMU 引导模式。

    在 F2803x 上、您可以使用闪存 API 对 OTP 进行编程或将其配置为映像的一部分。

    请参阅之前的 E2E 以及后续常见问题解答 的#37和#41:https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1010693/tms320f28035-production-high-speed-programming---otp-and-flash

    最棒的

    Kevin

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

    感谢您提供这些信息、但我的 OTP 写入仍然失败。 (Code Composer 为10.3)

    我正在使用 C:\ti\controlSUITE\development_kits\TemplateProjects\FlashingLets-F28035_v1.0、并根据上述建议常见问题解答链接的#41进行了以下修改:

    在 第0页的 F28035_FLASH_FlashingLets.CMD 中、我添加了以下内容:
    OTP   :origin = 0x3D7800,length = 0x0003FD //片上 OTP */
    OTPKEY  :origin = 0x3D7BFE,length = 0x000001 //引导加载程序 GetMode 项0x55AA */
    OTPBMODE:origin = 0x3D7BFF,length = 0x000001 /* Bootloader BMODE 键-设置为 CAN - 0x0007*/

    在章节部分、我添加了:
    /*重置 OTP 引导加载程序*/
    OtpKey_Section  :> OTPKEY,  PAGE = 0
    OtpBMode_Section:> OTPBMODE,PAGE = 0

    在 DSP2803x_GlobalVariableDefs.c 中、我添加了:

    #pragma DATA_SECTION (OtpKey、"OtpKey_Section");
    uint16 OtpKey = 0x55AA;

    #pragma DATA_SECTION (OtpBMode、"OtpBMode_Section");
    UINT16 OtpBMode = 0x1234;//无效值-闪存

    在 DSP2803x_BootVars.h 中、我添加了:
    extern UINT16 OtpKey;
    EXTERN UINT16 OtpBMode;

    但是、当我在 OTP 存储器中达到峰值时、我仍然看不到任何 OTP 存储器位置发生变化的证据。

    还有其他想法吗? 我可以分享更多信息吗?

    愚蠢的问题、但是 OTP 位置 0x3D7BFE 和0x3D7BFF 都是0、那么这些值是否可以重新写入为0x55AA 和0x000x?

    映射文件数据可能有帮助????

    存储器配置

    名称源长度使用未使用的属性填充
    ------------ ---- ------ ---- ---- --------
    第0页:
    OTP 003d7800 000003fd 00000000 000003fd RWIX
    OTPKEY 003d7bfe 00000001 00000001 00000000 RWIX
    OTPBMODE 003d7bff 00000001 00000001 00000000 RWIX


    部分分配映射

    输出属性/
    段页原点长度输入段
    ---- -------- ------ --------
    OtpKey_Section
    0 003d7bfe 00000001未初始化
    003d7bfe 00000001 DSP2803x_GlobalVariableDefs.obj (OtpKey_Section)

    OtpBMode_Section
    0 003d7bff 00000001未初始化
    003d7bff 00000001 DSP2803x_GlobalVariableDefs.obj (OtpBMode_Section)

    全局数据符号
    地址数据页名
    ---- -------- ----

    003d7bfe f5ef (003d7bc0)_otpKey
    003d7bff f5ef (003d7bc0)_OtpBMode

    全局符号
    页地址名称

    ------ ----  
    0 003d7bff _OtpBMode
    0 003d7bfe _otpKey  

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

    尊敬的 Jeff:

    擦除时、闪存和 OTP 为0xFFFF。 对这些位进行编程时、会将这些位设置为0、看起来您的 OTP_KEY 位置已经被编程(注意 OTP 无法擦除)。

    您能否检查您的器件是否已锁定(CSM 密码)? 这是另一个可能导致读取0的东西。

    最棒的

    Kevin

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

    好奇-我是否应该能够通过 Code Composer 的"Memory Browser"窗口修改 OTP 密钥值的存储器位置-因为我不能这么做?

    此外、我尝试过 GEL 更新。 我在 F28035.GEL 中添加了以下内容:(我知道在连接仿真器时无关紧要、只需尝试写入值即可。)

    菜单项"OTP 引导模式选择"
    热菜单 OTP_BOOT_eCAN ()

    *0x3D7BFE = 0x55AA;/* OTP_KEY = 0x 55AA */
    *0x3D7BFF = 0x0007;/*引导至 eCAN */

    热菜单 OTP_BOOT_FLASH ()

    *0x3D7BFE = 0x55AA;/* OTP_KEY = 0x 55AA */
    *0x3D7BFF = 0x0003;/*引导至闪存*/

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

    Jeffrey、

    对于闪存和 OTP、您将无法使用存储器浏览器或 GEL 写入这些位置。  这是因为对于两个闪存 API、都必须调用。

    从 CCS 执行此操作的最简单方法是在链接器中声明一个段、然后在 C 代码中将 pragma 映射到该段、然后使用 CCS 加载.out 文件。  当 CCS 将.out 加载到闪存或存储器空间时、它将调用所需的闪存 API 来对所有需要的位置进行编程。

    此帖子详细介绍了上述内容: https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/83592/otp-programming

    另一种方法是在代码中调用闪存 API、然后让 C28x 作为程序的一部分写入 OTP。  由于您具有 CCS 连接、因此这不是必需的(但如果您是通过引导加载程序写入数据、这将是使用的方法)。

    最棒的

    Matthew

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

    因此、根据您和 Wally 的回复、您似乎只有1个机会正确编程 OTP 区域。 如果操作不正确、则需要丢弃 F28035并获取另一个。 或者、引导加载程序是否有其他方法可以更改 OTP_Key 和 OTP_BMODE 位置以使其识别?

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

    Jeffrey、

    是的、OTP 是一次性可编程的。  这里唯一的警告是、任何已擦除的位都可以在将来进行编程、但编程的位永远不能被擦除。  因此可能会有一个超时、具体取决于您要进入/打算进入的引导模式。

    您所描述的是我们使用 EMU_Key 和 EMU_BMODE 在最终对 OTP 进行编程之前调试/测试这些模式的原因、但如果您确实需要在这种情况下更改、我很感激您的观点(在本例中、您必须激活调试器)。  

    我们可以通过始终引导 至闪存(默认)并放置少量代码来重新定向/调用所选的引导加载程序来解决此问题、直到您完全确定您的独立开发已完成。  如果您想更改引导加载程序、则必须对该小型内核进行重新编程、但这会防止器件过时。

    FLIW 我们在以后的器件中解决了这个问题、方法是分配 OTP 的几个字以及一个可更改的指针(链接指针)、以防需要您所讨论的内容。 对于具有该功能的同类器件、我们将讨论 F28004x 或 F28002x C2000。

    最棒的

    Matthew