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.

[参考译文] TMS320F280025C:我的自定义数据、不写入闪存

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1170780/tms320f280025c-my-customized-data-not-writing-in-flash

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

大家好、

客户提出的问题需要您的帮助:

/cmd 声明:

FLASH_BANK0_SEC8 :origin = 0x088000、length = 0x001000  //片上闪存*

FlashScopeRegsFile         :> FLASH_BANK0_SEC8,type=NOINIT

//数据段和结构声明  

#pragma DATA_SECTION (范围寄存器、"FlashScopeRegsFile");
Volatile FlashScopeRegs_S 范围寄存器;

typedef 结构 FlashScopeRegs_S

CalibDataXYZW_S calib;
字符亮度;
LON_INT 温度;
} FlashScopeRegs_S;

FlashScopeRegs_S A;

A.温度=37;  

写入后的值为-1并且闪存不成功。

您可以帮助检查此案例吗? 谢谢。

此致、

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

    我认为写入闪存比写入闪存要复杂得多。 通常、首先需要在扇区中擦除闪存、然后在较小的块中编程、例如128字节。

    TI 提供了一个用于闪存管理的 API。 以下是适用于您的器件的文档:

    https://www.ti.com/lit/ug/spnu631/spnu631.pdf

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

    实际上、我找到了一个更有用的文档、适用于您的用例:EEPROM 仿真:

    https://www.ti.com/lit/an/sprab69a/sprab69a.pdf

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

    Kier 是正确的:为了写入闪存、您需要使用闪存 API 对其进行编程或根据需要擦除。 通常、闪存 API 的工作方式是、您向其发出命令(编程、擦除、验证)、然后轮询该命令以了解命令何时完成、因为这些操作是非 CPU 阻塞。

    如果执行 EEPROM 仿真类型操作(即使用闪存来存储数据而不是代码)、还必须注意以下几点:

    • 编程和擦除操作比 SRAM 访问操作花费的时间要多得多。 具体而言、擦除时间可能会有很大的差异、并且随着总擦除计数的增加而增加(擦除脉冲计数随着擦除周期数的累积而逐渐增加)。 如果您的写入/擦除操作存在时序限制、您应该考虑重构代码以在 RAM 中执行这些操作;并从更长期的数据存储角度更好地考虑闪存。 闪存写入/擦除时序在器件数据表中指定。
    • 您可以在任何闪存上总共执行多少个写入/擦除周期存在限制。 这在器件数据表中指定;除了这些限制之外、不能保证闪存的性能/可靠性。

    此致、
    Ibukun

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

    Kier 和 Ibukun、大家好、

    谢谢 Kier 和 Ibukun。  

    但是、为什么可以读取或写入寄存器、它的声明是相同的。

    然后我下载了 Flash2833x_API_Config.h 内的代码包 、这些 API 是否不是通用于不同的处理器? 通常使用 I2C 的外部 EEPROM?

    此致、

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

    我不完全理解您的问题、但是...

    [引用 userid="534511" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1170780/tms320f280025c-my-customized-data-not-writing-in-flash/4406896 #4406896"]但为什么可以读取或写入该寄存器

    您的示例代码中没有寄存器。 FlashScopeRegsFile 是一个误导性名称、它不是一个寄存器、而只是一个闪存存储器中的地址。 您正在尝试读取(成功)和写入(不成功)到闪存扇区的开头。 这取决于处理器在闪存不可写时尝试写入闪存时发生的情况。 在 C28x 的情况下、尝试会被忽略。

    [引用 userid="534511" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1170780/tms320f280025c-my-customized-data-not-writing-in-flash/4406896 #4406896"] Flash2833x_API_Config.h[/quot]

    这是您的设备的错误文件。 我认为您需要查看以下文件:

    C:\ti\c2000\C2000Ware_4_02_00_00\libraries\flash_API

    [引用 userid="534511" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1170780/tms320f280025c-my-customized-data-not-writing-in-flash/4406896 #4406896"]通过 I2C 使用外部 EEPROM 会更常见吗?

    我想您正在问、通过 I2C 使用外部 EEPROM 是否更容易。 是的、如果您只有几个 KB 的存储空间、这将是我的选择。 这里有几个 EEPROM 示例:

    C:\ti\c2000\C2000Ware_4_02_00_00\driverlib\f28002x\examples\i2c

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

    您好 Kier、

    特定于有关 Flash2833x_API_Config.h 的问题、它用于不同的器件生成、不适用于 F28002x。 TI 发布特定于每个器件的软件支持包、因此请确保您已下载最新的 C2000ware 软件包、并且正在使用该软件包内 F28002x 目录中的头文件/库。

    在 C2000Ware_4_xx_xx_xx\driverlib\f28002x\examples\flash 目录中、您将找到使用闪存 API 对器件闪存进行编程和擦除的 CCS 项目示例。

    此致、
    Ibukun