Other Parts Discussed in Thread: C2000WARE, UNIFLASH
器件型号: TMS320F28P650DK
Thread 中讨论的其他器件: C2000WARE、 UNIFLASH
您好、
目前我正在使用自定义 CAN 引导加载程序通过 CAN 使用闪存 API 的库 ( FAPI_F28P65x_EABI_v3.00.02.lib )、刷写完成、但应用程序未运行(不会跳转到仍在引导加载程序代码中的应用程序)、
引导加载程序将存储到闪存组 0 中 (FLASH_BANK0 :origin = 0x080002、length = 0x01FFFE)
应用程序代码将存储到闪存组–1 中
.bin从 0x00A0000 开始刷写 RAW?是否首选 TI-TXT?.binhex2000上述配置的 RAW 是否仅包含 BANK1 数据、或者是否可以包含其他区域(例如 RAM、CINIT 等)? jump_to_application()方法对于 F28P65x/C28x 是正确的吗? #pragma CODE_SECTION(jump_to_application, ".TI.ramfunc")
void jump_to_application(void)
{
typedef void (*entry_t)(void);
entry_t app_start = (entry_t)0x000A0000;
DINT;
IER = 0;
IFR = 0;
EALLOW;
Interrupt_disable(INT_CANA0);
CAN_disableGlobalInterrupt(CANA_BASE, CAN_GLOBAL_INT_CANINT0);
DINT;
DRTM;
EDIS;
app_start();
for(;;) { }
}
static bool app_image_valid(void)
{
volatile uint16_t *codestart = (volatile uint16_t*)0x00A0000;
if ((*codestart == 0xFFFFu) || (*codestart == 0x0000u)) {
return false;
}
return true;
}
void bootloader_entry(void)
{
if (g_boot_next_is_app == BOOT_MAGIC_APP && app_image_valid())
{
g_boot_next_is_app = BOOT_MAGIC_NONE;
jump_to_application();
for(;;) { }
}
}
FLASH_BANK0 : origin = 0x080002, length = 0x01FFFE // 0x80002–0x9FFFF
RESET : origin = 0x3FFFC0, length = 0x000002
}
SECTIONS
{
codestart : > BEGIN
.text : >> FLASH_BANK0, ALIGN(8)
.cinit : > FLASH_BANK0, ALIGN(8)
.switch : > FLASH_BANK0, ALIGN(8)
.reset : > RESET, TYPE = DSECT
.stack : > RAMM1
.boot_noinit : > RAMGS1, type=NOINIT
FLASH_APP_HDR : origin = 0x00A0000, length = 0x000002 // codestart
FLASH_APP : origin = 0x00A0200, length = 0x01FE00 // 0xA0200–0xBFFFF
RESET : origin = 0x3FFFC0, length = 0x000002
}
SECTIONS
{
codestart : > FLASH_APP_HDR, ALIGN(2)
.text : >> FLASH_APP, ALIGN(8)
.cinit : > FLASH_APP, ALIGN(8)
.const : > FLASH_APP, ALIGN(8)
.switch : > FLASH_APP, ALIGN(8)
.reset : > RESET, TYPE = DSECT
.stack : > RAMM1
#if defined(__TI_EABI__)
.bss : > RAMLS5
.data : > RAMLS5
.sysmem : > RAMGS1
.init_array : > FLASH_APP, ALIGN(8)
#else
...
#endif
GROUP
{
.TI.ramfunc :
{
*(.TI.ramfunc*)
}
} LOAD = FLASH_APP,
RUN = RAMLS0,
LOAD_START(RamfuncsLoadStart),
LOAD_SIZE(RamfuncsLoadSize),
LOAD_END(RamfuncsLoadEnd),
RUN_START(RamfuncsRunStart),
RUN_SIZE(RamfuncsRunSize),
RUN_END(RamfuncsRunEnd),
ALIGN(8)
}"
