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.

[参考译文] TMS320F2800132:似乎只有一半的可用闪存可用。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1502215/tms320f2800132-only-half-the-available-flash-seems-available

器件型号:TMS320F2800132
主题:C2000WARE 中讨论的其他器件

工具/软件:

我收到以下错误:  

loader:程序的一个或多个段落在不可写的存储器区域中。  这些区域实际上不会写入目标。  检查链接器配置和/或存储器映射。

经过进一步调查、它似乎与.const 段字符串数据相关:

(从.map 文件中)

.const 0 00088000 000007ac
00088000 00000457 (.const:.string)
00088457 00000001 --孔--[填充= 0]
00088458 0000009c driverlib.lib:flash.obj (.const:.string)
000884f4 0000009b:epwm.obj (.const:.string)
0008858f 00000001 --孔--[填充= 0]
00088590 0000009b:gpio.obj (.const:.string)
0008862b 00000001 --孔--[填充= 0]
0008862c 0000009b:sysctl.obj (.const:.string)
000886c7 00000001 --孔--[填充= 0]
000886c8 00000098:sci.obj (.const:.string)
00088760 0000004c:adc.obj (.const:.string)

但是、当我更改 xxx_flash_lnk.cmd 文件以将该段放置在.text 段之后(在32K 内)时、问题就会消失。

换句话说、该器件的行为就好像它只有32K 的闪存、而不是实际的64K 闪存一样。

如何访问另一个32K、为什么加载器无法按照链接器输出的指令写入上部64K?

谢谢您、

