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.

[参考译文] TMS570LS3137:bank0的 FO21、Fapi_Erase 扇区失败

Guru**** 2538260 points
Other Parts Discussed in Thread: TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1065591/tms570ls3137-fo21-fapi_erase-sector-of-bank0-failed

器件型号:TMS570LS3137

您好!  

我们正在使用 TMS570LS3137开发引导加载程序、并在引导加载程序中发现:

Fapi_issue19 CommandWithAddress (Fapi_EraseSector、FLASH_SECTORnum]。 启动);

此函数可以擦除 bank1扇区、无法擦除 bank0中的扇区、例如、在 bank0中擦除 sector10时、系统会在擦除该扇区时出错。

擦除功能如下:

const SECTORS flash_sector[NUMBEROFSECTORS]=
{
  (void *)0x00000000, 0x08000, 0,  0, 0xfff87000,
  (void *)0x00008000, 0x08000, 0,  1, 0xfff87000,
  (void *)0x00010000, 0x08000, 0,  2, 0xfff87000,
  (void *)0x00018000, 0x08000, 0,  3, 0xfff87000,
  (void *)0x00020000, 0x20000, 0,  4, 0xfff87000,
  (void *)0x00040000, 0x20000, 0,  5, 0xfff87000,
  (void *)0x00060000, 0x20000, 0,  6, 0xfff87000,
  (void *)0x00080000, 0x20000, 0,  7, 0xfff87000,
  (void *)0x000A0000, 0x20000, 0,  8, 0xfff87000,
  (void *)0x000C0000, 0x20000, 0,  9, 0xfff87000,
  (void *)0x000E0000, 0x20000, 0, 10, 0xfff87000,
  (void *)0x00100000, 0x20000, 0, 11, 0xfff87000,
  (void *)0x00120000, 0x20000, 0, 12, 0xfff87000,
  (void *)0x00140000, 0x20000, 0, 13, 0xfff87000,
  (void *)0x00160000, 0x20000, 0, 14, 0xfff87000,
  (void *)0x00180000, 0x20000, 1,  0, 0xfff87000,
  (void *)0x001A0000, 0x20000, 1,  1, 0xfff87000,
  (void *)0x001C0000, 0x20000, 1,  2, 0xfff87000,
  (void *)0x001E0000, 0x20000, 1,  3, 0xfff87000,
  (void *)0x00200000, 0x20000, 1,  4, 0xfff87000,
  (void *)0x00220000, 0x20000, 1,  5, 0xfff87000,
  (void *)0x00240000, 0x20000, 1,  6, 0xfff87000,
  (void *)0x00260000, 0x20000, 1,  7, 0xfff87000,
  (void *)0x00280000, 0x20000, 1,  8, 0xfff87000,
  (void *)0x002A0000, 0x20000, 1,  9, 0xfff87000,
  (void *)0x002C0000, 0x20000, 1, 10, 0xfff87000,
  (void *)0x002E0000, 0x20000, 1, 11, 0xfff87000

};


uint8_t drvFapi_BlockEraseSector(uint8_t sectornum)
{
    uint8_t RetValue=0;

    Fapi_initializeFlashBanks((uint32_t)SYS_CLK_FREQ); /* used for API Rev2.01 */

    Fapi_setActiveFlashBank((Fapi_FlashBankType)(flash_sector[sectornum].bankNumber));
    Fapi_enableMainBankSectors(0xFFFF);                 /* used for API 2.01*/
    while( FAPI_CHECK_FSM_READY_BUSY != Fapi_Status_FsmReady );

    Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, flash_sector[sectornum].start);
    while( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmBusy );
    while(FAPI_GET_FSM_STATUS != Fapi_Status_Success);

    if(Flash_Erase_Check((uint32_t)flash_sector[sectornum].start, flash_sector[sectornum].length))
    {
        RetValue |= 0x82;/*flash中的值不为0xFFFFFFFF,擦除失败*/
    }
    else
    {
        ;
    }

    return RetValue;
}

2.链接配置如下:

存储器

    向量         (X)          : origin=0x00000000 length=0x00000100
    Flash_API   (RX)          : origin=0x00010000 length=0x00010000
    FLASH0                 (RX)         : origin=0x00020000 length=0x00040000

    堆栈          (RW)         : origin=0x08000000 length=0x00009000
    RAM_F201API (RW)         : origin=0x08009000 length=0x00003000
    RAM             (RW)         : origin=0x0800C000 length=0x00033F00
  USERLEGLE        (RW)         : origin=0x0803FF00 length=0x00000100        //get_COREREG_M ü ADDR用户自定义使用的内存段

 部分

    .intvecs : {}>  向量

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

    .text    : {} > FLASH0
    .const   : {}>FLASH0   
    .cinit   : {} > FLASH0
    .pinit   : {} > FLASH0
    .bss     : {} > RAM
    .data    : {}>  RAM
  .sysmem  : {}>RAM   

3.函数_copyAPI2RAM_()也在 void _c_int00 (void)。中调用

 4.擦除 bank0扇区时,将显示以下错误消息

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

    您好、Shunyun、

    您能否从  API_run 开始检查闪存 API 是否已复制到 SRAM?

    请将.data 段添加到您的 cmd 文件中的以下语句中:

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

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

    您好、Shunyun、

    刚刚注意到、从0x100到0x10000的闪存段不会在您的 cmd 文件中使用。

    向量         (X)          : origin=0x00000000 length=0x00000100
    Flash_API   (RX)          : origin=0x00010000 length=0x00010000
    FLASH0                 (RX)         : origin=0x00020000 length=0x00040000

    这将在没有任何数据和有效 ECC 的情况下生成一个大孔洞。  

    您能否尝试以下修改:

    存储器

        引导程序         (X)          : origin=0x00000000 length=0x00000020
      FLASH0        (Rx)    : origin=0x00000020 length=0x00080000 - 0x20
      堆栈          (RW)         : origin=0x08000000 length=0x00009000
        RAM_F201API (RW)         : origin=0x08009000 length=0x00003000
        RAM             (RW)         : origin=0x0800C000 length=0x00033F00
      USERLEGLE        (RW)         : origin=0x0803FF00 length=0x00000100        //get_COREREG_M ü ADDR用户自定义使用的内存段

     部分

        .intvecs : {}>  向量

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

        .text    : {} > FLASH0
        .const   : {}>FLASH0   
        .cinit   : {} > FLASH0
        .pinit   : {} > FLASH0
        .bss     : {} > RAM
        .data    : {}>  RAM
      .sysmem  : {}>RAM