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.

[参考译文] CCS/TMS570LS1224:TMSTAT=0x0990时的闪存扇区擦除循环

Guru**** 2482105 points
Other Parts Discussed in Thread: TMS570LS1224, TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/712009/ccs-tms570ls1224-flash-sector-erasing-loops-with-tmstat-0x0990

器件型号:TMS570LS1224
主题中讨论的其他器件: TMS570LC4357

工具/软件:Code Composer Studio

您好!

我正在尝试擦除 TMS570LS1224中的闪存扇区
(Hercules LaunchPad)与 F021 v2.1.1库配合使用。

1) Fapi_initializeFlashBanks (180);
2) Fapi_setActiveFlashBank (0);
3) Fapi_enableMainBankSectors (0xFF80);
4) 4)等待不忙
5) Fapi_issueAppiCommandAppiAddress (Fapi_EraseSector、(uint32_t*) 0x20000);
6) 6)等待不忙
7) 7)等待成功

第6)步、程序会永远循环。 之后的寄存器 fmstat 的值
时间等于0x0990。 这很奇怪、因为位0x0800被描述
在 spnu515b.pdf 中被保留为 R-0、并且读取为1。 设置的其他位包括:Cstat、
ERS 和 Busy。

使用 F021函数对闪存进行编程时运行正常。
在 CCS 编程程序期间擦除的扇区也可以正常运行。
上述过程从禁用中断的 RAM 中运行。

请帮助。 也许我应该在运行该过程之前执行一些操作
扇区擦除。

谢谢。

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

    您好!

    请将 bl_flash.obj (.const)添加到 flashAPI 段中、因为 bl_flash.c 使用了 flash_sector[]数据表(常量数据)

    部分

     .intvecs:{}>向量

     /*放置 outputsection“flashAPI”。  它由以下输入段组成: */

     /* Fapi_UserDefinedFuncions.obj、BL_FLASH.obj 和 F021_API_CortexR4_be.lib *

     /*它有两个不同的分配。 它分配给 FLASH_API 进行加载、并分配给 SRAM 进行运行。 *

     /*此输出段放置在输出文件中,以便在加载程序时,*/

     /*它在 FLASH_API 存储器范围内。 在系统执行期间的某个时间、在使用 flashAPI 中的任何内容之前、*/

     /*应用程序将其从 FLASH_API 复制到 SRAM。 请注意、此副本不会自动完成。 *

     /*必须在应用程序代码中获取 I。 使用 flashAPI 的任何其他段(调用其函数或*/

     /*是指其数据)的行为就像闪存 API 已经在 SRAM 中一样。 load_start 等语句会建立符号*/

     /*用于实现副本。 符号 API_LOAD 的值是起始加载地址。 *

     /*同样、API_END 具有结束加载地址、API_RUN 具有开始运行地址。 *

     /* api_size 是大小*/

     闪存 API:

     {

      fapi_UserDefinedFunctions.obj (.text)

      bl_flash.obj (.text)

      bl_flash.obj (.const)

      --library=...\..\lib\F021_API_CortexR4_be.lib (.text)

     }load = flash_API、run = SRAM、load_start (api_load)、load_end (api_end)、run_start (api_run)、 大小(API_SIZE)

     .text > FLASH0

     .const > FLASH0

     .cinit > FLASH0

     .pinit > FLASH0

     .data > SRAM

     .bss > SRAM

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

    您好!

    我根本没有在 BL_FLASH 中使用函数、只使用 F021_API_CortexR4_BE_L2FMC_V3D16.lib 中的函数。   

    我认为我的序列完全重现了我在 BL_FLASH.c 中看到的内容  

    第一行是160MHz、 180是我在帖子中键入的错误。   

    谢谢、

    Grzegorz

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

    您是否将包含 STEP 1~7及其 CONST 的函数复制到 SRAM、并从 SRAM 执行此序列?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    是的、API 被复制到 RAM 中。 当我在调试器中跟踪程序时、我看到它
    从 RAM 运行且正确。

    请参阅以下内容:

    ################## 链接器文件##########################

    --retain="*(.intvecs)"
    存储器

    引导程序(X):origin=0x00000000 length=0x00000020
    Flash_API (RX):origin=0x00000020 length=0x000014E0
    FLASH0 (Rx):origin=0x00001500 length=0x0013EB00/*140000-1500*/
    SRAM (RW):origin=0x08001500 length=0x0002EB00
    堆栈 (RW):origin=0x08000000 length=0x00001500

    部分

    .intvecs:{}>向量
    闪存 API:

    .\f021\Sources\Fapi_UserDefinedFunctions.obj (.text)
    .\f021\source\fapi_UserDefinedFunctions.obj (.const)
    .\appsrc\drv_flash.obj (.text)
    .\appsrc\drv_flash.obj (.const)

    --library= F021_API_CortexR4_be_L2FMC_V3D16.lib <*。obj >(.text)
    --library= F021_API_CortexR4_be_L2FMC_V3D16.lib <*。obj >(.const)
    }load = flash_API、run = SRAM、load_start (api_load)、run_start (api_run)、size (api_size)

    .text > FLASH0
    .const > FLASH0
    .cinit > FLASH0
    .pinit > FLASH0
    .data > SRAM
    .bss > SRAM


    ###################### 用于将 API 加载到 RAM 的帮助程序汇编器文件##########

    .text
    .defflashApiRomAddr、flashApiRamAddr、flashApiSize
    .refAPI_load、API_run、API_size

    flashApiRomAddr.wordapi_load
    flashApiRamAddr.wordAPI_run
    flashApiSize.wordapi_size

    ################ 将 API 加载到 RAM 的函数########################

    void appCopyFlashApiFromRomToRam (void){
    uint32_t * ptFrom =(uint32_t*) flashApiRomAddr;
    uint32_t * ptto =(uint32_t*) flashApiRamAddr;
    uint32_t i、count = flashApiSize >> 2;
    (i=0;<count; ++i) ptTo[i] = ptFrom[i];


    ############################################################################################################################

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

    使用错误的库:
    F021_API_CortexR4_BE_L2FMC_V3D16.lib。 适用于 TMS570LC4357
    F021_API_CortexR4_BE_V3D16.lib 用于 TMS570LS12x 器件。

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

    您好!

    它现在可以工作了。  非常感谢!

    有一个相关问题、我将打开一个新的帖子。   

    Grzegorz