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.

[参考译文] TMS320F28388D:使用闪存模拟 EEPROM

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1316015/tms320f28388d-emulating-eeprom-with-the-flash

器件型号:TMS320F28388D
主题中讨论的其他器件: HALCOGENC2000WARE

我开始在  TMS320F28388D 上实现仿真 EEPROM (FEE)、而我仅将  线程作为支持材料。

我计划从 HALCoGen 工具(http://www.ti.com/tool/HALCOGEN)中针对"TMS570LS31x_21x"(Fee_Write_Read)提供的示例开始讲解。

它是正确的起点吗?

另一个问题是我无法在 用户手册中找到内存布局、您有在哪里找到它的指导吗?

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

    H Ahmed,

    我们现在有一个 C2000器件的示例。  请访问 https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1301228/tms320f28379d-eeprom-emulation 

    谢谢。此致、
    瓦姆西

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

    我看到在示例(C:\ti\c2000\C2000Ware_5_01_00\driverlib\f28p65x\examples\C28x\flash)中没有 memmap、同时您尝试将一些段从闪存加载到 RAM 中

    我的问题是,您如何仅挑选这些段进行处理,或者您只需将所有.text 从 FLASH_BANK0复制到 RAMD0中?!

       .TI.ramfunc      : LOAD = FLASH_BANK0,
                          RUN = RAMD0, // Can run in RAM for optimal cycle performance
                          LOAD_START(RamfuncsLoadStart),
                          LOAD_SIZE(RamfuncsLoadSize),
                          LOAD_END(RamfuncsLoadEnd),
                          RUN_START(RamfuncsRunStart),
                          RUN_SIZE(RamfuncsRunSize),
                          RUN_END(RamfuncsRunEnd),
                          ALIGN(8)

    此外、我正在使用 TMS320F28388D、这意味着每个 CPU 都有一个存储体、因此:

    • 使用 F2838x_C28x_FlashAPI 代替了  FAPI_F28P65x_EABI_v3.00.00.lib

    • 数据表表明 MCU 有2个存储体、每个存储体为512KB、我不知道如何定义哪个存储体与哪个 CPU 关联?
      领域
      扇区0 8K x 16 0x00080000 0x00081FFF
      扇区1 8K x 16 0x00082000 0x00083FFF
      扇区2 8K x 16 0x00084000 0x00085FFF
      科3 8K x 16 0x00086000 0x00087FFF
      科4 32公里 x 16 0x00088000 0x0008FFFF
      科5 32公里 x 16 0x00090000 0x00097FFF
      科6 32公里 x 16 0x00098000 0x0009FFFF
      科7 32公里 x 16 0x000A0000 0x000A7FFF
      扇区8 32公里 x 16 0x000A8000 0x000AFFFF
      科9 32公里 x 16 0x000B0000 0x000B7FFF
      科10 8K x 16 0x000B8000 0x000B9FFF
      科11 8K x 16 0x000BA000 0x000BBFFF
      科12 8K x 16 0x000BC000 0x000BDFFF
      科13 8K x 16 0x000BE000 0x000BFFFF
    • 我应该把 emmulations 扇区放在哪里,你怎么看?

    • F2838x_C28x_FlashAPI 应位于 CPU2闪存组中? 还是有不同的策略?

    • 在数据表中、我们提到了两个 C28x CPU 存储器映射是相同的=>这是否意味着它们可以相同的寻址、但在不同的物理存储器位置?


    •  在120MHz 上、外部振荡器的执行等待状态为2。   200MHz 时所需的等待状态是什么?
      我参考了这个示例:(c:\ti\cc2000\C2000Ware_5_01_00_00\driverlib\f2838x\examples\C28x\flash)并将其设为= 3

    • 在 PINO-PONG 示例中、扇区定义中存在重复(文件 flash_programming_f28p65x.h & EEPROM_PROM.451.h) Pong_Config。
      有什么理由吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ahmed、

    1) 1)您能否解释一下示例中未提供的 memmap 是什么意思?  您的意思是问应用的不同部分如何映射到不同的存储器范围?  如果愿意、它会如你所知、出现在连接器命令文件中。   

    2)关于选择段用于 RAM 执行而非闪存执行: 有两种代码需要从 RAM 运行。  

    第一个 是需要从 RAM 运行的配置代码/时间敏感代码(加载到 RAM、但复制到 RAM 以供执行)-示例: (i)闪存只能通过从 RAM 执行的代码进行配置。 (ii)延迟功能、旨在提供可配置延迟。

    第二个是性能关键型代码:当从0等待状态 RAM 而不是大于0等待状态闪存运行时、用户应用程序可能具有性能关键型代码。

    3)每个 CPU 都有一个专用的512KB 内存库。   

    4)仿真扇区:您可以根据应用需求以及应用设计方式来决定相关情况。  如果 CPU1具有需要存储在闪存(作为 EEPROM)中的数据、那么您可以在 CPU1闪存组中分配几个扇区。  或者、如果 CPU1上有一些性能关键型严格控制循环、您可以决定改为考虑 CPU2以将数据存储在其闪存组中(如果适用于您的应用)。   

    5)每个 CPU 的闪存映射: 每个 CPU 都有其专用的闪存组-然而,CPU 之间的地址不是唯一的。  CPU1从 CPU1的0x80000地址开始、是专用的闪存存储体。  另外、 CPU2具有从 CPU2的0x80000地址开始的专用闪存组。  

    6) 6)正如我们在数据表的表7-5闪存等待状态中提到的、闪存在200MHz 时需要3个等待状态。

    7) 7)由于 flash_programming_f28p65x.h 实际上是从闪存编程示例中为其他定义复制的、因此它可能是多余的。  我将请我们的团队  为您确认这一点。

    谢谢。此致、

    瓦姆西