主题中讨论的其他器件:UNIFLASH
我当前正在使用 Code Composer Studio 来设置片上闪存选项字节、例如 GPREG (BOOTCTRL)。 我需要以某种方式将选项字节与应用程序十六进制文件组合在一起、以便可以使用 UniFlash 同时对两者进行编程。 组合两个十六进制文件(在本例中为引导加载程序和应用程序)也是有利的、因此使用 UniFlash 的程序操作可以是一步。 有人能为我提供有关使用 UniFlash 进行编程选项的正确文档或最佳实践吗? 谢谢
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.
我当前正在使用 Code Composer Studio 来设置片上闪存选项字节、例如 GPREG (BOOTCTRL)。 我需要以某种方式将选项字节与应用程序十六进制文件组合在一起、以便可以使用 UniFlash 同时对两者进行编程。 组合两个十六进制文件(在本例中为引导加载程序和应用程序)也是有利的、因此使用 UniFlash 的程序操作可以是一步。 有人能为我提供有关使用 UniFlash 进行编程选项的正确文档或最佳实践吗? 谢谢
您好、Paul、
1)关于在图像中合并 OTP 字段:请搜索"如何在用户 OTP 中对字段进行编程?" 本常见问题解答中的内容: https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/951668/faq-faq-on-flash-api-usage-for-c2000-devices
DCSM 工具还应该允许您配置这些字段-您试过吗? 如果需要、我可以联系我们的 DCSM 工具专家。
2)关于合并两个可执行文件: C28x 汇编工具手册(www.ti.com/.../spru513)) "加载图像格式"子章节包含我们编译器团队提供的相关信息。 您 可以执行如下操作:hex2000 --load_image -o combined.out prog1.out prog2.out
您可以在单独调用 hex2000时为组合出的文件生成 hex 文件。
谢谢。此致、
瓦姆西
感谢您提供这些提示。 我有一个关于 RETAIN pragma 的后续问题。 我使用的是 eabi、因此我发现需要 Retain 能够防止丢弃 OTP 段。 但是、Retain 会为我生成警告或错误。 您能建议我是否使用语法、正确吗? 我能够通过使用代码中的变量来欺骗链接器使解决方案正常工作-但我真的不喜欢该解决方案、它可能会在优化中损坏。
在上方的"mian.c->
//OTP 选项
#pragma DATA_SECTION (Z1_BOOTCTRL_VALUE、"boot_section")
volatile const long Z1_BOOTCTRL_value = 0x12345678;
#pragma retain ('boot_section')
向我发出警告(并且分区已丢弃):
#1923-D 字符文字中的字符太多--额外的前导字符忽略了 main.c /flash_kernel_sci 第34行 C/C++问题
#830-D error processing pragma retain, verify format main.c /flash_kernel_sci line 34 C/C++ problem
我已尝试"和"将段名称括起来。
下面是.cmd 文件的副本:
MEMORY /*修改回闪存模式2023年6月14日*/
{
begin:origin = 0x00080000、length = 0x00000002
// BOOTVER:origin = 0x00080002,length = 0x00000004 //软件版本字符串
BOOT_RSVD:origin = 0x00000002、length = 0x00000126
复位:origin = 0x003FFFC0、length = 0x00000002
RAMM0:origin = 0x00000128、length = 0x000002D8
RAMM1:origin = 0x00000400、length = 0x000003F8
// RAMM1_RSVD:origin = 0x000007F8,length = 0x00000008 /*根据勘误建议"存储器:预取超出有效存储器"保留代码且不使用*/
RAMLS0:origin = 0x00008000、length = 0x00002000
RAMLS1:origin = 0x0000A000、length = 0x00001FF0
BOOT_L_KEY:origin = 0x0000BFF0、length = 0x08
BOOTVER:origin = 0x0000BFF8,length = 0x08
// RAMLS1_RSVD:origin = 0x0000BFF8,length = 0x00000008 /*根据勘误建议"存储器:预取超出有效存储器"保留代码且不使用*/
/* OTP 引导控制*/
Z1_BOOTCTRL_OTP1:origin = 0x078208、length = 0x04
/*闪存扇区*/
FLASH_BANK0_SEC_0_7:origin = 0x080008、length = 0x2FF0 /*片上闪存<<<此处显示所有引导加载程序代码 end = 0x083000 */
//为应用保留大部分闪存空间
// FLASH_BANK0_SEC_8_15:origin = 0x082000、length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_16_23:origin = 0x084000、length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_24_31:origin = 0x086000,length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_32_39:origin = 0x088000、length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_40_47:origin = 0x08A000、length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_48_55:origin = 0x08C000,length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_56_63:origin = 0x08E000,length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_64_71:origin = 0x090000、length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_72_79:origin = 0x092000、length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_80_87:origin = 0x094000,length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_88_95:origin = 0x096000,length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_96_103:origin = 0x098000、length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_104_111:origin = 0x09A000,length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_112_119:origin = 0x09C000,length = 0x2000 /*片上闪存*/
// FLASH_BANK0_SEC_120_127:origin = 0x09E000,length = 0x1FF0 /*片上闪存*/
// FLASH_BANK0_SEC_127_RSVD:origin = 0x0A0FF0、length = 0x0010 //根据勘误建议"存储器:在有效存储器之外进行预取",保留代码,且不使用此代码*/
}
部分
{
代码开始:>开始
.version :> BOOTVER
//.text:>> FLASH_BANK0_SEC_0_7,ALIGN (8)
.cinit:> FLASH_BANK0_SEC_0_7、align (8)
.switch:> FLASH_BANK0_SEC_0_7、ALIGN (8)
.reset:> reset,type = DSECT /*未使用,*/
.stack:> RAMM1
.bootkey:> boot_L_key
BOOT_SECTION:> Z1_BOOTCTRL_OTP1
#if defined (__TI_EABI __)
在 C 语言代码中、 #pragma Retain 应用于函数或变量。 它不应用于段。 当您指定函数或变量时、不使用引号。 有关更多详细信息、请搜索 C28x 编译器手册。
谢谢。此致、
-乔治