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.

[参考译文] TMS320F2800137:将板载闪存选项数据组合到十六进制文件中以便与 UniFlash 配合使用

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1271423/tms320f2800137-combine-on-board-flash-option-data-into-hex-file-for-use-with-uniflash

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

我当前正在使用 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 __)

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

    您好、Paul、  

    我目前不在办公室。  我可以在几天内查看并回复您。 谢谢你。

    谢谢。此致、
    瓦姆西

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

    在 C 语言代码中、 #pragma Retain 应用于函数或变量。  它不应用于段。  当您指定函数或变量时、不使用引号。  有关更多详细信息、请搜索 C28x 编译器手册

    谢谢。此致、

    -乔治