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: 我自定义的数据,写不进FLASH,求问一下前辈和TI技术专家。

Part Number: TMS320F280025C
Other Parts Discussed in Thread: C2000WARE

//cmd文件声明 :

FLASH_BANK0_SEC8  : origin = 0x088000, length = 0x001000 /* on-chip Flash */

FlashScopeRegsFile               : > FLASH_BANK0_SEC8, type=NOINIT

//数据段与结构体声明

#pragma DATA_SECTION(scopeRegs,"FlashScopeRegsFile");
volatile FlashScopeRegs_S scopeRegs;

typedef struct FlashScopeRegs_S
{
//存储的标定值
CalibDataXYZW_S calib;
CHAR brightness;
LONG_INT temperature;
}FlashScopeRegs_S;

FlashScopeRegs_S a;

a.temperature = 37; 写完后值还是-1,FLASH没有成功

  • 你好,感谢您对TI产品的关注!为更加有效地解决您的问题,由于问题比较复杂,我需要询问更了解这款芯片的TI资深工程师,再为您解答,一旦得到回复会立即回复给您。

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

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

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

    您也可以参考一下下面的文档,可能更适合您的需求:

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

  • 那寄存器为什么可以读写呢,它也是这样声明的

  • 我下了里面的代码包,Flash2833x_API_Config.h,这些API是不是不同的处理器不通用,我是不是搞个I2C外接EEPROM要更通用一些?

  • 你好,我不是很理解您的问题但是:

    那寄存器为什么可以读写呢,

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

    Flash2833x_API_Config.h

    对您的器件来说,您应该看看以下文件:

    C:\ti\c2000\C2000Ware_4_02_00_00\libraries\flash_api

    我是不是搞个I2C外接EEPROM要更通用一些

    您应该是想问用I2C外界EEPROM是否更容易,是的,如果您只有几KB去存储的话,这将是我的选择。下面有关于EEPROM的示例:

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

  • 这个太复杂了一点,TI也没提供好的例子和进一步封装的函数,我还是用I2C外接一个EEPROM算了。

    感谢您的耐心回复 !

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

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