Other Parts Discussed in Thread: UNIFLASH
器件型号: TMS320F28035-TMS320F28035 EP
Thread 中讨论的其他器件: UNIFLASH
您好、我无法找到使用最新 CCS v20 在 F28035 MCU 上刷写用户 OTP 存储器的方法。 请您分享与此相关的任何文档。
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.
Other Parts Discussed in Thread: UNIFLASH
器件型号: TMS320F28035-TMS320F28035 EP
Thread 中讨论的其他器件: UNIFLASH
您好、我无法找到使用最新 CCS v20 在 F28035 MCU 上刷写用户 OTP 存储器的方法。 请您分享与此相关的任何文档。
Kiran、
如果您在执行程序加载时在用户 OTP 位置定义了包含内容的存储器、则 CCS 闪存插件应注意这一点。 您是否说通过受支持的.out 文件、CCS 无法正确对 OTP 进行编程?
由于 OTP 仅为一次、因此在插件对话框中不会有擦除 OTP 的选项。
如果这样回答了您的问题、或者 CCS v20 在加载到该区域时阻止了 OTP 写入、请告诉我。
此致、
Matthew
您好、Matthew、
我收到这个错误
C28xx:loader:程序的一个或多个段落在不可写的存储器区域内。 这些区域实际上不会写入目标。 检查链接器配置和/或存储器映射。
C28xx:闪存编程器:写入闪存时遇到错误
C28xx:文件加载器:内存写入失败:未知错误
C28xx:GEL:file:c:\Users\E004\workspace_ccstheia\F2803x_flash_kernel\Debug\F2803x_flash_kernel.out:加载失败。 我使用 SPRAAQ3 作为参考。
下面是我使用的链接器文件。
MEMORY
{
PAGE 0 :
LINBOOTINIT : origin = 0x3D7800, length = 0x000020
LINBOOT : origin = 0x3D7820, length = 0x000400
PAGE 1 :
BOOT_RSVD : origin = 0x000000, length = 0x000050 /* Part of M0, BOOT rom will use this for stack */
RAMM0 : origin = 0x000050, length = 0x0003B0 /* on-chip RAM block M0 */
RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */
RAML2 : origin = 0x008C00, length = 0x000400 /* on-chip RAM block L2 */
RAML3 : origin = 0x009000, length = 0x001000 /* on-chip RAM block L3 */
/*FLASHB : origin = 0x3F4000, length = 0x002000 /* on-chip FLASH */
}
SECTIONS
{
.InitBoot : > LINBOOT, PAGE = 0
.text : > LINBOOT, PAGE = 0
.stack : > RAMM0 PAGE = 1
.ebss : >> RAMM1 | RAML2 | RAML3, PAGE = 1
LIN_BOOT : > LINBOOTINIT, PAGE = 0, ALIGN(4)
}

1) 您可以尝试 Uniflash 是否给出了相同的错误?
2) 我查看了 CCS 包含的 GEL 文件 (C:\ti\ccs2040\ccs\ccs_base\emulation\gel\F28035.gel)、我唯一注意到的是 OTP 段被标记为可写、而闪存被标记为只读(true、您需要调用闪存 API 才能对其进行编程)。 对于映射 OTP 的 2 条线、您能更改吗
GEL_MapAdd (0x3d7800、0、0x400、1、1); /* OTP */
最终目的
GEL_MapAdd (0x3d7800、0、0x4001、0); /* OTP */
我想知道 CCS 是否正在使用此参数来确定它是否需要调用闪存实用程序、并将“1、1“误解为 RAM 位置。
menuitem "Initialize Memory Map";
hotmenu F28035_Memory_Map()
{
GEL_MapReset();
GEL_MapOn();
/* Program memory maps */
GEL_MapAdd(0x0,0,0x400,1,1); /* M0 SARAM */
GEL_MapAdd(0x400,0,0x400,1,1); /* M1 SARAM */
GEL_MapAdd(0xD00,0,0x100,1,1); /* PIEVECT(DSPBIOS)*/
GEL_MapAdd(0x8000,0,0x800,1,1); /* L0 SARAM */
GEL_MapAdd(0x8800,0,0x400,1,1); /* L1 SARAM */
GEL_MapAdd(0x8c00,0,0x400,1,1); /* L2 SARAM */
GEL_MapAdd(0x9000,0,0x1000,1,1); /* L3 SARAM */
GEL_MapAdd(0x3d7800,0,0x400,1,1); /* OTP */
GEL_MapAdd(0x3d7c80,0,0x040,1,1); /* Device Cal */
GEL_MapAdd(0x3d7cc0,0,0x040,1,1); /* Boot Get Mode */
GEL_MapAdd(0x3d7e80,0,0x001,1,0); /* PARTID value */
GEL_MapAdd(0x3d7e82,0,0x02F,1,0); /* Calibration Data*/
GEL_MapAdd(0x3e8000,0,0x10000,1,0); /* FLASH */
GEL_MapAdd(0x3f8000,0,0x400,1,1); /* L0 SARAM Mirror */
GEL_MapAdd(0x3fe000,0,0x2000,1,0); /* BOOT ROM */
/* Data memory maps */
GEL_MapAdd(0x0,1,0x400,1,1); /* M0 SARAM */
GEL_MapAdd(0x400,1,0x400,1,1); /* M1 SARAM */
GEL_MapAdd(0x800,1,0x1800,1,1); /* PF0 */
GEL_MapAdd(0x6000,1,0x0400,1,1); /* PF1-A */
GEL_MapAdd(0x6400,1,0x0600,1,1); /* PF3 */
GEL_MapAdd(0x6A00,1,0x0600,1,1); /* PF1-B */
GEL_MapAddStr(0x7000,1,0x1000,"R|W|AS2",0); /* PF2 */
GEL_MapAdd(0x8000,1,0x800,1,1); /* L0 SARAM */
GEL_MapAdd(0x8800,1,0x400,1,1); /* L1 SARAM */
GEL_MapAdd(0x8c00,1,0x400,1,1); /* L2 SARAM */
GEL_MapAdd(0x9000,1,0x1000,1,1); /* L3 SARAM */
GEL_MapAdd(0x3d7800,1,0x400,1,1); /* OTP */
GEL_MapAdd(0x3d7c80,1,0x040,1,1); /* Device Cal */
GEL_MapAdd(0x3d7cc0,1,0x040,1,1); /* Boot Get Mode */
GEL_MapAdd(0x3d7e80,1,0x001,1,0); /* PARTID value */
GEL_MapAdd(0x3d7e82,1,0x02F,1,0); /* Calibration Data*/
GEL_MapAdd(0x3e8000,1,0x10000,1,0); /* FLASH */
GEL_MapAdd(0x3f8000,1,0x0800,1,1); /* L0 SARAM Mirror */
GEL_MapAdd(0x3fe000,1,0x2000,1,0); /* BOOT ROM */
}