主题中讨论的其他器件:HALCOGEN、
我正在使用 TMS570LS0714微控制器、并已在 Halcogen 中启用闪存 ECC。 ECC 生成已添加到链接器文件中。 我的应用是在闪存上加载自定义引导加载程序和具有 ECC 的应用固件。
我遇到的问题是、当启用闪存 ECC (调用汇编函数 _coreEnableFlashEcc_();)时、会生成'flashErrorReal'错误。 我的问题是、只能将 BANK0的一部分设置为启用闪存 ECC 吗? 是什么导致触发 flashErrorReal 中止?
这是我的链接器文件:
存储器
{
向量(X) :origin=0x00000000
length=0x00000020
fill=0xffffffff
BL_Magik (X) :origin=(end (vectors))(原点=(end (vectors)))
length=0x00000040
vfill=0xffffffff
FLASH_API_LIB (RX):origin=(0x00040000)
长度= 0x00000E10
vfill=0xffffffff
FLASH0 (RX):origin=(end (flash_api_LIB))
length=(0x00040000 - size (flash_api_LIB))
vfill=0xffffffff
FLASH7 (RX):origin=0xF0200000
长度=0x00010000
vfill=0xffffffff
RAM (RW):origin=0x08002000
长度= 0x0001E000
堆栈 (RW):origin=0x08000000
长度=0x00002000
/*闪存 ECC 部分*/
//组0 ECC
ECC_VEC (R) :origin=(0xf0400000 +(start (vectors)>> 3))
length=(size (vectors)>> 3)
ecc={算法=algoR4F021、input_range=vectors}
ECC_BL_Magik (R):origin=(0xf0400000 +(start (BL_Magik) >> 3))
length=(size (bl_Magik) >> 3)
ecc={算法=algoR4F021、input_range=bl_Magik}
ECC_FLASH_API (R) :origin=(0xf0400000 +(开始(FLASH_API_LIB) >> 3))
length=(size (flash_api_LIB) >> 3)
ecc={算法=algoR4F021、INPUT_RANGE=FLASH_API_LIB}
ECC_FLASH0 (R) :origin=(0xf0400000 +(START (FLASH0) >> 3))
length=(size (FLASH0) >> 3)
ecc={算法=algoR4F021、INPUT_RANGE=FLASH0}
//组7 ECC
ECC_FLA7 (R) :origin=0xF0100000
length=(size (FLASH7) >> 3)
ecc={algoR4F021、INPUT_RANGE=FLASH7}
/*闪存 ECC 部分*/
}
/*------------------ *
/*段配置 *
部分
{
.intvecs:{}>向量
闪存 API:
{
..\Debug\PeriphCode\Sources\Fapi_UserDefinedFunctions.obj (.text)
..\Debug\Code\FlashAPI.obj (.text)
--library= F021_API_CortexR4_be.lib < FlashStateMachine.IssueFsmCommand.obj
FlashStateMachine.SetActiveBank.obj
FlashStateMachine.InitializeFlashBanks.obj
FlashStateMachine.EnableMainSections.obj
FlashStateMachine.IssueFsmCommand.obj
FlashStateMachine.ScaleFclk.obj
init.obj
utilities.CalculateEcc.obj
utilities.WaitDelay.obj
utilities.CalculateFletcher.obj
read.MarginByByByByByByByByByByByByByByBy
Read.Common.obj
read.FlushPipeline.obj
read.wdService.obj
ASYNC.WithAddress.obj
program.obj >(.text)
}load = flash_api_LIB、run = RAM、load_start (af_api_load)、run_start (af_api_run)、size (af_api_size)
axio_BL_Magik:{}> BL_Magik
.appl_start :{}> BL_Magik
.text :{}> FLASH0
.const :{}>FLASH0
.cinit :{}> FLASH0
.pinit :{}> FLASH0
stack:{}> stacks
.bss :{}> RAM
.data :{}> RAM
.sysmem :{}>RAM
fee_text_section:{}> FLASH0
fee_const_section:{}> FLASH0
fee_data_section:{}> RAM
}
/* ECC 配置 *
ECC
{
algoR4F021:address_mask = 0x003ff8 //地址位21:3 */
汉明_MASK = R4 /*使用掩码中的 R4构建*/
奇偶校验掩码 = 0x0c //设置哪些 ECC 位是偶校验和奇校验*/
镜像 = F021 /* RM4x 和 TMS570LSx 构建于 F021 */中
}
谢谢、
Gustavo Del Valle
MEMORY { VECTORS (X) :origin=0x00000000 length=0x00000020 fill=0xffffffff
BL_Magik (X) :origin=(end(vectors) length=0x00000040 vfill=0xffffffff
FLASH_API_LIB (RX):origin=(0x00040000) length=0x00000E10 vfill=0xffffffff
FLASH0 (RX):origin=(end (flash_api_LIB)) length=(0x00040000 - size (flash_api_LIB)) vfill=0xffffffff
FLASH7 (RX):origin=0xF0200000 length=0x00010000 vfill=0xffffffff
RAM (RW):origin=0x08002000 length=0x0001E000
堆栈 (RW):origin=0x08000000 length=0x00002000
/*闪存 ECC 部分*/
//组0 ECC ECC_VEC (R) :origin=(0xf0400000 +(start (vectors)>>3) length= (size (vectors)>>3) ECC={ algoR4F021,input_range=vectors }
ecc_bl_Magik (R):origin=(0xf0400000 +(start (BL_Magik) >>3)) length=(size (BL_Magik) >>3) ecc={ algoR4F021,input_range=bl_Magik }
ecc_flash_API (R) :origin=(0xf0400000 +(start (flash_api_LIB )>> 3) length=(size (flash_api_LIB) >> 3) ecc={algoR4F021、input_range=flash_api_LIB}
ecc_FLASH0 (R) :origin=(0xf0400000 +(start (FLASH0) >> 3)) length=(size (FLASH0) >> 3) ecc={algoR4F021、input_range=FLASH0}
//组7 ECC ECC_FLA7 (R) :origin=0xF0100000 length=(size (FLASH7) >> 3) ecc={algoR4F021、INPUT_RANGE=FLASH7}
/*闪存 ECC 部分*/
}
/*------------------ //*段配置 *
SECTIONS{ .intvecs:{}>向量
flashAPI: {..\Debug\periphCode\source\fapi_UserDefinedFuncations.obj (.text)..\Debug\Code\FlashAPI.obj (.text)
--library= F021_API_CortexR4_be.lib < FlashStateMachine.IssueFsmCommand.obj FlashStateMachine.SetActiveBank.obj FlashStateMachine.InitializeFlashBanks.obj FlashStateMachine.EnableMainSecectors.obj FlashStateMachine.IssueFsmCommand.obj FlashStateMachine.ScaleFclk.obj init.obj utilities.CalculateEcc.obj utilities.WaitDelay.obj utilities.CalculateFletcher.obj read.MarginByByByByByByByByByByByByByByBy Read.Common.obj read.FlushPipeline.obj read.wdService.obj ASYNC.WithAddress.obj program.obj >(.text)
}load = flash_api_LIB、run = RAM、load_start (af_api_load)、run_start (af_api_run)、size (af_api_size)
axio_BL_Magik:{}> BL_Magik .appl_start :{}> BL_Magik
.text :{}> FLASH0 .const :{}> FLASH0 .cinit :{}> FLASH0 .pinit :{}> FLASH0
stack:{}> stacks .bss :{}> RAM .data :{}> RAM .sysmem :{}> RAM
fee_text_section:{}> FLASH0 fee_const_section:{}> FLASH0 fee_data_section:{}> RAM}
/* ECC 配置 /ECC{ algoR4F021:address_mask = 0x003ff8 //地址位21:3 * 汉明_MASK = R4 /*使用掩码中的 R4构建*/ 奇偶校验掩码 = 0x0c //设置哪些 ECC 位是偶校验和奇校验*/ 镜像 = F021 /* RM4x 和 TMS570LSx 构建于 F021 */}中