When my program calls Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, (uint32_t *)sectorAddress); it crashes with an illegal operation error. The sector address is 0x88600. The symptom seems to be it may be erasing the calling program. However, hovering indicates the address of CopyData() is 0x17000.
Here is the cmd file of the program that is calling the Fapi function.
MEMORY { BOOT_RSVD : origin = 0x000002, length = 0x0001AE /* Part of M0, BOOT rom will use this for stack */ RAMM0_1 : origin = 0x0001B0, length = 0x000648 // RAMM1_RSVD : origin = 0x0007F8, length = 0x000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ CLA_MSGRAMLOW : origin = 0x001480, length = 0x000080 CLA_MSGRAMHIGH : origin = 0x001500, length = 0x000080 RAMD0_1 : origin = 0x00C000, length = 0x001000 RAMLS0 : origin = 0x008000, length = 0x000800 RAMLS1_5 : origin = 0x008800, length = 0x002800 RAMLS6 : origin = 0x00B000, length = 0x000800 RAMLS7 : origin = 0x00B800, length = 0x000800 RAMGS0_1 : origin = 0x00D000, length = 0x002000 RAMGS2_4 : origin = 0x00F000, length = 0x003000 RAMGS5_6 : origin = 0x012000, length = 0x002000 RAMGS7 : origin = 0x014000, length = 0x001000 RAMGS8_9 : origin = 0x015000, length = 0x002000 RAMGS10_15 : origin = 0x017000, length = 0x005FF8 // RAMGS15_RSVD : origin = 0x01CFF8, length = 0x000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ #ifdef __TI_COMPILER_VERSION__ #if __TI_COMPILER_VERSION__ >= 20012000 GROUP { /* GROUP memory ranges for crc/checksum of entire flash */ #endif #endif /* BEGIN is used for the "boot to Flash" bootloader mode */ BEGIN : origin = 0x080000, length = 0x000002 /* Flash sectors */ FLASH0 : origin = 0x080002, length = 0x001FFE /* on-chip Flash */ FLASH1 : origin = 0x082000, length = 0x002000 /* on-chip Flash */ FLASH2_5 : origin = 0x084000, length = 0x014000 /* on-chip Flash */ FLASH6 : origin = 0x098000, length = 0x008000 /* on-chip Flash */ FLASH7 : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */ FLASH8 : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */ FLASH9 : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */ FLASH10_11 : origin = 0x0B8000, length = 0x004000 /* on-chip Flash */ FLASH12_13 : origin = 0x0BC000, length = 0x003FF0 /* on-chip Flash */ // FLASH13_RSVD : origin = 0x0BFFF0, length = 0x000010 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ #ifdef __TI_COMPILER_VERSION__ #if __TI_COMPILER_VERSION__ >= 20012000 } crc(_table_name, algorithm=C28_CHECKSUM_16) #endif #endif CPUTOCMRAM : origin = 0x039000, length = 0x000800 CMTOCPURAM : origin = 0x038000, length = 0x000800 CPU1TOCPU2RAM : origin = 0x03A000, length = 0x000800 CPU2TOCPU1RAM : origin = 0x03B000, length = 0x000800 RESET : origin = 0x3FFFC0, length = 0x000002 EMIF1_CS0n : origin = 0x80000000, length = 0x01000000 } SECTIONS { codestart : > BEGIN, ALIGN(4) .text : > FLASH2_5, ALIGN(4) .cinit : > FLASH1, ALIGN(4) .switch : > FLASH1, ALIGN(4) .reset : > RESET, TYPE = DSECT /* not used, */ .stack : > RAMM0_1 lfuFuncsCpu1Cpu1 : LOAD = FLASH6 | FLASH7 | FLASH8 //RUN = RAMLS1_5 | RAMLS6 | RAMLS7, RUN = RAMGS10_15, LOAD_START(lfuFuncsCpu1Cpu1LoadStart), LOAD_SIZE (lfuFuncsCpu1Cpu1LoadSize), LOAD_END (lfuFuncsCpu1Cpu1LoadEnd), RUN_START (lfuFuncsCpu1Cpu1RunStart), RUN_SIZE (lfuFuncsCpu1Cpu1RunSize), RUN_END (lfuFuncsCpu1Cpu1RunEnd), ALIGN(8) flash_api : LOAD = FLASH6 | FLASH7 | FLASH8, RUN = RAMGS10_15, LOAD_START(flash_apiLoadStart), LOAD_SIZE (flash_apiLoadSize), LOAD_END (flash_apiLoadEnd), RUN_START (flash_apiRunStart), RUN_SIZE (flash_apiRunSize), RUN_END (flash_apiRunEnd), ALIGN(8) { --library = F2838x_C28x_FlashAPI.lib(.text) //F2838x_C28x_FlashAPI.lib<FlashStateMachine.obj>(.text) } #if defined(__TI_EABI__) .init_array : > FLASH1, ALIGN(4) .bss : > RAMGS2_4 .bss:output : > RAMGS2_4 .bss:cio : > RAMGS2_4 .data : > RAMGS5_6 .sysmem : > RAMGS2_4 /* Initalized sections go in Flash */ .const : > FLASH12_13, ALIGN(4) #else .pinit : > FLASH1, ALIGN(4) .ebss : > RAMGS2_4 .esysmem : > RAMGS2_4 .cio : > RAMGS2_4 /* Initalized sections go in Flash */ .econst : >> FLASH12_13, ALIGN(4) #endif .farbss : > EMIF1_CS0n .farconst : > EMIF1_CS0n .em1_cs0 : > EMIF1_CS0n /*** CLA Compiler Required Sections ***/ .scratchpad : > RAMLS7 /* Scratchpad memory for the CLA C Compiler */ .const_cla : > RAMLS7 ramgs0 : > RAMGS0_1, type=NOINIT MSGRAM_CPU1_TO_CPU2 : > CPU1TOCPU2RAM, type=NOINIT MSGRAM_CPU2_TO_CPU1 : > CPU2TOCPU1RAM, type=NOINIT MSGRAM_CPU_TO_CM : > CPUTOCMRAM, type=NOINIT MSGRAM_CM_TO_CPU : > CMTOCPURAM, type=NOINIT #if defined(__TI_EABI__) .TI.ramfunc : {} LOAD = FLASH0, RUN = RAMLS0, LOAD_START(RamfuncsLoadStart), LOAD_SIZE(RamfuncsLoadSize), LOAD_END(RamfuncsLoadEnd), RUN_START(RamfuncsRunStart), RUN_SIZE(RamfuncsRunSize), RUN_END(RamfuncsRunEnd), ALIGN(4) #else .TI.ramfunc : {} LOAD = FLASH0, RUN = RAMLS0, LOAD_START(_RamfuncsLoadStart), LOAD_SIZE(_RamfuncsLoadSize), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), RUN_SIZE(_RamfuncsRunSize), RUN_END(_RamfuncsRunEnd), ALIGN(4) #endif DataBufferSection : > RAMGS7, ALIGN(4) LogSection : > RAMD0_1, ALIGN(4) ParamSection : > RAMGS8_9, ALIGN(4) ClaToCpuMsgRAM : > CLA_MSGRAMLOW /* Link to CLA Message RAM */ CpuToClaMsgRAM : > CLA_MSGRAMHIGH /* Link to CLA Message RAM */ ClaData : > RAMLS6 /* Link to CLA Data RAM */ .bss_cla : > RAMLS6 /* Link to CLA Data RAM */ /* Link to CLA Program RAM */ Cla1Prog : LOAD = FLASH10_11, RUN = RAMLS1_5, LOAD_START(ClaProgLoadStart), RUN_START(ClaProgRunStart), LOAD_SIZE(ClaProgLoadSize) , ALIGN(4) /* crc/checksum section configured as COPY section to avoid including in executable */ .TI.memcrc : type = COPY } /* //=========================================================================== // End of file. //=========================================================================== */
Any suggestions or ideas?
Thanks,
John