Other Parts Discussed in Thread: C2000WARE
Tool/software: Code Composer Studio
I have a CAN flash kernel sitting in flash sector A. It's job is to flash my application to sectors B - H. The device boots directly to the kernel on power on, then jumps to the application after some time if it does not receive an external CAN based trigger. My application also has logic in it to jump to the kernel at any time. The application will write a known password to a location in RAM before jumping to the kernel. The kernel uses this password to determine if it was just called from the application or if it just came from a cold start.
My kernel was created using the f2803x_flash_kernel example in C2000Ware.
This all works perfectly, with one strange behavior. If I jump to the kernel from the application and program a new application via CAN, the last step the kernel takes is to jump to the entry point, which it does. However, if I enter the kernel via a cold start and then flash an application, it will not jump to the application. However, if I power cycle the device, then it will run the application just fine (after spending some time in the kernel until the timeout).
There should be no functional difference between these two situations. The last step should always be to jump to the newly programmed application's entry point.
Any idea what could be causing this, or where to start looking?