-Sergio

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

    您好 Sergio、  

    请检查内存分配工具并确定内存的分配。 您还可以查看生成的.map 文件、其中将包含使用的存储器段的详细信息。

    谢谢

    Aswin

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

    这是我没有重定位.const 时的错误(即将其保留在 FLASH_BANK0_SEC_32_39以使用32K 以上的闪存)

    loader:程序的一个或多个段落在不可写的存储器区域中。 这些区域实际上不会写入目标。 检查链接器配置和/或存储器映射。
    文件加载程序:验证失败:地址0x088000@程序不匹配(预期:0x0025、Actual:0xFFFF)请验证目标存储器和存储器映射。
    GEL:文件:C:\Users\Sergi\AppData\Local\Temp\ti_cloud_storage\monsoon_project.out:发生数据验证错误、文件加载失败。

    下面是内存分配工具:

    这是当我将其更改为 FLASH_BANK0_SEC_24_31时的存储器分配显示(无错误)

    顺便说一下、我在两个不同的电路板上使用相同的结果进行了尝试。

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

    Sergio、  

    您是否可以尝试使用我们 SDK 中的链接器 cmd 文件并重新构建工程、也可以在工程中提供链接器 cmd 文件?  

    C:\ti\c2000\C2000Ware_5_04_00_00\device_support\f280013x\common\cmd\280013x_generic_flash_lnk_noLS1_noM1.cmd

    谢谢

    Aswin

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

    Aswin、使用了 SDK 附带的链接器命令文件:

    MEMORY
    {
       BEGIN            : origin = 0x00080000, length = 0x00000002
       BOOT_RSVD        : origin = 0x00000002, length = 0x00000126
    
       RAMM0            : origin = 0x00000128, length = 0x000002D8
       RAMM1            : origin = 0x00000400, length = 0x000003F8
       // RAMM1_RSVD       : origin = 0x000007F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
       RAMLS0           : origin = 0x00008000, length = 0x00002000
       RAMLS1           : origin = 0x0000A000, length = 0x00001FF8
       // RAMLS1_RSVD      : origin = 0x0000BFF8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
       RESET            : origin = 0x003FFFC0, length = 0x00000002
    
       /* Flash sectors */
       FLASH_BANK0_SEC_0_7     : origin = 0x080002, length = 0x1FFE  /* on-chip Flash */
       FLASH_BANK0_SEC_8_15    : origin = 0x082000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_16_23   : origin = 0x084000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_24_31   : origin = 0x086000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_32_39   : origin = 0x088000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_40_47   : origin = 0x08A000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_48_55   : origin = 0x08C000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_56_63   : origin = 0x08E000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_64_71   : origin = 0x090000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_72_79   : origin = 0x092000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_80_87   : origin = 0x094000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_88_95   : origin = 0x096000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_96_103  : origin = 0x098000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_104_111 : origin = 0x09A000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_112_119 : origin = 0x09C000, length = 0x2000  /* on-chip Flash */
       FLASH_BANK0_SEC_120_127 : origin = 0x09E000, length = 0x1FF0  /* on-chip Flash */
    
       // FLASH_BANK0_SEC_127_RSVD : origin = 0x0A0FF0, length = 0x0010  /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    }
    
    SECTIONS
    {
       codestart        : > BEGIN
    
       .text            : >> FLASH_BANK0_SEC_8_15 | FLASH_BANK0_SEC_16_23 | FLASH_BANK0_SEC_24_31, ALIGN(8)
    
       .cinit           : > FLASH_BANK0_SEC_0_7, ALIGN(8)
       .switch          : > FLASH_BANK0_SEC_0_7, ALIGN(8)
    
       .reset           : > RESET,  TYPE = DSECT /* not used, */
    
       .stack           : > RAMM1
    
    #if defined(__TI_EABI__)
       .bss             : > RAMLS0
       .bss:output      : > RAMLS0
       .init_array      : >> FLASH_BANK0_SEC_0_7, ALIGN(8)
       .const           : >> FLASH_BANK0_SEC_32_39, ALIGN(8)
       .data            : > RAMLS0
       .sysmem          : > RAMLS0
      .bss:cio          : > RAMLS0
    #else
       .pinit           : >> FLASH_BANK0_SEC_0_7, ALIGN(8)
       .ebss            : > RAMLS0
       .econst          : >> FLASH_BANK0_SEC_32_39, ALIGN(8)
       .esysmem         : > RAMLS0
       .cio             : > RAMLS0
    #endif
    
    #if defined(__TI_EABI__)
       .TI.ramfunc      : LOAD = FLASH_BANK0_SEC_0_7,
                          RUN = RAMLS0,
                          LOAD_START(RamfuncsLoadStart),
                          LOAD_SIZE(RamfuncsLoadSize),
                          LOAD_END(RamfuncsLoadEnd),
                          RUN_START(RamfuncsRunStart),
                          RUN_SIZE(RamfuncsRunSize),
                          RUN_END(RamfuncsRunEnd),
                          ALIGN(8)
    #else
       .TI.ramfunc      : LOAD = FLASH_BANK0_SEC_0_7,
                          RUN = RAMLS0,
                          LOAD_START(_RamfuncsLoadStart),
                          LOAD_SIZE(_RamfuncsLoadSize),
                          LOAD_END(_RamfuncsLoadEnd),
                          RUN_START(_RamfuncsRunStart),
                          RUN_SIZE(_RamfuncsRunSize),
                          RUN_END(_RamfuncsRunEnd),
                          ALIGN(8)
    #endif
    
        /*  Allocate IQ math areas: */
       IQmath           : > FLASH_BANK0_SEC_32_39, ALIGN(8)
       IQmathTables     : > FLASH_BANK0_SEC_32_39, ALIGN(8)
    }
    

    但是、它并不起作用、因此我必须像前面提到的那样修改.const 段。

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

    您好 Sergio、

    您使用的是哪个 CCS 和 SDK 版本?

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

    塞尔吉奥是在办公室之外,直到5/22,但我可以回答这个问题。

    我们使用 CCS 20.0.2  

    SDK 为 C2000Ware 5.04

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

    您好、Eric、

    是否可以用 zip 格式共享该示例以进行进一步分析?

    谢谢

    Aswin

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

    我会发送电子邮件给我们的销售代表。 谢谢!