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.

[参考译文] TMS320F280023:闪存存储器映射-字节访问

Guru**** 2394125 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1008252/tms320f280023-flash-memory-map---byte-access

器件型号:TMS320F280023

您好、支持团队、

F28002x 具有16位字存储器映射、例如扇区0、4K x 16、0x0008 0000至0x0008 0FFF。 当我转到一个地址时、我得到一个16位字。

-我还可以使用地址访问一个字节吗? 地址为0x80000的高字节是否具有其 Eigen 地址?

-当我使用"-memwidth=8 --diag_wrap=off --Intel"生成 Intel hex 文件时,地址加倍。 第一个地址是0x100000而不是0x80000。 使用"--memwidth=16 --diag_wrap=off --Intel"时、我具有正确的地址、但2个文件*。hex 和*。I01表示高字节。 在两种情况下(memwidth=8和 memwidth=16)、我是否可以像本主题一样刷写 hex 文件?

e2e.ti.com/.../3637751

如果 memwidth=16、我应该刷写2个文件、还是 SW 可以自动加入*。hex 和*。I01文件?

此致、

Nguyen

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

    尊敬的 Nguyen:

    您无法访问字节。  如果您需要访问一个字节、您可以读取16位并丢弃您不需要的字节。   

    我记得 C28x 的 romwidth 和 memwidth 应该为16。   

    此外、C2000十六进制实用程序为 PAGE 0和 PAGE 1生成单独的十六进制文件。 编译时、您将注意到十六进制实用程序发出有关此问题的警告。 如果只加载一个十六进制文件、则会丢失另一页的内容。  为了避免此问题、通常情况下、当您使用十六进制文件时、请将所有初始化的段映射到链接器 cmd 文件中的 PAGE 0。

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    感谢你的答复。 请告诉我如何操作?  

    为了避免此问题、通常情况下、当您使用十六进制文件时、请将所有初始化的段映射到链接器 cmd 文件中的 PAGE 0。

    我们是否有相关的手册或示例项目?

    之后、我必须加载这两个文件、或者应该如何操作?

    此致、

    问题

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

    Nguyen、

    能否检查链接器 cmd 文件并查看是否有任何内容单独映射到 PAGE 0和 PAGE 1?   

    如果未定义页面、则这不应成为问题。  如果在链接器 cmd 文件中定义了页面、我可以帮助您修改它以将所有内容移动到 PAGE 0 -完成此操作后、应该只有一个文件用于加载。

    谢谢、此致、
    Vamsi  

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

    您好、Vamsi、

    我无法正确获取"页面"的含义。 它是指"组"(PAGE 0 <=>BANK0)还是指"扇区"(PAGE 0 <=>SECTOR0)  

    我的推导仅具有一个组0和8个扇区

    链接器文件如下所示

    MEMORY
    {
       BEGIN            : origin = 0x080000, length = 0x00003B
       BOOT_RSVD    : origin = 0x00000002, length = 0x00000126
       RAMM0            : origin = 0x00000128, length = 0x000002D8
       RAMM1            : origin = 0x00000400, length = 0x000003F8     /* on-chip RAM block M1 */
    // RAMM1_RSVD       : origin = 0x000007F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    /* RAMLS4           : origin = 0x0000A000, length = 0x00000800
       RAMLS5           : origin = 0x0000A800, length = 0x00000800
       RAMLS6           : origin = 0x0000B000, length = 0x00000800
       RAMLS7           : origin = 0x0000B800, length = 0x00000800*/
       
       /* Combining all the LS RAMs */
       RAMLS4567        : origin = 0x0000A000, length = 0x00002000
       RAMGS0           : origin = 0x0000C000, length = 0x000007F8
    // RAMGS0_RSVD      : origin = 0x0000C7F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    
    //  FLASHBANK1       : origin = 0x00080000, length = 0x0000FFF0
    //  FLASH_BANK1_RSVD : origin = 0x0008FFF0, length = 0x00000010 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
       BOOTROM          : origin = 0x003F0000, length = 0x00008000
       BOOTROM_EXT      : origin = 0x003F8000, length = 0x00007FC0
       RESET            : origin = 0x003FFFC0, length = 0x00000002
       /* Flash sectors */
       /* BANK 0 */
       FLASH_BANK0_SEC0  : origin = 0x08003B, length = 0x000FC5 /* on-chip Flash */
       FLASH_BANK0_SEC1  : origin = 0x081017, length = 0x000FE9 /* on-chip Flash */
       FLASH_BANK0_SEC2  : origin = 0x082000, length = 0x001000 /* on-chip Flash */
       FLASH_BANK0_SEC3  : origin = 0x083000, length = 0x001000 /* on-chip Flash */
       FLASH_BANK0_SEC4  : origin = 0x084000, length = 0x001000 /* on-chip Flash */
       FLASH_BANK0_SEC5  : origin = 0x085000, length = 0x001000 /* on-chip Flash */
       FLASH_BANK0_SEC6  : origin = 0x086000, length = 0x001000 /* on-chip Flash */
       FLASH_BANK0_SEC7  : origin = 0x087000, length = 0x001000 /* on-chip Flash */
       FLASH_BANK0_SEC8  : origin = 0x088000, length = 0x001000 /* on-chip Flash */
       FLASH_BANK0_SEC9  : origin = 0x089000, length = 0x001000 /* on-chip Flash */
       FLASH_BANK0_SEC10 : origin = 0x08A000, length = 0x001000 /* on-chip Flash */
       FLASH_BANK0_SEC11 : origin = 0x08B000, length = 0x001000 /* on-chip Flash */
       FLASH_BANK0_SEC12 : origin = 0x08C000, length = 0x001000 /* on-chip Flash */
       FLASH_BANK0_SEC13 : origin = 0x08D000, length = 0x001000 /* on-chip Flash */
       FLASH_BANK0_SEC14 : origin = 0x08E000, length = 0x001000 /* on-chip Flash */
       FLASH_BANK0_SEC15 : origin = 0x08F000, length = 0x000FF0 /* on-chip Flash */
    // FLASH_BANK0_SEC15_RSVD     : origin = 0x08FFF0, length = 0x000010  /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    }
    
    
    SECTIONS
    {
       codestart        : > BEGIN, ALIGN(8)
       .text            : >> FLASH_BANK0_SEC0 | FLASH_BANK0_SEC1,   ALIGN(8)
       .cinit           : > FLASH_BANK0_SEC1,  ALIGN(8)
       .switch          : > FLASH_BANK0_SEC1,  ALIGN(8)
       .reset           : > RESET,                  TYPE = DSECT /* not used, */
    
       .stack           : > RAMM1
    
       .init_array      : > FLASH_BANK0_SEC1,  ALIGN(8)
       .bss             : > RAMLS4567
       .bss:output      : > RAMLS4567
       .bss:cio         : > RAMLS4567
       .const           : > FLASH_BANK0_SEC1,  ALIGN(8)
       .data            : > RAMLS4567
       .sysmem          : > RAMLS4567
    
        ramgs0 : > RAMGS0
    
      GROUP
       {
           .TI.ramfunc
           {
              -l FlashAPI_F28002x_FPU32.lib
           }
       }  LOAD = FLASH_BANK0_SEC1,
        RUN = RAMLS4567,
        LOAD_START(RamfuncsLoadStart),
        LOAD_SIZE(RamfuncsLoadSize),
        LOAD_END(RamfuncsLoadEnd),
        RUN_START(RamfuncsRunStart),
        RUN_SIZE(RamfuncsRunSize),
        RUN_END(RamfuncsRunEnd),
        ALIGN(8)
    }

    此致、

    问题

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

    Quy、

    看起来您使用的是最新的链接器 cmd 文件-其中没有页面-这很好。  您无需担心页面。

    对于 Intel hex 格式、只需将 romwidth 和 memwidth 用作16即可-您应该得到单个文件。

    如果没有、请告诉我。   

    谢谢、此致、
    Vamsi