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.

[参考译文] 编译器/TMS570LS1114:如何实现基于 TMS570LS1114的闪存读取和写入数据

Guru**** 2460850 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/652457/compiler-tms570ls1114-how-to-achieve-flash-read-and-write-data-based-on-tms570ls1114

器件型号:TMS570LS1114
主题中讨论的其他器件:HALCOGEN

工具/软件:TI C/C++编译器

您好:

我想对地址 从0x000FE000到0x000FE3E8的闪存进行编程。第一步,我测试 bank0,sector0,但我发现当我操作闪存到步骤时出现错误,就像操作 EEPROM 一样。我打开不匹配的内存刷子 我的写入缓冲器。

主函数如下所示:

int main()

Fapi_initializeFlashBanks (GCLK_FREQ);
Fapi_setActiveFlashBank (Fapi_FlashBank0);
Fapi_enableMainBankSectors (0);//0x0000_0000-0x0000_3FFF sector0

fapi_flash_save (0x00000000、api_flash_save_data、16);
fapi_flash_read (0x00000000、api_flash_read_data、16);

while (1);

uint8 fapi_flash_save (uint32_t * Flash_Start_Adress、uint32_t * Datas_Start_Adress、uint8_t Datas_sizeInBytes)


寄存器 uint32_t esa=Flash_Start_Adress;
寄存器 uint32_t dSA=Data_Start_Adress;
寄存器 uint8_t DSB=Datas_sizeInBytes;
while (Data_SizeInBytes>0)

if (fapi_Status_FsmReady = fapi_checkFsmForReady ())
中断;

fapi_issueProgrammingCommand ((uint32_t*) ESA、(uint8_t*) DSA、DSB、0、0、 Fapi_AutoEccGeneration);
// fapi_doVerifyByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByte (((((uint8_t*) ESA、(uint32_t) DSB、uint32_t DSA、

uint8 fapi_flash_read (uint32_t * Flash_Start_Adress、uint32_t * Datas_Start_Adress、uint8_t Datas_sizeInBytes)

寄存器 uint32_t esa=Flash_Start_Adress;
寄存器 uint32_t dSA=Data_Start_Adress;
寄存器 uint8_t DSB=Datas_sizeInBytes;
while (1)

if (fapi_Status_FsmReady = fapi_checkFsmForReady ())
中断;

Fapi_doMarginReadByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByte(UINT32_t*) ESA、(uint8_t*) DSA、(uint8_t)DSB、Fapi_normalRead);

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

    必须将闪存 API 相关的代码复制到 SRAM 并在 SRAM 中执行。 您不能通过在同一闪存组中执行闪存操作代码来擦除/编程闪存扇区。
    2. fapi_enableMainBankSectors (0):您需要启用扇区13 (0xE0000 ~ 0xFFFFFFF)。 但您只启用了扇区0
    Fapi_flash_save (0x00000000、API_flash_save_data、16):将数据写入0x0而不是0xFE000。 实际上、您无法将数据写入0x0。 该地址用于中断矢量表。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    QJ Wang 您好:

    感谢您的热情响应。

    我读取和写入闪存,基于 F021闪存 API,这使得写入数据正常,但读取时没有数据。 我的步骤是:

    1对 CMD 中的区域进行分频

    2表示要写入数据的区域的除法

    3表示分频区域读取数据

    我已经过测试、发现了三个问题。 第一个问题是我可以写入数据、但数据不正确、我的方法是否 在 处理过程中出错、如何修改? 第二个问题是我昨天移植了闪存、在这个过程中写入了一个新项目、发现有些可以实现闪存数据写入、有些不能实现? 当然、我是基于 HALCogen 生成的代码、写入失败和 halcogen 配置是否相关?

    关于您昨天提到的1、我应该在该计划中做什么?

    您昨天提到的大约2和3已更改。

    存储器

    /*vectors (X):origin=0x00000000 length=0x00000020
    FLASH0 (RX):origin=0x00000020 length=0x000FFFE0
    堆栈(RW):origin=0x08000000 length=0x00001500
    RAM (RW):origin=0x08001500 length=0x0001EB00*/
    引导程序(X):origin=0x00000000 length=0x00000020
    FLASH0 (RX):origin=0x00000020 length=0x000F5FE0
    CAL_ROM (RX):origin=0x000FE000 length=0x000003E8//length=0x00002000
    堆栈(RW):origin=0x08000000 length=0x00001500
    RAM (RW):origin=0x08001501 length=0x0001CFFF
    CAL_RAM (RW):origin=0x0801E500 length=0x00001000

    void fapi_flash_init (void)

    Fapi_initializeFlashBanks (GCLK_FREQ);
    Fapi_setActiveFlashBank (Fapi_FlashBank0);
    Fapi_enableMainBankSecors (0xFFFFFFF);//0x0000_0000-0x0000_3FFF

    uint8 fapi_flash_save (uint32_t * Flash_Start_Adress、uint32_t * Datas_Start_Adress、uint8_t Datas_sizeInBytes)

    uint16 i = 50000;
    寄存器 uint32_t esa=Flash_Start_Adress;
    寄存器 uint32_t dSA=Data_Start_Adress;
    寄存器 uint8_t DSB=Datas_sizeInBytes;
    while (I-)

    if (fapi_Status_FsmReady = fapi_checkFsmForReady ())
    中断;

    fapi_issueProgrammingCommand ((uint32_t*) ESA、(uint8_t*) DSA、DSB、0、0、 Fapi_AutoEccGeneration);

    // fapi_doVerifyByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByte (((((uint8_t*) ESA、(uint32_t) DSB、uint32_t DSA、

    uint8 fapi_flash_read (uint32_t * Flash_Start_Adress、uint32_t * Datas_Start_Adress、uint8_t Datas_sizeInBytes)

    uint16 i = 20000;
    寄存器 uint32_t esa=Flash_Start_Adress;
    寄存器 uint32_t dSA=Data_Start_Adress;
    寄存器 uint8_t DSB=Datas_sizeInBytes;
    while (I-)

    if (fapi_Status_FsmReady = fapi_checkFsmForReady ())
    中断;

    Fapi_doMarginReadByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByte(UINT32_t*) ESA、(uint8_t*) DSA、(uint8_t)DSB、Fapi_normalRead);


    int main (空)

    /*用户代码开始(3)*/
    /********* 2017/12/27***** FAPI 操作闪存
    (三 /
    fapi_flash_init();
    fapi_flash_save (0x000FE100、api_flash_save_data、16);
    Fapi_flash_read (0x000FE200、API_flash_read_data、16);
    while (1);

    我期待着您的重播。

     秋奇

    2017年12月28日

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

    您好、邱

    请参考我的使用闪存 API 的闪存操作示例代码:

    e2e.ti.com/.../3324.bl_5F00_flash.c

    e2e.ti.com/.../6404.flash_5F00_defines.h

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    QJ Wang 您好:
    感谢您的热情响应。
    这些代码对我非常有用。 但我的闪存操作有问题。实际上,我初始化闪存,然后我写入闪存,最后我读取闪存。我发现程序只在读取步骤中运行,无法继续运行。