主题中讨论的其他器件: NOWECC、 UNIFLASH
工具与软件:
MPU:RM57L843
IDE:将 CCS (Code Composer Studio)环境迁移到 IAR 环境。
引导加载程序基本代码:UART_Bootloader_RM57.zip (来自 TI 论坛)
在将 CCS 中写入的引导加载程序转换到 IAR 环境时、我遇到问题。
我需要使用 TI 提供的 F021闪存 API、使用 ECC 来实现闪存写入。
我在将 TI CCS 链接器脚本(.cmd)文件转换为 IAR 链接器脚本(.icf)文件时遇到困难。
TI CCS 链接器脚本(.cmd)文件...
MEMORY { VECTORS (X) : origin=0x00000000 length=0x00000020 vfill = 0xffffffff FLASH0 (RX) : origin=0x00000020 length=0x001FFFE0 vfill = 0xffffffff FLASH1 (RX) : origin=0x00200000 length=0x00200000 vfill = 0xffffffff STACK (RW) : origin=0x08000000 length=0x00002000 RAM (RWX) : origin=0x08002000 length=0x0007E000 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 } ECC_FLA1 (R) : origin=(0xf0400000 + (start(FLASH1) >> 3)) length=(size(FLASH1) >> 3) ECC={algorithm=algoL2R5F021, input_range=FLASH1 } } 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 */ } SECTIONS { .intvecs : {} > VECTORS .text align(32) : {} > FLASH0 | FLASH1 .const align(32) : {} > FLASH0 | FLASH1 .cinit align(32) : {} > FLASH0 | FLASH1 .pinit align(32) : {} > FLASH0 | FLASH1 .bss : {} > RAM .data : {} > RAM .sysmem : {} > RAM flashAPI: { .\Boot\Fapi_UserDefinedFunctions.obj (.text) .\Boot\bl_flash.obj (.text, .data) --library= "C:\ti\Hercules\F021 Flash API\02.01.01\F021_API_CortexR4_LE_L2FMC.lib" (.text, .data) } palign=8 load = FLASH0 |FLASH1, run = RAM, LOAD_START(apiLoadStart), RUN_START(apiRunStart), SIZE(apiLoadSize) }
我不知道在将其转换到 IAR 环境时、如何修改 cmd 文件中的以下部分来进行 ECC 闪存写入。
MEMORY { .... ECC_VEC(R) : ... ECC_FLA0(R) : ... ECC_FLA1(R) : ... } SECTIONS { flashAPI: { .... } }
如果在两个链接器(TI CCS 和 IAR)之间难以转换、我想知道是否有办法在不使用链接器脚本的情况下实现具有 ECC 的闪存写入。
我征求您的意见。