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.

[参考译文] CCS/TMS320F280049:在 RAM 上查找 TI 闪存 API 时的独立问题

Guru**** 2587365 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/711542/ccs-tms320f280049-stand-alone-issue-when-locating-ti-flash-api-on-ram

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

工具/软件:Code Composer Studio

 您好!  

   在尝试在 RAM 中找到 TI 闪存 API (从闪存复制到 RAM)时遇到问题。 这是我的链接器文件:

存储器

第0页: /*引导加载程序闪存代码*/

开始           :origin = 0x080000、length = 0x000002
BOOT_VERSION   :origin = 0x080002,length = 0x000002
引导加载程序    :origin = 0x080004,length = 0x001FFC

第1页: /*数据空间*/

数据 RAM      :origin = 0x008000、length = 0x001000
CODERAM        :origin = 0x009000,length = 0x001000

第2页:  /* CRC 保护的数据空间*/

RAMM0           :origin = 0x0000F5,length = 0x00030B
RAMM1           :origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *

第3页: /*受保护的 RAM 数据空间*/

RAMGS0       :origin = 0x00C000、length = 0x002000
RAMGS1       :origin = 0x00E000、length = 0x002000
RAMGS2       :origin = 0x010000、length = 0x002000
RAMGS3       :origin = 0x012000,length = 0x002000

第4页:

复位           :origin = 0x3FFFC0,length = 0x000002

部分

 codestart    :load=begin、page = 0、align (2)

 BootVersion   :load=boot_version,page = 0,align (2)

 .text         :load=bootloader, page = 0,align(4)
 .cinit        :>引导加载程序,    页= 0,align(4)
 .pinit        :>引导加载程序,    页= 0,align(4)
 切换       :>引导加载程序,    页= 0,align(4)
 .econst      :{*(.econst)} load= bootloader, page = 0,align (4)

 第    {
        .TI.ramfunc
    /*{-l F021_API_F28004x_FPU32.lib}*
      }
       load = bootloader、page = 0、
       运行= CODERAM、页= 1、
       load_start (_RamfuncsLoadStart)、
       load_size (_RamfuncsLoadSize)、
       load_end (_RamfuncsLoadEnd)、
       run_start (_RamfuncsRunStart)、
       run_size (_RamfuncsRunSize)、
       run_end (_RamfuncsRunEnd)


 .cio       :> DataRAM,    page = 1.
 ebss      :{*(.ebss)}> DataRAM、    page = 1
 .esysmem :> DataRAM,    page = 1.

 堆栈     :> RAMM1,      PAGE = 2

 复位     :>重置,      页= 4,类型= DSECT /*未使用,*/

 RAMS0  :>RAMGS0,   PAGE = 3
 ramgs1  :>RAMGS1,   page = 3.

 如果 对 GROUP 中的第{-l F021_API_F28004x_FPU32.lib}行进行了注释、则应用程序会在调试会话中链接并运行正常、并且是独立的。  

 如果 未对 GROUP 中的第{-l F021_API_F28004x_FPU32.lib}行进行注释、则应用程序链接也正常、但仅在调试时运行(在该操作中、我验证了函数已良好地复制到 RAM、并且应用程序从第一个代码开始开始运行良好)。 独立运行时、它会挂起。 我不太擅长在运行应用程序时进行调试、也许您可以帮我解决问题。 我试图遵循其他职位程序、但没有取得很大成功。

 我使用 TI controlCARD 开发板来测试应用。

 有什么想法吗?   在此、我们向您表示感谢。

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

    如果您对其进行注释、闪存 API 将加载到闪存中、并且也会从闪存中执行。 闪存 API 可从一个组执行以在另一个组上执行擦除/编程操作。 您不应尝试擦除/编程执行闪存 API 的组。 希望您了解这一点。

    在进一步调试您的问题之前、我有几个问题:
    1) 1)为什么在第1页空间中分配 CODERAM? 请将其放入第0页(代码空间)
    2) 2)为什么选择第2、3和4页? 您可以在 PAGE 0 (代码)或 PAGE 1 (数据)中定义存储器。

    请检查 ti\c2000\C2000Ware_1_00_05_00\device_support\f28004x\con\cmd 中提供的28004x_flash_api_lnk.cmd。

    谢谢、此致、
    Vamsi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vamsi 您好、首先感谢您的回复! 我以此方式拆分链接器、因为我更清楚地看到这些页面、很抱歉、我按照您的建议重新分配页面。 关于闪存操作、是的、我知道这一点、但由于这是一个引导加载程序、它可能会在任何组上执行写入操作、具体取决于所加载的应用、这就是我尝试在 RAM 上找到 API 的原因。 这里是我现在使用的链接器文件(同样的问题、我刚刚重试):

    存储器


    第0页:/* Bootloader 代码*/
    开始:origin = 0x080000、length = 0x000002
    BOOT_VERSION:origin = 0x080002,length = 0x000002
    引导加载程序 :origin = 0x080004,length = 0x001FFC

    CODERAM:origin = 0x009000,length = 0x001000

    复位:origin = 0x3FFFC0,length = 0x000002


    第1页:/*数据空间*/

    数据 RAM:origin = 0x008000、length = 0x001000

    RAMM0:origin = 0x0000F5,length = 0x00030B
    RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *

    RAMGS0:origin = 0x00C000、length = 0x002000
    RAMGS1:origin = 0x00E000、length = 0x002000
    RAMGS2:origin = 0x010000,length = 0x002000
    RAMGS3:origin = 0x012000、length = 0x002000



    部分


    codestart:load=begin、page = 0、align (2)

    BootVersion:load=boot_version,page = 0,align (2)

    .text:load=bootloader,page = 0,align(4)
    .cinit:>引导加载程序, PAGE = 0、ALIGN (4)
    .pinit:>引导加载程序, PAGE = 0、ALIGN (4)
    切换:>引导加载程序, PAGE = 0、ALIGN (4)
    .econst:{*(.econst)}load= bootloader,page = 0,align (4)

    第{
    .TI.ramfunc
    {-l F021_API_F28004x_FPU32.lib}

    load = bootloader、page = 0、
    运行= CODERAM、页= 0、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)

    .cio:> DataRAM,page = 1.
    .ebss:{*(.ebss)}> DataRAM、page = 1.
    .esysmem:> DataRAM,page = 1.

    .stack:> RAMM1,PAGE = 1.

    .reset:>重置,PAGE = 0、TYPE = DSECT /*未使用、*/

    RAMS0:>RAMGS0,PAGE = 1
    ramgs1:>RAMGS1,page = 1.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vamsi 您好,我只是想报告我发现了这个问题,这是一个愚蠢的问题:)由于 Flash_API 的大小接近2K,到 RAM 的复制过程需要更长的时间,而默认启用的看门狗会不断重置 uC, 我在第一个代码启动分支上禁用了它。 很抱歉打扰您、感谢您的支持!!