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.

[参考译文] TMS320F280025:闪存 API

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1297700/tms320f280025-flash-api

器件型号:TMS320F280025

您好、专家!

使用闪存 API EraseSector 函数时出现 FMSTAT_FAIL()错误。 使用此擦除功能时、我应注意什么?

当我进行调试时、我得到 oFlashStatus 的值为0x0100。 我在《闪存 API 参考》中提到 FMSTAT、但我仍然不明白为什么会发生这个错误。

是否应使用 Fapi_getFsmStatus ()函数? 导致此错误的常见原因是什么?

TMS320F28002x 闪存 API 版本1.57.00.00 (TI.com.cn)

谢谢。
恩亚

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

    您好、Enya:

    我们将在一两天内进行审查并与您联系。

    谢谢。此致、
    瓦姆西

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

    尊敬的 Vamsi:

    我发现扇区擦除与链接文件的配置相关。

    不能擦除 cmd 文件中某些段占用的地址空间? 有什么需要注意的地方吗?

    目前、FLASH_BANK0_sec2和 FLASH_BANK0_SEC4擦除失败。 以下是我链接的文件的内容。

    MEMORY
    {
       BEGIN           	: origin = 0x080000, length = 0x000002
       BOOT_RSVD		: origin = 0x00000002, length = 0x00000126
       RAMM0           	: origin = 0x00000128, length = 0x000002D8
       RAMM1            : origin = 0x00000400, length = 0x000003F8     /* on-chip RAM block M1 */
    // RAMM1_RSVD       : origin = 0x000007F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    /* RAMLS4           : origin = 0x0000A000, length = 0x00000800
       RAMLS5           : origin = 0x0000A800, length = 0x00000800
       RAMLS6           : origin = 0x0000B000, length = 0x00000800
       RAMLS7           : origin = 0x0000B800, length = 0x00000800*/
    
       /* Combining all the LS RAMs */
       RAMLS4567        : origin = 0x0000A000, length = 0x00002000
       RAMGS0           : origin = 0x0000C000, length = 0x000007F0//
    // RAMGS0_RSVD      : origin = 0x0000C7F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    
    //  FLASHBANK1       : origin = 0x00080000, length = 0x0000FFF0
    //  FLASH_BANK1_RSVD : origin = 0x0008FFF0, length = 0x00000010 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
       BOOTROM          : origin = 0x003F0000, length = 0x00008000
       BOOTROM_EXT      : origin = 0x003F8000, length = 0x00007FC0
       RESET            : origin = 0x003FFFC0, length = 0x00000002
       /* Flash sectors */
       /* BANK 0 */
       FLASH_BANK0_SEC0  : origin = 0x080002, length = 0x00009D	/* on-chip Flash0x000FFE */
       FLASH_BANK0_SEC1  : origin = 0x080100, length = 0x001900	/* on-chip Flash */
       FLASH_BANK0_SEC2  : origin = 0x082002, length = 0x00009D	/* on-chip Flash */
       FLASH_BANK0_SEC3  : origin = 0x082100, length = 0x001900	/* on-chip Flash */
       FLASH_BANK0_SEC4  : origin = 0x084000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC5  : origin = 0x085000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC6  : origin = 0x086000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC7  : origin = 0x087000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC8  : origin = 0x088000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC9  : origin = 0x089000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC10 : origin = 0x08A000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC11 : origin = 0x08B000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC12 : origin = 0x08C000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC13 : origin = 0x08D000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC14 : origin = 0x08E000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC15 : origin = 0x08F000, length = 0x000FF0	/* on-chip Flash */
    // FLASH_BANK0_SEC15_RSVD     : origin = 0x08FFF0, length = 0x000010  /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    }
    
    
    SECTIONS
    {
       codestart        : > BEGIN, ALIGN(8)
       .text            : >> FLASH_BANK0_SEC1 | FLASH_BANK0_SEC0 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC4 | FLASH_BANK0_SEC5,   ALIGN(8)
       .cinit           : > FLASH_BANK0_SEC4,  ALIGN(8)
       .switch          : > FLASH_BANK0_SEC4,  ALIGN(8)
       .reset           : > RESET,                  TYPE = DSECT /* not used, */
    
       .stack           : > RAMM1
    
       .init_array      : > FLASH_BANK0_SEC4,  ALIGN(8)
       .bss             : > RAMLS4567
       .bss:output      : > RAMLS4567
       .bss:cio         : > RAMGS0
       .const           : > FLASH_BANK0_SEC4,  ALIGN(8)
       .data            : > RAMLS4567
       .sysmem          : > RAMLS4567
    
    
       	.user1           : > 0x082208, 	PAGE = 1
    
    
    
        ramgs0 : > RAMGS0
    
        /*  Allocate IQ math areas: */
       IQmath           : > RAMLS4567
       IQmathTables     : > RAMLS4567
    
      .TI.ramfunc      : LOAD = FLASH_BANK0_SEC1,
                      RUN = RAMGS0,
                      LOAD_START(RamfuncsLoadStart),
                      LOAD_SIZE(RamfuncsLoadSize),
                      LOAD_END(RamfuncsLoadEnd),
                      RUN_START(RamfuncsRunStart),
                      RUN_SIZE(RamfuncsRunSize),
                      RUN_END(RamfuncsRunEnd),
                      ALIGN(8)
    	DataBufferSection : > RAMLS4567, ALIGN(8)
    }
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

    谢谢。
    恩亚

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

    您好、Enya:

    关于您从 FMSTAT 获得的错误:它显示闪存状态机仍在忙于擦除操作。  在代码中、在擦除命令之后是否有等待循环?  所连接的快照中不存在该部分代码。

    关于哪些扇区可以 擦除的问题:如果您的应用程序映射到这些扇区、而如果您希望应用程序在擦除命令后执行、那么就不能擦除这些扇区。

    如果您还有其他问题、请告诉我。

    谢谢。此致、
    瓦姆西

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

    尊敬的 Vamsi:

    我发现我犯了一个错误、即在使用擦除函数之前未初始化 API。 Fapi_initializeAPI ()和 Fapi_setActiveFlashBank ()函数现在都已初始化并在 RAM 中运行。

    问题是程序运行到"while (Fapi_checkFsmForReady ()! = Fapi_Status_Fsm){}"、 在弹出界面中停止:在 D:/software\ccsworkspace\boot.out:{3}0x3f4751{4}"处没有可用于"运行()"的源

    观察复位状态寄存器、发现已发生看门狗复位。

    我在项目的早期版本中测试了擦除和编程功能、但当时没有发生类似的情况。

    谢谢。
    恩亚

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

    您好、Enya:

    请确保您的应用根据需要定期对看门狗进行维护。

    谢谢。此致、

    瓦姆西

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

    尊敬的 Vamsi:

    即使是首次进入 ServiceDog、仍会发生错误:以下位置没有可用于"run () at D:/software\CCSworkspace\4812\boot_4812_V2\cpu1_flash\boot_4812_V2.out:{3}0x3f818c{4}"的源  

    然后、它成为没有源可用于"run () at D:/software\CCSworkspace\4812\boot_4812_v2\cpu1_flash\ boot_4812_v2.out:{3}0x3f4751{4}"

    谢谢。
    恩亚

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

    您好、Enya:

    我看到 ITRAP 错误基于您共享的快照。   

    闪存 API 从何处执行? 闪存或 RAM 中?  

    希望您在使用之前已将闪存 API 从闪存复制到 RAM。

    谢谢。此致、
    瓦姆西

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

    您好、Enya:

    由于我没有收到您的反馈、我是否可以假设问题现已解决?

    谢谢。此致、

    瓦姆西

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

    尊敬的 Vamsi:

    原因是 cmd 文件未正确分配、并且问题已修复。

    谢谢。
    恩亚