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:针对勘误表 FMC#80的变通方法

Guru**** 2535150 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/812440/tms570ls3137-work-around-for-errata-fmc-80

器件型号:TMS570LS3137

您好,  

从地址0x00260000闪存控制器开始向组1写入1.5MB 的大容量数据将无法写入。  

我正在实施引导加载程序来擦除组1,并在 擦除操作解决任何故障时立即写入批量数据。

在写入闪存1.5MB 的完整数据时、接收数据并将其存储在 EMIF RAM (8MB)中、并使用库 F021_API_CortexR4_be.lib 和 API 一次性写入闪存组1

FLASH_REGISTER.FBPROT=1;
状态= Fapi_setActiveFlashBank (((Fapi_FlashBankType) 0x01U);

状态= Fapi_enableMainBankSectors (0xFFFFFFU);      

fapi_issueProgrammingCommand ((uint32_t *) dst、(0x00180000)

(uint8_t *) src、(0x8000000)
(uint8_t) bytes_size_TO_write (完整1.5 MB 大小)
0、
0、
Fapi_AutoEccGeneration);

将地址0x00180000写入0x00260000将数据写入闪存时没有错误。 起始地址0x00260000 Flash 控制器不向 Flash 写数据,它一直中止。  

如果我执行其它逻辑来写入到组1地址0x00260000 到0x00300000。

勘误表 FMC#80在两组间的访问切换时中止。  如果 在对组0的访问之后有一个介于1.5MB 和2MB 之间的访问(在组1中)、由两个1.5MB 闪存组组成的3MB 器件可能会生成一个中止。  同样、如果对组1的访问之后 是1MB 和1.5MB 之间的访问(在组0中)、器件可能会生成中止。

与闪存相关的代码正在 RAM 中执行  

闪存 API:

BOOT_UDF.obj (.text、.const)
boot_flash.obj (.text、.const)
boot_Erase.obj (.text、.const)
BOOT_EMIF_Write_Data.obj (.text、.const)

--library= F021_API_CortexR4_be.lib <*。obj >(.text、.const、.bss、.data)

}load = flash_API、run = SRAM、load_start (__SEC_OEM_unsafe load_start)、run_start (__SEC_OEM_unsafe _run_start)、size (__SEC_OEM_unsafe _run_size)、 crc_table (_Bootloader_firmware_image_crc_table、算法=TMS570_CRC64_ISO)

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

    您好、Chandre、

    请将"bytes_size_to _write"从1.5MB 的完整大小更改为16字节。

    while (SizeInBytes >0)

    fapi_issueProgrammingCommand ((uint32_t *) dst、

    (uint8_t *) src、

    (uint32_t)字节、     //使用16字节而不是1.5MB

    0、

    0、

    Fapi_AutoEccGeneration);

    while (fapi_check_FSM_ready_busy =fapi_Status_FsmBusy);

    while (fapi_get_FSM_status!= fapi_Status_Success);

    src +=字节;

    dst +=字节;

    SizeInBytes --=字节;

    if (SizeInBytes < 16){

        字节= SizeInBytes;

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

    感谢王 Q J 先生,

    刷写操作与建议的更改配合使用。