We developed a DSP/BIOS application based on the TMS320C55XXCSL-LOWPWR ccsv_v4.0_examples/usb/CSL_USB_MSC_dmaExample example code. We used that example's VC5505_CSL_BIOS_cfg.tcf file as a basis for our own. In that configuration file, and in all other example configuration files, the VECT memory section is set to:
bios.MEM.instance("VECT").base = 0x027e00;
Our application runs when using the debugger to load the code, but fails when loaded by the built-in bootloader. The failure always occurs when the first interrupt is generated. After many hours of studying data sheets and app notes, memory dumps, and hand-decoded boot images, I remembered a note in SPRS645B.pdf (section 3.2.2):
(1) SARAM31 (byte address range: 0x4E000 – 0x4EFFF) is reserved for the bootloader. After the boot process is complete, this memory space can be used.
The VECT base (word) address in all of the examples is 0x27E00 (byte address 0x4FC00) which is in the bootloader's resevered memory space. Since the BIOS expects the VECT section to resident when it starts, the bootloader needs to copy the VECT section to RAM. However, it cannot be copied to the reserved memory space by the bootloader.
In summary, the example code needs to be changed such that the VECT section is placed outside of the reserved memory space, or a prominent warning needs to be placed in the example documentation regarding this issue.