We need to develop a modified version of firmware update via the Serial Flash Programmer since our tx/rx pin pair is not in the accepted list for SCIA boot. Also the transfer is very slow as ReadFile() in the VS C++ based serial flash programmer takes 15 ms to return each byte even with baud rate at 115200.
Part of the solution is to place 3 flash kernels (3 not 4, as we do not use CPU2) in flash on the F28386 and then copy to RAM and execute from RAM. I do not understand all the intricacies of the run time setup, etc, so I must ask some stupid questions.
The kernel projects each generate an .out file and several object files.
Q1: Would it be possible to have the .out files copied from flash to ram and then run?
Another option I think might work would be to use the object files from each kernel project. For instance the flash_kernel_c28x_dual_ex1_c28x1 project generates 7 unique objects.
Q2: Could the object files be specified like this in SECTIONS? Of course a copy routine would be needed.
SECTIONS
{
...
flashKernelCPU1: >> FLASH5 | FLASH6, run >> RAMM1
{
flash_kernel_c28x_dual_ex1_sci_flash_kernel_cpu1.obj
flash_kernel_c28x_dual_ex1_sci_get_function_cpu1.obj
}
...
}
Q3: How would the load, run, and start addresses be determined (function main() been stripped off)?
Another linking method I have seen in the TI documents for code that needs different load and run addresses uses input sections “.TI.ramfunc”.
Q4: To use this concept would it be necessary to preface dozens and dozens of functions in these projects with something like this:
#pragma CODE_SECTION(ldfuLoad, ".TI.ramfunc") ?
Any help or suggestions you can offer are much appreciated as I am critically overdue on delivering this solution.
Thanks,
John