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.

[参考译文] TMS320F280049C:闪存 EEPROM 仿真配置

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1276858/tms320f280049c-flash-eeprom-emulation-configuration

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

您好!

我目前正在尝试将 C2000器件中闪存存储体的一个未使用扇区用于 EEPROM 仿真。 在研究这一点时、我收到了一个文档(SPRAB69A)、其中概述了对较旧的第2代器件的类似实现。

我打算使用最新的闪存 API 来修改该框架。 但是、在应用程序中运行此代码时遇到了持久的问题。 我一直收到错误消息"无法在此地址找到源文件。"

此外、当我尝试在代码中包含"Fapi_setActiveFlashBank"函数时、我遇到另一个错误:"#10099-D 程序将无法装入可用内存中、或者该段包含一个需要 trampoline 但无法为此段生成的调用站点。 对"Group_1"大小为0x933的段0进行对齐/分块运行放置失败。 可用内存范围:"

我附上了我的代码供您参考。

感谢您的帮助。

链接器代码:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MEMORY
{
PAGE 0 :
RAMM0 : origin = 0x0000F5, length = 0x00030B
RAMLS0 : origin = 0x008000, length = 0x000800
RAMLS1 : origin = 0x008800, length = 0x000800
RAMLS2 : origin = 0x009000, length = 0x000800
RAMLS3 : origin = 0x009800, length = 0x000800
RAMLS4 : origin = 0x00A000, length = 0x000800
RESET : origin = 0x3FFFC0, length = 0x000002
#ifdef __TI_COMPILER_VERSION__
#if __TI_COMPILER_VERSION__ >= 20012000
GROUP { /* GROUP memory ranges for crc/checksum of entire flash */
#endif
#endif
/* BEGIN is used for the "boot to Flash" bootloader mode */
BEGIN : origin = 0x080000, length = 0x000002
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

头文件:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//############################################################################
//
// FILE: F280xx_EEPROM.h
//
// TITLE: Function Prototypes, Global Variables, Pointer Initialization
// and, Bank/Page Status Definitions
//
//############################################################################
// Authors: Tim Love / Pradeep Shinde
// Release Date: Sep 2009
//############################################################################
#include <F021_F28004x_C28x.h>
// Project specific defines
//#define SINGLE_BYTE 1
#define MULTI_BYTE 1
//Just for flash
#define FLASH_SECTOR 0x090000
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

源文件:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//############################################################################
//
// FILE: F280xx_EEPROM.c
//
// TITLE: EEPROM Read, Write, and Erase Functions
//
//############################################################################
// Authors: Tim Love / Pradeep Shinde
// Release Date: Sep 2009
//############################################################################
#include "F280xx_EEPROM.h" // EEPROM Include File
// Global Variables
uint16 Read_Buffer[64];
uint16 Write_Buffer[64];
uint16 Bank_Counter = 0;
uint16 Page_Counter = 0;
uint16 Bank_Status[1] = {0};
uint16 Page_Status[1] = {0};
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好!

    每当您进入闪存 API 库函数时、CCS 都会向您显示 "无法在此地址找到源文件"。 消息、因为闪存 API 源不可供其显示-这不是问题。  您可以忽略此警告。

    关于链接器错误: 只是说、为该输出段分配的存储器是不够的。  尝试合并几个存储器范围(以便适合该段)并将该段映射到新的大存储器范围。   

    另请注意、我们计划在即将发布的 C2000Ware 版本中发布 EEPROM 示例(针对 F28P65x 器件-但您应该能够针对 F28004x 轻松对其进行编辑)。

    谢谢。此致、

    瓦姆西

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

    尊敬的 Vamsi:

    以下是我立即尝试运行代码时收到的提示消息:C:/Users\...\Debug\project.out:{3}0x3fbd92{4}中没有"_system_post_cinit ()"的源可用  

    0x3fbd92{4}地址恰好位于引导 ROM 中。

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

    此外、该代码会在没有 "Fapi_setActiveFlashBank"函数的情况下构建、但在图片中、它将生成所描述的错误消息。

    谢谢。此致、

    阿洛巴。

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

    您好!

    有关引导 ROM 中登录执行错误的说明:如 TRM 的表 4-15所示。 等待点地址、地址0x3fbd92属于 ITRAP ISR。  

    这意味着 CPU 执行了一个非法指令。  在调用映射到.TI.ramfunc 段的任何函数之前、请检查是否执行了 memcpy ()。

    对于链接器错误、请遵循我之前提供的建议。

    谢谢。此致、

    瓦姆西

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

    尊敬的 Vamsi:

    感谢您的答复。 我已经尝试实施您的建议来解决链接器错误、但遗憾的是、仍然存在。

    关于`memcpy ()`函数,它不会在我的代码中的任何点执行,因为我不确定源或目的。

    请看一下我共享的命令文件吗? 您的建议将会非常有帮助。

    谢谢、此致、

    阿洛巴

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

    Atoba,

    请查看此常见问题解答一次:  

    如何将应用程序从 RAM 配置修改为闪存配置?: https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/878674 

    此外、您可以看看任何 C2000Ware 示例-它们应该具有闪存构建配置(如上面的常见问题解答中所述)。 您可以单步执行并了解常见问题解答中介绍的过程。

    谢谢。此致、

    瓦姆西

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

    至于链接器命令文件:您能展示您在链接器命令文件中所做的操作(您说的此操作无助于消除错误)吗?

    谢谢。此致、

    瓦姆西

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

    尊敬的 Vamsi:

    以下是我对链接器命令文件所做的修改:

    从这里:

     

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    GROUP
    {
    .TI.ramfunc
    { -l F021_API_F28004x_FPU32.lib}
    }
    LOAD = FLASH_BANK0_SEC9 | FLASH_BANK0_SEC10 | FLASH_BANK0_SEC13,
    RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    为此、请执行以下操作:  

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    GROUP
    {
    .TI.ramfunc
    { -l F021_API_F28004x_FPU32.lib}
    }
    LOAD = FLASH_BANK0_SEC7 | FLASH_BANK0_SEC8 | FLASH_BANK0_SEC9 | FLASH_BANK0_SEC10 | FLASH_BANK0_SEC13,
    RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    谢谢。

    阿洛巴。

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

    您好!

    您可以将几个存储器合并到一个存储器范围中并尝试、而不是使用存储器?

    示例:

    从这里:

    FLASH_A:origin = 0x90000、length = 0x1000

    FLASH_B:origin = 0xA0000、length = 0x1000

    为此、请执行以下操作:

    FLASH_AB:origin = 0x90000、length = 0x2000

    并使用合并的存储器范围。

    请告诉我们这是否有帮助。

    谢谢。此致、

    瓦姆西  

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

    您好!  

    由于我没有收到您的回复、因此我将关闭此帖子、前提是我的最后一次回复帮助您解决了此问题。

    如果您仍有其他问题、可以根据需要打开新帖子。

    谢谢。此致、

    瓦姆西