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.
Hi Experts,
I am asking for my customer urgently. Thanks.
They are developed their own bootloader. And RAM specifies the variable strApp2BootData when jump from APP to Boot, and the variable strApp2BootData will be cleared before entering the Main function. we don't quite understand why it will be clear?
#1.If we use the variable strApp2BootData to do judge, the variable strApp2BootData will be cleared as below figure when code jump from APP to BOOT. You can see the 0x00000400 address no data and cleared.
#2.If we directly to access the 0x00000400 absolute address, the data would still you can see the below figure.
In addition, Boot Project and APP Project, define this variable at the same time, define the same RAM address. And the strApp2BootData is used by judging the upgrade operation.
They use the asm(LB "Program entry address") to jump from BOOT to APP, or also jump from APP to BOOT.
what we've done:
1.We check the RESC register, chip not reset, RAM data for strApp2BootData should not be cleared;
2.Direct operate the absolute address data exists, but through variable assignment, the data is cleared, why?
3.We check the usage- assign the fixed addresses for the variables in RAM, correct. Meanwhile, attached files about two project cmd.
MEMORY { PAGE 0 : RAMM0 : origin = 0x00000128, length = 0x000002D8 RESET : origin = 0x003FFFC0, length = 0x00000002 RAMLS_Prog : origin = 0x00008000, length = 0x00001800 // RAMLS0 : origin = 0x00008000, length = 0x00000800 cla 程序空间 // RAMLS1 : origin = 0x00008800, length = 0x00000800 // RAMLS2 : origin = 0x00009000, length = 0x00000800 // RAMGS_Prog : origin = 0x0000C000, length = 0x00003FF8 RAMGS_Prog : origin = 0x0000D000, length = 0x00002FF8 // RAMGS1 : origin = 0x0000D000, length = 0x00001000 // RAMGS2 : origin = 0x0000E000, length = 0x00001000 // RAMGS3 : origin = 0x0000F000, length = 0x00000FF8 // SECURE_ROM : origin = 0x003F2000, length = 0x00006000 // BOOTROM : origin = 0x003F8000, length = 0x00007FC0 /* Flash sectors */ /* BANK 0 */ // BEGIN : origin = 0x00080000, length = 0x00000004 FLASH_BOOT : origin = 0x080004, length = 0x003FFC // FLASH_BANK0_SEC0 : origin = 0x080002, length = 0x000FFE // FLASH_BANK0_SEC1 : origin = 0x081000, length = 0x001000 // FLASH_BANK0_SEC2 : origin = 0x082000, length = 0x001000 // FLASH_BANK0_SEC3 : origin = 0x083000, length = 0x001000 BEGIN : origin = 0x084000, length = 0x000004 AppFlagW : origin = 0x084004, length = 0x000004 //App程序存在标志 FLASH_APP : origin = 0x084008, length = 0x01AFF4 /* on-chip Flash */ FLASHEND : origin = 0x09EFFC, length = 0x000004 //APP程序结束标志 // FLASH_BANK0_SEC4 : origin = 0x084000, length = 0x001000 // FLASH_BANK0_SEC5 : origin = 0x085000, length = 0x001000 // FLASH_BANK0_SEC6 : origin = 0x086000, length = 0x001000 // FLASH_BANK0_SEC7 : origin = 0x087000, length = 0x001000 // FLASH_BANK0_SEC8 : origin = 0x088000, length = 0x001000 // FLASH_BANK0_SEC9 : origin = 0x089000, length = 0x001000 // FLASH_BANK0_SEC10 : origin = 0x08A000, length = 0x001000 // FLASH_BANK0_SEC11 : origin = 0x08B000, length = 0x001000 // FLASH_BANK0_SEC12 : origin = 0x08C000, length = 0x001000 // FLASH_BANK0_SEC13 : origin = 0x08D000, length = 0x001000 // FLASH_BANK0_SEC14 : origin = 0x08E000, length = 0x001000 // FLASH_BANK0_SEC15 : origin = 0x08F000, length = 0x001000 /* BANK 1 */ // FLASH_BANK1_SEC0 : origin = 0x090000, length = 0x001000 // FLASH_BANK1_SEC1 : origin = 0x091000, length = 0x001000 // FLASH_BANK1_SEC2 : origin = 0x092000, length = 0x001000 // FLASH_BANK1_SEC3 : origin = 0x093000, length = 0x001000 // FLASH_BANK1_SEC4 : origin = 0x094000, length = 0x001000 // FLASH_BANK1_SEC5 : origin = 0x095000, length = 0x001000 // FLASH_BANK1_SEC6 : origin = 0x096000, length = 0x001000 // FLASH_BANK1_SEC7 : origin = 0x097000, length = 0x001000 // FLASH_BANK1_SEC8 : origin = 0x098000, length = 0x001000 // FLASH_BANK1_SEC9 : origin = 0x099000, length = 0x001000 // FLASH_BANK1_SEC10 : origin = 0x09A000, length = 0x001000 // FLASH_BANK1_SEC11 : origin = 0x09B000, length = 0x001000 // FLASH_BANK1_SEC12 : origin = 0x09C000, length = 0x001000 // FLASH_BANK1_SEC13 : origin = 0x09D000, length = 0x001000 // FLASH_BANK1_SEC14 : origin = 0x09E000, length = 0x001000 // FLASH_BANK1_SEC15 : origin = 0x09F000, length = 0x001000 /* BANK 2 */ FLASH_BANK2_SEC0 : origin = 0x0A0000, length = 0x001000 FLASH_BANK2_SEC1 : origin = 0x0A1000, length = 0x001000 FLASH_BANK2_SEC2 : origin = 0x0A2000, length = 0x001000 FLASH_BANK2_SEC3 : origin = 0x0A3000, length = 0x001000 FLASH_BANK2_SEC4 : origin = 0x0A4000, length = 0x001000 FLASH_BANK2_SEC5 : origin = 0x0A5000, length = 0x001000 FLASH_BANK2_SEC6 : origin = 0x0A6000, length = 0x001000 FLASH_BANK2_SEC7 : origin = 0x0A7000, length = 0x001000 FLASH_BANK2_SEC8 : origin = 0x0A8000, length = 0x001000 FLASH_BANK2_SEC9 : origin = 0x0A9000, length = 0x001000 FLASH_BANK2_SEC10 : origin = 0x0AA000, length = 0x001000 FLASH_BANK2_SEC11 : origin = 0x0AB000, length = 0x001000 FLASH_BANK2_SEC12 : origin = 0x0AC000, length = 0x001000 FLASH_BANK2_SEC13 : origin = 0x0AD000, length = 0x001000 FLASH_BANK2_SEC14 : origin = 0x0AE000, length = 0x001000 FLASH_BANK2_SEC15 : origin = 0x0AF000, length = 0x000FF0 // FLASH_BANK0_SEC15_RSVD : origin = 0x0AFFF0, length = 0x000010 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ PAGE 1 : BOOT_RSVD : origin = 0x00000002, length = 0x00000126 App2Boot : origin = 0x00000400, length = 0x00000010 RAMM1 : origin = 0x00000410, length = 0x000003E8 // RAMM1_RSVD : origin = 0x000007F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ RAMLS_Data : origin = 0x00009800, length = 0x00001000 // RAMLS3 : origin = 0x00009800, length = 0x00000800 // cla 数据空间 // RAMLS4 : origin = 0x0000A000, length = 0x00000800 // RAMGS_Data : origin = 0x0000A800, length = 0x00001800 RAMGS_Data : origin = 0x0000A800, length = 0x00002800 // RAMLS5 : origin = 0x0000A800, length = 0x00000800 //cpu 数据空间 // RAMLS6 : origin = 0x0000B000, length = 0x00000800 // RAMLS7 : origin = 0x0000B800, length = 0x00000800 // RAMGS0 : origin = 0x0000C000, length = 0x00001000 CLA1_MSGRAMLOW : origin = 0x001480, length = 0x000080 CLA1_MSGRAMHIGH : origin = 0x001500, length = 0x000080 } SECTIONS { codestart : > BEGIN PAGE = 0 .text : > FLASH_APP, PAGE = 0 .cinit : > FLASH_APP, PAGE = 0 .switch : > FLASH_APP, PAGE = 0 .stack : > RAMM1 PAGE = 1 // .pinit : > FLASH_APP, PAGE = 0, ALIGN(4) // .ebss : > RAMGS_Data, PAGE = 1 // .esysmem : > RAMGS_Data, PAGE = 1 // .cio : > RAMGS_Prog, PAGE = 0, ALIGN(4) // .econst : > FLASH_APP, PAGE = 0, ALIGN(4) #if defined(__TI_EABI__) .bss : > RAMGS_Data, PAGE = 1 .const : > FLASH_APP, PAGE = 0 .data : > RAMGS_Data, PAGE = 1 .init_array : > FLASH_APP, PAGE = 0 .bss:output : > RAMGS_Data, PAGE = 1 .bss:cio : > RAMGS_Data, PAGE = 1 .sysmem : > RAMGS_Data, PAGE = 1 #else .pinit : > FLASH_APP, PAGE = 0 .econst : > FLASH_APP, PAGE = 0 .cio : > RAMGS_Prog, PAGE = 0 .ebss : > RAMGS_Data, PAGE = 1 .esysmem : > RAMGS_Data, PAGE = 1 #endif AppFlag : > AppFlagW PAGE = 0 /* XW */ flashEnd : > FLASHEND PAGE = 0 App2BootData : > App2Boot PAGE = 1 .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ CLA1mathTables : > RAMLS_Data, PAGE = 1 #if defined(__TI_EABI__) .TI.ramfunc : LOAD = FLASH_APP, RUN = RAMGS_Prog LOAD_START(RamfuncsLoadStart), LOAD_SIZE(RamfuncsLoadSize), LOAD_END(RamfuncsLoadEnd), RUN_START(RamfuncsRunStart), RUN_SIZE(RamfuncsRunSize), RUN_END(RamfuncsRunEnd), ALIGN(4) #else .TI.ramfunc : LOAD = FLASH_APP, RUN = RAMGS_Prog LOAD_START(_RamfuncsLoadStart), LOAD_SIZE(_RamfuncsLoadSize), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), RUN_SIZE(_RamfuncsRunSize), RUN_END(_RamfuncsRunEnd), ALIGN(4) #endif /* #if defined(__TI_EABI__) .TI.ramfunc : LOAD = FLASH_APP, RUN = RAMGS_Prog LOAD_START(RamConstLoadStart), LOAD_SIZE(RamConstLoadSize), LOAD_END(RamConstLoadEnd), RUN_START(RamConstRunStart), RUN_SIZE(RamConstRunSize), RUN_END(RamConstRunEnd), PAGE = 0, ALIGN(4) #else .TI.ramfunc : LOAD = FLASH_APP, RUN = RAMGS_Prog LOAD_START(_RamConstLoadStart), LOAD_SIZE(_RamConstLoadSize), LOAD_END(_RamConstLoadEnd), RUN_START(_RamConstRunStart), RUN_SIZE(_RamConstRunSize), RUN_END(_RamConstRunEnd), PAGE = 0, ALIGN(4) #endif */ //Load tables to Flash and copy over to RAM // #if defined(__TI_EABI__) CLA1mathTables : LOAD = FLASH_APP, RUN = RAMLS_Data, RUN_START(CLA1mathTablesRunStart), LOAD_START(CLA1mathTablesLoadStart), LOAD_SIZE(CLA1mathTablesLoadSize), PAGE = 1 #else CLA1mathTables : LOAD = FLASH_APP, RUN = RAMLS_Data, RUN_START(_CLA1mathTablesRunStart), LOAD_START(_CLA1mathTablesLoadStart), LOAD_SIZE(_CLA1mathTablesLoadSize), PAGE = 1 #endif #if defined(__TI_EABI__) /* CLA specific sections */ Cla1Prog : LOAD = FLASH_APP, RUN = RAMLS_Prog, LOAD_START(Cla1ProgLoadStart), RUN_START(Cla1ProgRunStart), LOAD_SIZE(Cla1ProgLoadSize), PAGE = 0, ALIGN(4) #else /* CLA specific sections */ Cla1Prog : LOAD = FLASH_APP, RUN = RAMLS_Prog, LOAD_START(_Cla1ProgLoadStart), RUN_START(_Cla1ProgRunStart), LOAD_SIZE(_Cla1ProgLoadSize), PAGE = 0, ALIGN(4) #endif /****** #if defined(__TI_EABI__) .const_cla : LOAD = FLASH_APP, RUN = RAMLS_Prog, RUN_START(Cla1ConstRunStart), LOAD_START(Cla1ConstLoadStart), LOAD_SIZE(Cla1ConstLoadSize), PAGE = 0, ALIGN(4) #else .const_cla : LOAD = FLASH_APP, RUN = RAMLS_Prog, RUN_START(_Cla1ConstRunStart), LOAD_START(_Cla1ConstLoadStart), LOAD_SIZE(_Cla1ConstLoadSize), PAGE = 0, ALIGN(4) #endif *******/ Cla1ToCpuMsgRAM : > CLA1_MSGRAMLOW , PAGE = 1 CpuToCla1MsgRAM : > CLA1_MSGRAMHIGH, PAGE = 1 .scratchpad : > RAMLS_Data, PAGE = 1 .bss_cla : > RAMLS_Data, PAGE = 1 .const_cla : > RAMLS_Data, PAGE = 1 Cla1DataRam : > RAMLS_Data, PAGE = 1 cla_shared : > RAMLS_Data, PAGE = 1 //Cla1Data : > RAMLS_Data, PAGE = 1 CLADataLS1 : > RAMLS_Data, PAGE = 1 /* Allocate IQ math areas: */ IQmath : > FLASH_APP, PAGE = 0, ALIGN(4) /* Math Code */ IQmathTables : > FLASH_APP, PAGE = 0, ALIGN(4) } /* //=========================================================================== // End of file. //=========================================================================== */
MEMORY { PAGE 0 : RAMM0 : origin = 0x00000128, length = 0x000002D8 RESET : origin = 0x003FFFC0, length = 0x00000002 RAMLS_Prog : origin = 0x00008000, length = 0x00001800 // RAMLS0 : origin = 0x00008000, length = 0x00000800 cla 程序空间 // RAMLS1 : origin = 0x00008800, length = 0x00000800 // RAMLS2 : origin = 0x00009000, length = 0x00000800 RAMGS_Prog : origin = 0x0000C000, length = 0x00003FF8 // RAMGS0 : origin = 0x0000C000, length = 0x00001000 // RAMGS1 : origin = 0x0000D000, length = 0x00001000 // RAMGS2 : origin = 0x0000E000, length = 0x00001000 // RAMGS3 : origin = 0x0000F000, length = 0x00000FF8 // SECURE_ROM : origin = 0x003F2000, length = 0x00006000 // BOOTROM : origin = 0x003F8000, length = 0x00007FC0 /* Flash sectors */ /* BANK 0 */ BEGIN : origin = 0x00080000, length = 0x00000004 FLASH_BOOT : origin = 0x080004, length = 0x003FFC // FLASH_BANK0_SEC0 : origin = 0x080002, length = 0x000FFE // FLASH_BANK0_SEC1 : origin = 0x081000, length = 0x001000 // FLASH_BANK0_SEC2 : origin = 0x082000, length = 0x001000 // FLASH_BANK0_SEC3 : origin = 0x083000, length = 0x001000 //BEGIN : origin = 0x084000, length = 0x000004 AppFlagW : origin = 0x084004, length = 0x000004 //App程序存在标志 FLASH_APP : origin = 0x084008, length = 0x01AFF4 /* on-chip Flash */ FLASHEND : origin = 0x09EFFC, length = 0x000004 //APP程序结束标志 // FLASH_BANK0_SEC4 : origin = 0x084000, length = 0x001000 // FLASH_BANK0_SEC5 : origin = 0x085000, length = 0x001000 // FLASH_BANK0_SEC6 : origin = 0x086000, length = 0x001000 // FLASH_BANK0_SEC7 : origin = 0x087000, length = 0x001000 // FLASH_BANK0_SEC8 : origin = 0x088000, length = 0x001000 // FLASH_BANK0_SEC9 : origin = 0x089000, length = 0x001000 // FLASH_BANK0_SEC10 : origin = 0x08A000, length = 0x001000 // FLASH_BANK0_SEC11 : origin = 0x08B000, length = 0x001000 // FLASH_BANK0_SEC12 : origin = 0x08C000, length = 0x001000 // FLASH_BANK0_SEC13 : origin = 0x08D000, length = 0x001000 // FLASH_BANK0_SEC14 : origin = 0x08E000, length = 0x001000 // FLASH_BANK0_SEC15 : origin = 0x08F000, length = 0x001000 /* BANK 1 */ // FLASH_BANK1_SEC0 : origin = 0x090000, length = 0x001000 // FLASH_BANK1_SEC1 : origin = 0x091000, length = 0x001000 // FLASH_BANK1_SEC2 : origin = 0x092000, length = 0x001000 // FLASH_BANK1_SEC3 : origin = 0x093000, length = 0x001000 // FLASH_BANK1_SEC4 : origin = 0x094000, length = 0x001000 // FLASH_BANK1_SEC5 : origin = 0x095000, length = 0x001000 // FLASH_BANK1_SEC6 : origin = 0x096000, length = 0x001000 // FLASH_BANK1_SEC7 : origin = 0x097000, length = 0x001000 // FLASH_BANK1_SEC8 : origin = 0x098000, length = 0x001000 // FLASH_BANK1_SEC9 : origin = 0x099000, length = 0x001000 // FLASH_BANK1_SEC10 : origin = 0x09A000, length = 0x001000 // FLASH_BANK1_SEC11 : origin = 0x09B000, length = 0x001000 // FLASH_BANK1_SEC12 : origin = 0x09C000, length = 0x001000 // FLASH_BANK1_SEC13 : origin = 0x09D000, length = 0x001000 // FLASH_BANK1_SEC14 : origin = 0x09E000, length = 0x001000 // FLASH_BANK1_SEC15 : origin = 0x09F000, length = 0x001000 /* BANK 2 */ FLASH_BANK2_SEC0 : origin = 0x0A0000, length = 0x001000 FLASH_BANK2_SEC1 : origin = 0x0A1000, length = 0x001000 FLASH_BANK2_SEC2 : origin = 0x0A2000, length = 0x001000 FLASH_BANK2_SEC3 : origin = 0x0A3000, length = 0x001000 FLASH_BANK2_SEC4 : origin = 0x0A4000, length = 0x001000 FLASH_BANK2_SEC5 : origin = 0x0A5000, length = 0x001000 FLASH_BANK2_SEC6 : origin = 0x0A6000, length = 0x001000 FLASH_BANK2_SEC7 : origin = 0x0A7000, length = 0x001000 FLASH_BANK2_SEC8 : origin = 0x0A8000, length = 0x001000 FLASH_BANK2_SEC9 : origin = 0x0A9000, length = 0x001000 FLASH_BANK2_SEC10 : origin = 0x0AA000, length = 0x001000 FLASH_BANK2_SEC11 : origin = 0x0AB000, length = 0x001000 FLASH_BANK2_SEC12 : origin = 0x0AC000, length = 0x001000 FLASH_BANK2_SEC13 : origin = 0x0AD000, length = 0x001000 FLASH_BANK2_SEC14 : origin = 0x0AE000, length = 0x001000 FLASH_BANK2_SEC15 : origin = 0x0AF000, length = 0x000FF0 // FLASH_BANK0_SEC15_RSVD : origin = 0x0AFFF0, length = 0x000010 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ PAGE 1 : BOOT_RSVD : origin = 0x00000002, length = 0x00000126 App2Boot : origin = 0x00000400, length = 0x00000010 RAMM1 : origin = 0x00000410, length = 0x000003E8 // RAMM1_RSVD : origin = 0x000007F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ RAMLS_Data : origin = 0x00009800, length = 0x00001000 // RAMLS3 : origin = 0x00009800, length = 0x00000800 // cla 数据空间 // RAMLS4 : origin = 0x0000A000, length = 0x00000800 RAMGS_Data : origin = 0x0000A800, length = 0x00001800 // RAMLS5 : origin = 0x0000A800, length = 0x00000800 //cpu 数据空间 // RAMLS6 : origin = 0x0000B000, length = 0x00000800 // RAMLS7 : origin = 0x0000B800, length = 0x00000800 CLA1_MSGRAMLOW : origin = 0x001480, length = 0x000080 CLA1_MSGRAMHIGH : origin = 0x001500, length = 0x000080 } SECTIONS { codestart : > BEGIN, PAGE = 0, ALIGN(4) .text : > FLASH_BOOT, PAGE = 0, ALIGN(4) .cinit : > FLASH_BOOT, PAGE = 0, ALIGN(4) .stack : > RAMM1, PAGE = 1 .switch : > FLASH_BOOT, PAGE = 0, ALIGN(4) // .pinit : > FLASH_BOOT, PAGE = 0, ALIGN(4) // .ebss : > RAMGS_Data, PAGE = 1 // .esysmem : > RAMGS_Data, PAGE = 1 // .cio : > RAMGS_Prog, PAGE = 0, ALIGN(4) // .econst : > FLASH_BOOT, PAGE = 0, ALIGN(4) #if defined(__TI_EABI__) .init_array : > FLASH_BOOT, PAGE = 0, ALIGN(4) .bss : > RAMGS_Data, PAGE = 1 .bss:output : > RAMGS_Data, PAGE = 1 .bss:cio : > RAMGS_Data, PAGE = 1 .data : > RAMGS_Data, PAGE = 1 .sysmem : > RAMGS_Data, PAGE = 1 .const : > FLASH_BOOT, PAGE = 0, ALIGN(4) #else .pinit : > FLASH_BOOT, PAGE = 0, ALIGN(4) .ebss : > RAMGS_Data, PAGE = 1 .esysmem : > RAMGS_Data, PAGE = 1 .cio : > RAMGS_Prog, PAGE = 0, ALIGN(4) .econst : > FLASH_BOOT, PAGE = 0, ALIGN(4) #endif AppFlag : > AppFlagW, PAGE = 0, ALIGN(4) /* XW */ App2BootData : > App2Boot, PAGE = 1 .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ GROUP { .TI.ramfunc { -l FAPI_F28003x_EABI_v1.58.01.lib} } LOAD = FLASH_BOOT, RUN = RAMGS_Prog, // LOAD_START(_RamfuncsLoadStart), // LOAD_SIZE(_RamfuncsLoadSize), // LOAD_END(_RamfuncsLoadEnd), // RUN_START(_RamfuncsRunStart), // RUN_SIZE(_RamfuncsRunSize), // RUN_END(_RamfuncsRunEnd), LOAD_START(RamfuncsLoadStart), LOAD_SIZE(RamfuncsLoadSize), LOAD_END(RamfuncsLoadEnd), RUN_START(RamfuncsRunStart), RUN_SIZE(RamfuncsRunSize), RUN_END(RamfuncsRunEnd), PAGE = 0, ALIGN(4) } /* //=========================================================================== // End of file. //=========================================================================== */
Do you have any suggestion here? Thanks.
Hi Shaoxing Ke
Can you please let me know if I have understood your question correctly.
You are trying to use a same variable stored in RAM location when switching from Application to BOOT. While doing so you find out that the RAM location keeps getting cleared once you switch from application to BOOT.
You want to know a method to preserve the value stored in the variable between the application and boot?
Yes we want to keep the value stored in the variable between the application and boot in the RAM.
Hi Shaoxing Ke
Can you try using M1 RAM for storing the varialble. M0 RAM is cleared when switching between the application and Boot mode.
Hi Ronak,
M1 RAM same as M0 RAM. BTW, customer previously use CCS 9.1, the variable strApp2BootData would not be cleared. we do not why cause this?
Hello Shaoxing,
Our expert had an emergency so they were out of the office. They will respond once they get the chance.
Best regards,
Omer Amir
BTW, customer previously use CCS 9.1, the variable strApp2BootData would not be cleared. we do not why cause this
What is the compiler version used in the CCS 9.1 environment and what CCS version and compiler version is currently used?
If the customer uses the executable generated from CCS 9.1 with the current CCS version, does the issue still occur?
Thanks
ki