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.

[参考译文] RM57L843:探头通过uniflash或CCS擦除闪存,但未使用的内容不是全部0xff?

Guru**** 2540720 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1097242/rm57l843-probe-erasing-flash-via-uniflash-or-ccs-but-the-unused-contents-are-not-all-0xff

部件号:RM57L843
主题中讨论的其他部分:UNIFLAASH

TI工程师您好:

我已经解决了" 使用F021 API擦除启动加载程序闪存,但内容不是全部0xff?" 问题。

RM57L843:使用F021 API擦除引导加载程序闪存,但内容不是全部0xff? -基于ARM的微控制器论坛-基于ARM的微控制器- TI E2E支持论坛

谢谢你。

但是当我调试程序,通过CCS上的探测器将代码擦除并编程到闪存中时, 闪存中未使用的内容也不是全部为0xff? 使用uniflash时也会出现同样的问题。

如何修复? 链接程序命令如下所示:  

--retain="*(.intvecs)"

/* USER CODE BEGIN (1) */
ECC {
	algoL2R5F021 : address_mask = 0xfffffff8 /* Address Bits 31:3 */
	hamming_mask = R4 /* Use R4/R5 build in Mask */
	parity_mask = 0x0c /* Set which ECC bits are Even and Odd parity */
	mirroring = F021 /* RM57Lx and TMS570LCx are build in F021 */
}
/* USER CODE END */

/*----------------------------------------------------------------------------*/
/* Memory Map                                                                 */

MEMORY
{
/* USER CODE BEGIN (2) */
/* USER CODE END */
    VECTORS (X)  : origin=0x00000000 length=0x00000020
    FLASH0  (RX) : origin=0x00000020 length=0x001FFFD0	vfill=0xffffffff
    SW_VERSION	(RX) 	: origin=0x001FFFF0 length=0x00000008	/* Software Version */
    GOLDEN_CRC	(RX)	: origin=0x001FFFF8 length=0x00000008	/* golden FLASH CRC */
    FLASH1  (RX) : origin=0x00200000 length=0x00200000	vfill=0xffffffff
    STACKS  (RW) : origin=0x08000000 length=0x00001500
    RAM     (RW) : origin=0x08001500 length=0x0007EB00
    FEE     (RW) : origin=0xF0200000 length=0x00020000	vfill=0xffffffff
	/* Bank 0 ECC */
	ECC_VEC (R)     : origin=(0xF0400000 + (start(VECTORS) >> 3))
					  length=(size(VECTORS) >> 3)
					  ECC={algorithm=algoL2R5F021,input_range=VECTORS}

	ECC_FLA0 (R)    : origin=(0xF0400000 + (start(FLASH0) >> 3))
					  length=(size(FLASH0) >> 3)
					  ECC={algorithm=algoL2R5F021,input_range=FLASH0}
	/* Bank 1 ECC */
	ECC_FLA1 (R)    : origin=(0xF0400000 + (start(FLASH1) >> 3))
					  length=(size(FLASH1) >> 3)
					  ECC={algorithm=algoL2R5F021,input_range=FLASH1}
	/* Bank 7 ECC */
	ECC_FLA7 (R)    : origin=0xF0100000
					  length=(size(FEE) >> 3)
					  ECC={algorithm=algoL2R5F021,input_range=FEE}

/* USER CODE BEGIN (3) */
/* USER CODE END */
}

/* USER CODE BEGIN (4) */
/* USER CODE END */


/*----------------------------------------------------------------------------*/
/* Section Configuration                                                      */

SECTIONS
{
/* USER CODE BEGIN (5) */
/* USER CODE END */
    .intvecs 	: {} palign=8 > VECTORS
    .text    		: {} palign=8 > FLASH0
    .const   		: {} palign=8 > FLASH0
    .cinit    		: {} palign=8 > FLASH0
    .pinit    		: {} palign=8 > FLASH0
    GROUP
	{
        .TI.ramfunc
        { -l rtsv7R4_T_le_v3D16_eabi.lib<memcmp.c.obj>}
//        { -l rtsv7R4_T_le_v3D16_eabi.lib<memcpy_t2.asm.obj>}
        { -l F021_API_CortexR4_LE_L2FMC_V3D16.lib}

	}LOAD > FLASH0
    RUN > RAM
    LOAD_START(_RamfuncsLoadStart)
    LOAD_SIZE(_RamfuncsLoadSize)
    LOAD_END(_RamfuncsLoadEnd)
    RUN_START(_RamfuncsRunStart)
    RUN_SIZE(_RamfuncsRunSize)
    RUN_END(_RamfuncsRunEnd)
    .bss     : {} > RAM
    .data    : {} > RAM
    .sysmem  : {} > RAM

/* USER CODE BEGIN (6) */
	.stack	 : {} > STACKS
	SW_VERSION_DATA		: START(ulSWVERSIONStartAddr) > SW_VERSION
	GOLDEN_CRC_DATA		: START(ulGOLDENCRCStartAddr) > GOLDEN_CRC
/* USER CODE END */
}

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

    嗨,Xi,

    这是预料之中的。 闪存擦除操作不会生成ECC值(空白位置为0x3)并将其编程到ECC区域。  扇区是闪存库中必须 擦除的最小区域,这意味着擦除扇区未使用部分的ECC值无效(0xff)。  

    您可以将0x0附加到应用程序映像以适合整个扇区。 我稍后会给你们一个例子。

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

    你能举个例子吗?

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

    我现在没有工作示例,下周将为您写一个示例。