Part Number:TMS570LS3137
bootloard升级中编程时的问题 目前代码采用bank0存放IAP程序,bank1存放APP程序,通过外部存储器存放固件包。升级中出现以下两点问题:
(1)在IAP升级时进行擦除操作 调用uint32_t Fapi_BlockErase( uint32_t Bank, uint32_t ulAddr, uint32_t Size)此函数,不能执行读操作函数 status = Flash_Erase_Check((uint32_t)ulAddr, Size),执行后单片机出现异常跑飞;
(2)在进行编程操作uint32_t Fapi_BlockProgram( uint32_t Bank, uint32_t Flash_Address, uint32_t Data_Address, uint32_t SizeInBytes)后,执行uint32_t Flash_Program_Check(uint32_t Program_Start_Address, uint32_t Source_Start_Address, uint32_t No_Of_Bytes)后,单片机跑飞。
IAP程序链接脚本配置如下:
MEMORY
{
VECTORS (X) : origin=0x00000000 length=0x00000020
FLASH_API (RX) : origin=0x00000020 length=0x000014E0
FLASH0 (RX) : origin=0x00001500 length=0x00180000-0x00001500
// FLASH1 (RX) : origin=0x00180000 length=0x00180000
STACKS (RW) : origin=0x08000000 length=0x00001500
RAM (RW) : origin=0x08001500 length=0x0003EB00
/* USER CODE BEGIN (2) */
/* USER CODE END */
}
/* USER CODE BEGIN (3) */
/* USER CODE END */
/*—————————————————————————-*/
/* Section Configuration */
SECTIONS
{
.intvecs : {} > VECTORS
flashAPI :
{
..\Debug\F021\source\Fapi_UserDefinedFunctions.obj (.text)
..\Debug\F021\source\bl_flash.obj (.text)
–library=..\F021\F021_API_CortexR4_BE.lib < FlashStateMachine.IssueFsmCommand.obj
FlashStateMachine.SetActiveBank.obj
FlashStateMachine.InitializeFlashBanks.obj
FlashStateMachine.EnableMainSectors.obj
FlashStateMachine.IssueFsmCommand.obj
FlashStateMachine.ScaleFclk.obj
Init.obj
Utilities.CalculateEcc.obj
Utilities.WaitDelay.obj
Utilities.CalculateFletcher.obj
Read.MarginByByte.obj
Read.Common.obj
Read.FlushPipeline.obj
Read.WdService.obj
Async.WithAddress.obj
Program.obj > (.text)
} load = FLASH_API, run = RAM, LOAD_START(api_load), RUN_START(api_run), SIZE(api_size)
.text : {} > FLASH0
.const : {} > FLASH0
.cinit : {} > FLASH0
.pinit : {} > FLASH0
.bss : {} > RAM
.data : {} > RAM
.sysmem : {} > RAM
/* USER CODE BEGIN (4) */
/* USER CODE END */
}
Cherry Zhou:
您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!
,
Cherry Zhou:
您好,
从您的LInker CMD文件来看,您把固件编程到bank 0 (与 bootloader相同的bank)。
如果将固件编程到同一个bank,那么需要将闪存 API 和相关代码复制到 SRAM,并从 SRAM 执行这些代码。
请将.text 和.data 复制到 SRAM:
flashAPI :{..\Debug\F021\source\Fapi_UserDefinedFunctions.obj (.text, .data)..\Debug\F021\source\bl_flash.obj (.text, .data)–library=..\F021\F021_API_CortexR4_BE.lib (.text, .data)} load = FLASH_API, run = RAM, LOAD_START(api_load), RUN_START(api_run), SIZE(api_size)
,
ks zhao:
你好,我不是编程到同一个bank内,我是通过bank0存放bootloader,ban1存放app。我现在在ban0中编程到ban1时发现不能读取ban1的数据。一读程序就跑飞,上面写的那个linker cmd是bootloader程序的。那如果我后续项目做成同一个bank内,那个linker cmd按你这样修改就可以了吗?
,
Cherry Zhou:
我们向工程师确认下哈。