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 BANK1 BANK7失败

Guru**** 2540720 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/1064741/tms570ls3137-flashing-and-burning-flash-bank0-bank1-bank7-failed

器件型号:TMS570LS3137

大家好、

问题:擦除和烧录闪存 BANK0 BANK1 BANK7 失败、原因是 HAL 代码和 F021库 F021_API_CortexR4_BE_L2FMC_V3D16.lib 生成的驱动程序代码。 但是、根据官方文档中编写的例程、该程序显示擦除和烧毁成功、客户想知道原因是什么? (注:芯片 OSC16M、HCLK:180m)

代码如下:

/*@简要擦除块
*@param[in] oNewFlashBank:块编号
*
*返回:
*
enum e_flash_status Flash_EraseBanks (Fapi_FlashBankType oNewFlashBank)

int num = 0;
Fapi_StatusType oReturnCheck = Fapi_Status_Success;

num = find_sector (oNewFlashBank、0);

oReturnCheck = Fapi_initializeFlashBanks (180);//初始化用于 API 操作的闪存组
if ((oReturnCheck = Fapi_Status_Success)&&(flash_control_register->fmstat.fmstat_bits.Busy!= Fapi_Status_FsmBusy))

oReturnCheck = Fapi_setActiveFlashBank (oNewFlashBank);//设置活动闪存组
if ((oNewFlashBank == Fapi_FlashBank0)||(oNewFlashBank == Fapi_FlashBank1))
oReturnCheck = fapi_enableMainBankSecitors ( 0xffffffff );//设置 EEPROM 存储器中的可用扇区以进行擦除和编程
否则 if (oNewFlashBank == Fapi_FlashBank7)
oReturnCheck = fapi_enableEpromBankSectors (0xffffffff、0xffffffff);//设置 EEPROM 存储器中的可用扇区以进行擦除和编程
while (flash_control_register->fmstat.fmstat_bits.busy = fapi_Status_FsmBusy);
Fapi_issue19 CommandWithAddress (Fapi_EraseBank、gSector_List[num].low_addr);//向闪存状态机发出命令
/*在此处放置特定的示例代码*/
/*等待 FSM 完成*/
while (flash_control_register->fmstat.fmstat_bits.busy = fapi_Status_FsmBusy);
/*检查 FSM 状态以查看是否没有错误*/
if (flash_control_register->fmstat.u32Register!= 0)

/*在此输入错误处理代码*/
返回 FLASH_FAILURE;


返回 FLASH_RETURN;

/*@简要写入扇区数据
*@param[in] oNewFlashBank:块编号
*@param[in] sector:sector number
*@param[in] offset:扇区偏移地址
*@param[in] buff:Data
*@param[in] len:数据长度
*
*返回:
*
enum e_flash_status Flash_WriteData (Fapi_FlashBankType oNewFlashBank、uint32_t 扇区、uint32_t offset、uint8_t * buff、uint32_t len)

int num = 0;
Fapi_StatusType oReturnCheck = Fapi_Status_Success;

num = find_sector (oNewFlashBank、sector);

//如果大小写大于扇区大小
if ((offset+len)> gSector _List[num].size)

返回 FLASH_FAILURE;

oReturnCheck = Fapi_initializeFlashBanks (180);//初始化用于 API 操作的闪存组
if ((oReturnCheck = Fapi_Status_Success)&&(flash_control_register->fmstat.fmstat_bits.Busy!= Fapi_Status_FsmBusy))

oReturnCheck = Fapi_setActiveFlashBank (oNewFlashBank);//设置活动闪存组
if ((oNewFlashBank == Fapi_FlashBank0)||(oNewFlashBank == Fapi_FlashBank1))
oReturnCheck = fapi_enableMainBankSecitors ( 0xffffffff );//设置 EEPROM 存储器中的可用扇区以进行擦除和编程
否则 if (oNewFlashBank == Fapi_FlashBank7)
oReturnCheck = fapi_enableEpromBankSectors (0xffffffff、0xffffffff);//设置 EEPROM 存储器中的可用扇区以进行擦除和编程
while (flash_control_register->fmstat.fmstat_bits.busy = fapi_Status_FsmBusy);
fapi_issueProgrammingCommand (gSecter_List[num].low_addr+offset、buff、len、0、0、0、 Fapi_DataOnly);//设置数据并将程序命令发送到有效的闪存地址
/*在此处放置特定的示例代码*/
/*等待 FSM 完成*/
while (flash_control_register->fmstat.fmstat_bits.busy = fapi_Status_FsmBusy);
/*检查 FSM 状态以查看是否没有错误*/
if (flash_control_register->fmstat.u32Register!= 0)

/*在此输入错误处理代码*/
返回 FLASH_FAILURE;


返回 FLASH_RETURN;

您可以帮助检查此案例吗? 谢谢。

