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.

[参考译文] TMS320F28P650DK:EEPROM 仿真

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1522863/tms320f28p650dk-eeprom-emulation

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

工具/软件:

您好:

我对 EEPROM 仿真库[www.ti.com/.../sprade8a.pdf 有疑问

1.例如:如果我们有一组要写入 EEPROM 的变量 — VAR1-Varn、是否可以通过指定 VAR2 的地址来检索 VAR2?
   Eeprom_Read () 函数读取上次备份的数据。


2.我们的用例要求我们将一组值备份到 EEPROM 中,并在启动时回读和恢复它们。

3.此外、必须能够不按顺序读取或更新现有的 EEPROM 条目。 根据上述示例、在编写 VAR1-N 后、我们希望更新 Var5、例如。

对于 EEPROM 仿真库、上述要求是否可行?

谢谢

Jay

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

    您好:

    我已经邀请了团队的专家、他们应该在接下来的 1-2 天内回复您。

    此致、

    Delaney

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

    尊敬的 Jay:

    1.不可以、EEPROM_Read 函数将读取整个最近一页的数据。 若要读取特定变量、请调用此函数、然后索引到读取缓冲区中以检索该值。

    2.这是可以做到的。 这些值存储在闪存中、将在下电上电过程中持续存在。

    3.这是可能的,但整个数据页必须传递给 eeprom_Write() 函数。 要更新一个特定的值,你可以使用 eeprom_read() 将最新的页面读入一个缓冲区,更新所需的变量,然后使用 eeprom_Write() 将缓冲区写入闪存。

    此致、

    Alex

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

    您好 Alex、

    是否有任何具有上述功能的 EEPROM 培训材料或代码?
    我来说明一下我们的用例和我遇到的一些问题。

    1.我们需要能够将数据写入 EEPROM、每个条目对应一个自变量。 变量的总数可以跨越多个 EEPROM 页面。

    2.每次启动时,我们应该能够检索 EEPROM 中的所有条目,并将它们备份到应用程序使用的 ram 变量。

    3.我们需要能够修改特定的 EEPROM 条目。

    a.例如:假设我们有 50 个 EEPROM 条目、前 20 个位于第 0 页、第二 30 页、位于第 1 页。 我们应该能够修改条目 18 和条目 40。 以上要求我们:

    • 阅读第 0 页以修改条目 18 并将其写回。

    • 阅读第 1 页以修改条目 40 并将其写回。

    谢谢

    Jay

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

    Jay、

    应用手册和示例是有关该器件的 EEPROM 仿真的唯一材料。

    此示例中的每个页面都是一个已满 EEPROM 单元的实例。 页面和组用于为闪存建立索引并跟踪当前/最新的 EEPROM 单元/数据、即您不能在两个 EEPROM 页面之间拆分数据。

    在此示例中、可以读取和写入多个变量、但您必须使用 EEPROM_Read(或直接提供地址)和 EEPROM_Write。

    此致、

    Alex

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

    您好 Alex、

    如果我可以请我跳到这里 — 因为我已经与客户进行了离线沟通:

    他们很高兴再次解释他们的要求,试图找到解决这个调查.

    下面是:

    “我们还无法清楚地了解 EEPROM 仿真软件提供的 API。 因此、我们可能对功能有误解。

     

    • 以下是我们的关键要求:
    • 我们可以得到【不同大小】任意数量的 EEPROM 变量。
      • 如果我们应该限制条目数量、我们想知道、我们可能会这样做。
    • 写入一组初始 EEPROM 变量后、乱序读取和更新访问权限
      • 例如:如果我们有 100 个 EEPROM 变量、我们应该能够读取条目编号 20 并修改条目编号 80
      • 我不知道底层 EEPROM 页面结构在这方面有哪些限制
    • 能够附加到 EEPROM 变量列表。
      • 如上所示:如果我们有 100 个 EEPROM 变量、我们应该能够向 EEPROM 再添加 10 个新变量。

     

    我们应该使用哪些 API 来实现上述目的?

    由于闪存是底层存储、因此即使只有一个条目、也应擦除和更新整个扇区。 我们可以适应这种情况。 此外、我们还将添加欠压检测功能以避免数据丢失。

     

    EEPROM 仿真是否旨在替换 EEPROM? 我认为我们上面概述的是 EEPROM 的典型用法。

     

    如果有上述用例的现有示例、我们可以先从这些示例开始。

    欢迎您的评论和意见!

    CY、
    CY

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

    在我们等待额外输入的同时、我确实找到了示例工程(它旨在尽可能模拟硬件 EEPROM):

     F28P65 演示位于:

    C:\ti\c2000\C2000Ware_5_02_00_00\driverlib\f28p65x\examples\c28x\flash

    此致、

    Chris

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

    您好:

    我们可以拥有任意数量的【不同大小】EEPROM 变量。
    • 如果我们应该限制条目数量、我们想知道、我们可能会这样做
    [/报价]

    必须事先知道要存储的变量的数量/数据的总大小。 使用 EEPROM_Config.h 中的 DATA_SIZE 宏来设置 EEPROM 大小

    此 EEPROM 实现方案假设所有变量的大小相同。

    如果需要变量大小、则需要跟踪数据在页面中的结构/每个变量的大小。 eeprom_read() 将页面中的所有数据读入数据缓冲区/数组 — 从那里你可以用类型化指针提取不同大小的变量。

    写入初始一组 EEPROM 变量后、按顺序读取和更新访问权限
    • 例如:如果我们有 100 个 EEPROM 变量、我们应该能够读取条目编号 20 并修改条目编号 80
    • 我不知道底层 EEPROM 页面结构在这方面有哪些限制
    [/报价]

    eeprom_read() API 会将所有最新的 EEPROM 数据读入数据缓冲区/数组。 在这里,要访问一个特定的变量,数组的索引类似于: int x = data_buffer[19]。

    要更新 EEPROM 变量,请在数据缓冲区中修改它们,然后调用 eeprom_Write ()。

    每次调用这些函数时、都会读取/写入所有 EEPROM 数据、因为每个 EEPROM 页面最初都是空白的/处于已擦除状态。

    能够附加到 EEPROM 变量列表。
    • 如上所示:如果我们有 100 个 EEPROM 变量、我们应该能够向 EEPROM 再添加 10 个新变量。
    [/报价]

    使用 EEPROM_Config.h 中的#define DATA_SIZE 宏来设置 EEPROM 大小 因此、它是不可更改的、应始终设置为 EEPROM 的最大预期大小。 不支持在运行时分配更多空间。

    此致、

    Alex

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

    您好 Alex、

    这里有很多义务、非常多!

    我已将所有这些反馈发送给客户、并等待他们的反馈。

    老实说、我们应该很快就能解决这个问题。

    再次感谢您、

    Chris

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

    Alex、

    实际上、最后一个说明、如果我可以的话:

    eeprom_read() API 会将所有最新的 EEPROM 数据读入数据缓冲区/数组。 在这里,要访问一个特定的变量,数组的索引类似于: int x = data_buffer[19]。

    根据上述说明、仿真软件只有一个可能的活动 EEPROM 页面? 我认为情况就是这样、因为没有使用类似 eeprom_read (page_num) 的 API 读取较旧页面的配置。

     如果是这种情况、这个单个 EEPROM 页面可以有多大?  可以在 EEPROM_Config.h 中设置的值是否有上限?

    THX、
    Chris

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

    您好、Chris、

    仿真软件只能有一个活动的 EEPROM 页面?

    是的、正确。 一种理解是每个页面都是 EEPROM 数据的一个“迭代“。

    这个单个 EEPROM 页面可以有多大?  可以在 eeprom_Config.h 中设置的值是否有上限?

    但是、最大大小将是为仿真分配了许多扇区(组状态位+页状态位)。 它也不能大于闪存存储体。

    此致、

    Alex

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

    Alex 和 All、

    已解决!  谢谢你。

    -克里斯