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.

[参考译文] TMS570LS0432:在引导加载程序的闪存擦除期间进入 svcEntry

Guru**** 2539500 points
Other Parts Discussed in Thread: TMS570LS0432, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1018086/tms570ls0432-going-to-svcentry-during-flash-erase-in-bootloader

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

您好!

每当我尝试擦除 TMS570LS0432的闪存时、它将进入 svcEntry 并在那里停止。

我正在擦除闪存组0、扇区13和14、其起始地址为0x00020000、长度为0x00040000

在 Fapi_issueODE19 CommandWithAddress 函数处执行 svcEntry,请建议任何解决方案。

使用的代码如下供您参考:

STATUS=Fapi_initiatizeFlashBanks (((uint32_t) SYS_CLK_FREQ);//用于 API Rev2.01 *

   对于(i = ucStartBank;i <(ucEndBank + 1);i++){
       Fapi_setActiveFlashBank ((Fapi_FlashBankType) i);
       Fapi_enableMainBankSectors (0xFFFF);                //用于 API 2.01*/
       while (fapi_check_FSM_ready_busy!= fapi_Status_FsmReady);
   }

   对于(i=ucStartSector;i<(ucEndSector +1);i++){
      Fapi_issue19 CommandWithAddress (Fapi_EraseSector、flash_sector[i].start);
      while (fapi_check_FSM_ready_busy =fapi_Status_FsmBusy);
      while (fapi_get_FSM_status!= fapi_Status_Success);
   }

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

    您好、Vinary、

    LS0432只有一个闪存组、因此必须从 SRAM 执行与闪存 API 相关的函数。

    请参阅引导加载程序示例以将代码复制到 SRAM:

    http://software-dl.ti.com/hercules/hercules_docs/latest/hercules/Examples/Examples.html#bootloader

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

    您好、Wang、

    按照上述参考软件修改代码后、我将面临相同的问题

    b  #0x200F8位于 intvec.asm 中

    我进行了以下更改

    链接器命令文件:

    存储器

       引导程序   (X)  :origin=0x00000000 length=0x00000020
       Flash_API (RX) :origin=0x00000020 length=0x000014E0
       FLASH0    (RX) :origin=0x00001500 length=0x0005EB00  //LS04x,RM42闪存大小为0x60000
       SRAM      (RW) :origin=0x08002000 length=0x00006000  //LS04x,RM42 SRAM 大小为0x8000
       栈     (RW) :origin=0x08000000 length=0x00002000

    部分

      .intvecs:{}>向量
      闪存 API:
      {
        fapi_UserDefinedFunctions.obj (.text)
        bl_flash.obj (.text)
        --library=...\..\lib\F021_API_CortexR4_be.lib (.text)
      }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

    intvecs.asm:

    ;中断向量
    ;请更改#0x??? 在 bl_config.h 中定义的指定图像位置

           b  _c_int00              ;0x00
           b  #0x200F8              ;0x04;0x200F8=$20100-0x8;0x20100是应用程序起始地址
           b  #0x200F8              ;0x08、软件中断
           b  #0x200F8              ;0x0C、中止(预取)
           b  #0x200F8              ;0x10、中止(数据)
    保留尝试
           b  reservedEntry         ;0x14
           LDR PC、[PC、#-0x1b0]      ;0x18
           LDR PC、[PC、#-0x1b0]      ;0x1C

    修改了 core.asm

    添加了_copyAPI 2RAM 代码

    ;初始化堆栈指针

       .def    _coreInitStackPointer_
       asmfunc

    _coreInitStackPointer_

           CPS  17
           LDR  sp、      fiqSp
           CPS  18
           LDR  sp、      irqSp

           CPS  #19
           LDR  sp、      svcSp
           CPS  #23
           LDR  sp、      ABortSp
           CPS  #27
           LDR  sp、      undefSp
           CPS  #31
           LDR  sp、      userSp

           BX LR    

    userSp .word 0x08000000+0x00000200
    svcSp  .word 0x080000+0x00000200+0x00001500
    fiqSp  .word 0x08000000+0x00000200+0x00001500+0x00000100
    irqSp  .word 0x08000000+0x00000200+0x00001500+0x00000100+0x00000200
    中止 Sp .word 0x08000000+0x00000200+0x00001500+0x00000100+0x00000200+0x00000100
    undefSp .word 0x08000000+0x00000200+0x00001500+0x00000100+0x00000200+0x00000100+0x00000100

    startup.c 被修改为

    在 systemInit()之后添加了_copyAPI 2RAM;

    请建议我进行其他修改吗?

    与我的 halcogen 生成的代码相比、有许多其他微小的更改。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="482629" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1018086/tms570ls0432-going-to-svcentry-during-flash-erase-in-bootloader/3764979 #3764979"]

    在 systemInit()之后添加了_copyAPI 2RAM;

    请建议我进行其他修改吗?

    [/报价]

    RAM 或闪存中调用闪存 API 函数的函数是什么?

    CCS/RM46L852中:使用 Fapi_issueProgramming Command 时跳转至 prefetchEntry 发现、即使 闪存 API 函数本身已在 RAM 中、调用闪存 API 函数的函数也可能导致预取中止。

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

    您好、Gillon、

    我从 BL_FLASH.c 调用 API 函数、我从 RAM 调用这些函数。

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

    您好、Wang、

    有更新吗?

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

    您好!

    是否有人能告诉我从 RAM 运行闪存 API 所需的所有更改、上面线程中提到的更改都可以或任何修改?

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

    您好、Vinary、

    也请将.data 复制到 SRAM:

      闪存 API:
      {
        fapi_UserDefinedFunctions.obj (.text、.data)
        bl_flash.obj (.text、.data)
        --library=...\..\lib\F021_API_CortexR4_be.lib (.text、.data)
      }load = flash_API、run = SRAM、load_start (api_load)、run_start (api_run)、size (api_size)

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

    请使用 memcopy()或 _copyAPI 2RAM()将闪存 API 相关文件/数据复制到 SRAM:


    ;------------------------------------------------------------------

    ;将闪存 API 从闪存复制到 SRAM。

    .def _APIcopy2RAM_
    .ref apiLoadStart
    .ref apiRunStart
    .ref apiLoadSize

    asmfunc

    copyAPI 2RAM_

    stmfd sp!、{lr}

    LDR r0、FLASH_LOAD
    LDR R1、FLASH_RUN
    LDR R2、FLASH_SIZE
    添加 R2、R1、R2
    COPY_Loop1:
    LDR R3、[r0]、#4
    STR R3、[R1]、#4
    CMP R1、R2
    BLT COPY_LOOP1

    mfldd sp!、{lr}

    BX LR

    Flash_load .word apiLoadStart
    Flash_run .word apiRunStart
    Flash_size .word apiLoadSize

    endasmfunc

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

    您好、Wang、

    感谢您的建议、

    现在它正在工作。

    与上述建议相比略有不同

    在_copyAPI 2RAM_中使用 apiLoadStart "api_load"来匹配链接器命令文件不同,与其他文件类似(apiRunStart、apiLoadSize)。