Thread 中讨论的其他器件:controlSUITE
简单来说、如何对 OTP_KEY 和 OTP_BMODE 值进行编程?? 我需要一个清晰的示例或代码、因为我已经在大量文档和示例中进行了大量的输入、并且到目前为止无法设置这些值。 我还想获得一个故障排除提示、在此提示中、我可以使用仿真器来查看内存位置是否正确。
PS -我已经能够更新 EMU_KEY 和 EMU_BMODE 并通过 Code Composer Studio 中的存储器浏览器查看这些值。
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.
简单来说、如何对 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
好奇-我是否应该能够通过 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 来对所有需要的位置进行编程。
另一种方法是在代码中调用闪存 API、然后让 C28x 作为程序的一部分写入 OTP。 由于您具有 CCS 连接、因此这不是必需的(但如果您是通过引导加载程序写入数据、这将是使用的方法)。
最棒的
Matthew
Jeffrey、
是的、OTP 是一次性可编程的。 这里唯一的警告是、任何已擦除的位都可以在将来进行编程、但编程的位永远不能被擦除。 因此可能会有一个超时、具体取决于您要进入/打算进入的引导模式。
您所描述的是我们使用 EMU_Key 和 EMU_BMODE 在最终对 OTP 进行编程之前调试/测试这些模式的原因、但如果您确实需要在这种情况下更改、我很感激您的观点(在本例中、您必须激活调试器)。
我们可以通过始终引导 至闪存(默认)并放置少量代码来重新定向/调用所选的引导加载程序来解决此问题、直到您完全确定您的独立开发已完成。 如果您想更改引导加载程序、则必须对该小型内核进行重新编程、但这会防止器件过时。
FLIW 我们在以后的器件中解决了这个问题、方法是分配 OTP 的几个字以及一个可更改的指针(链接指针)、以防需要您所讨论的内容。 对于具有该功能的同类器件、我们将讨论 F28004x 或 F28002x C2000。
最棒的
Matthew