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.

[参考译文] TMS320F28069:如何使用 TMS320F2806x 闪存 API 对闪存进行编程?

Guru**** 2536070 points
Other Parts Discussed in Thread: TMS320F28069, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/747262/tms320f28069-how-to-use-tms320f2806x-flash-api-to-program-the-flash

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

尊敬的先生:

有关编程闪存功能、请参阅以下定义:

UINT16 Flash_Program (UINT16 * FlashAddr、UINT16 * BufAddr、UINT32长度、FLASH_ST * FProgStatus)

起始地址的大小为16位、但 TMS320F28069的闪存空间为128k 字。

扇区 A:0x3F4000 ~ 0x3F7FFF

扇区 B:0x3F0000 ~ 0x3F3FFF

扇区 C:0x3EC000 ~ 0x3EFFFF

扇区 D:0x3E8000 ~ 0x3EBFFF

扇区 E:0x3E4000 ~ 0x3E7FFF

扇区 F:0x3E0000 ~ 0x3E3FFF

扇区 G:0x3DC000 ~ 0x3DFFFF

扇区 H:0x3D8000 ~ 0x3DBFFF

我的问题是如何通过16位起始地址对这些扇区进行编程?

此致、

Johnson

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

    您是否了解了以下示例代码:
    C:\ti\c2000Ware_1_00_05_00\device_support\f2806x\examples\c28\flash_programming

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

    是的、我是这样做的。

    请参阅以下示例代码。

    typedef 结构{
    uint16 * StartAddr;
    uint16 * EndAddr;
    }扇区;

    扇区 sector[8]={
    (uint16 *) 0x3D8000、(uint16 *) 0x3DBFFF、
    (uint16 *) 0x3DC000、(uint16 *) 0x3DFFFF、
    (uint16 *) 0x3E0000、(uint16 *) 0x3E3FFF、
    (uint16 *) 0x3E4000、(uint16 *) 0x3E7FFF、
    (uint16 *) 0x3E8000、(uint16 *) 0x3EBFFF、
    (uint16 *) 0x3EC000、(uint16 *) 0x3EFFFF、
    (uint16 *) 0x3F0000、(uint16 *) 0x3F3FFF、
    (uint16 *) 0x3F4000、(uint16 *) 0x3F7FFF、
    };

    Flash_ptr =扇区[1].StartAddr;
    长度= 0x100;
    状态= Flash_Program (Flash_PTR、Buffer、Length、&FlashStatus);

    我不知道如何通过16位 Flash_ptr 来处理这些闪存空间。
    当高字被修整时、扇区[1]和扇区[5]将是相同的。
    扇区[1]=(UINT16 *) 0x3DC000、它将为0xC0000
    扇区[5]=(uint16 *) 0x3EC000、它将为0xC0000

    是否可以通过 Flash_Program 函数正确编程这些扇区?

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

    您可以正确使用 Flash_Program 进行编程。

    (uint16 *) 0x3DC000表示从32位地址访问16位字。

    我觉得您可能已经将扇区[1]=(UINT16 *) 0x3DC000视为扇区[1]=(UINT16) 0x3DC000。

    请检查。

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

    是的、Flash_Program 函数可用于对整个扇区进行编程。 主要的限制来自缓冲区大小、这实际上取决于 RAM 的可用性。

    请在 C2000Ware 中查看以下项目。 此示例将引导您了解如何使用闪存 API 函数。

    \libraries\flash_api\f2806x\example_Flash2806X_API

    此致、
    曼诺伊