此致、

樱桃

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

    您好 Cherry、

     F021_API_CortexR4_BE_L2FMC_V3D16.lib 用于 TMS570LC43x 和 RM57x。  F021_API_CortexR4_BE_V3D16.lib 或 F021_API_CortexR4_Be.lib 应用于 TMS570LS3137器件。

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

    您好、Wang、

    客户已更换 F021_API_CortexR4_BE.lib 来擦除和烧写 BANK1、但无法擦除和烧写 BANK0。 还是 BANK7不能使用 F021_API_CortexR4_be.lib 来擦除和烧写?

    注意:启动器在 BANK0、SYS_LINK_cmd 中执行、如下所示:

    /*------------------ *
    /* sys_link.cmd */
    /**//
    /*
    *版权所有(C) 2009-2018 Texas Instruments Incorporated - www.ti.com
    *
    *
    *以源代码和二进制形式重新分发和使用、有无
    *如果满足以下条件、则允许进行修改
    符合*:
    *
    *源代码的重新分发必须保留上述版权
    *注意、此条件列表和以下免责声明。
    *
    *二进制形式的再发行必须复制上述版权
    *请注意、中的此条件列表和以下免责声明
    *随提供的文档和/或其他材料
    *分发。
    *
    *德州仪器公司的名称和名称均不相同
    *其贡献者可用于认可或推广衍生产品
    *未经特定的事先书面许可。
    *
    *本软件由版权所有者和贡献者提供
    *"按原样"以及任何明示或暗示的保证、包括但不包括
    *仅限于对适销性和适用性的暗示保证
    *一项特定目的不予承认。 在任何情况下、版权均不得
    *所有者或贡献者应对任何直接、间接、偶然或
    *特殊、惩戒性或后果性损害(包括但不包括)
    *仅限于采购替代货物或服务;丧失使用、
    *数据或利润;或业务中断)
    *责任理论、无论是合同责任、严格责任还是侵权行为
    *(包括疏忽或其他)因使用而以任何方式产生
    *、即使被告知可能会发生此类损坏。
    *
    *

    /**//
    /*------------------ *
    /*用户代码开始(0)*/
    /*用户代码结束*/


    /*------------------ *
    /*链接器设置*/

    --retain="*(.intvecs)"

    /*用户代码开始(1)*/
    /*用户代码结束*/

    /*------------------ *
    /*内存映射*/

    存储器

    引导程序(X):origin=0x00000000 length=0x00000020
    FLASH0 (RX):origin=0x00000020 length=0x0017FFE0
    FLASH1 (RX):origin=0x00180000 length=0x00180000
    堆栈(RW):origin=0x08000000 length=0x00001500
    RAM (RW):origin=0x08001500 length=0x0003EB00

    /*用户代码开始(2)*/
    /*用户代码结束*/

    /*用户代码开始(3)*/
    /*用户代码结束*/


    /*------------------ *
    /*段配置*/

    部分

    .intvecs:{}>向量
    .text:{}> FLASH0| FLASH1
    .const:{}> FLASH0| FLASH1
    .cinit:{}> FLASH0| FLASH1
    .pinit:{}> FLASH0| FLASH1
    .bss:{}> RAM
    .data :{}> RAM
    .sysmem:{}>RAM

    FEE _文本_部分:{}> FLASH0 | FLASH1
    FEE _ CONST_SECTION:{}> FLASH0 | FLASH1
    fee_data_section:{}> RAM

    /*用户代码开始(4)*/
    /*用户代码结束*/

    /*用户代码开始(5)*/
    /*用户代码结束*/


    /*------------------ *
    /*其他*/

    /*用户代码开始(6)*/

    /*用户代码结束*/
    /*------------------ *

    擦除组1的最后一个0x2E0000时、始终显示它处于开启状态(FAPI_GET_FSM_STATUS! = Fapi_Status_Success;循环挂起。

    对于(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);

    谢谢、此致、

    樱桃

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

    您好,

    我是否可以知道有任何更新? 谢谢。

    此致、

    樱桃

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

    您好、Cherry、

    1.要擦除 bank0的扇区、必须将闪存 API 相关代码复制到 SRAM 并从 SRAM 执行

    2.如果您想使用组7作为 FEE、请使用 FEE 驱动器来写入/读取数据和擦除 FEE 驱动器的闪存。  

    [引用 userid="496057" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1064741/tms570ls3137-flashing-and-burning-flash-bank0-bank1-bank7-failed/3940311 #3940311]]擦除 Bank1的最后一个0x2E0000时、始终显示它处于打开状态(FAPI_GET_FSM_STATUS! = Fapi_Status_Success;循环挂起。

    是否启用了用于擦除的最后一个扇区(扇区11)?  

     Fapi_enableMainBankSectors (0xFFFF); -->启用扇区0到扇区15