I am currently developing on IMXRT1050-EVKB.
Is it possible to have multiple application images stored in external flash (i.e. HyperFlash) and boot from each of them without having to link code to fixed memory addresses?
The idea is to have a L2 boot selecting target image and launching XIP execution.
In case links to examples and/or application-notes will be truly appreciated.
Thanks in advance.
Generally i.MX boot ROM does not support multiple boot, assuming
boot single boot device, boot options are configured, using BOOT_CFG
fuses or GPIO pins. No problems (except size) to have multiple
application images, stored in external boot flash, but - in any case - single
entry point should be located in the IVT. So, further branches should be
performed in boot software.
Note, according to section 8.2 (Overview) in i.MX RT1050 Reference Manual,
Rev. 1, 03/2018: "The boot ROM allows waking up from the low-power modes.
On reset, the ROM checks the power gating status register. When waking from
the low-power mode, the core skips loading an image from the boot device and
jumps to the address saved in PERSISTENT_ENTRY0."
This approach also may be used to call applications.
Have a great day,
Note: If this post answers your question, please click the Correct Answer
button. Thank you!
Thanks for the feedback. I know that ROM boot can access just a single entry point but I was actually discussing about the possibility to have a 2nd level boot doing the jump to target application image.
So the expected boot flow will be:
1) ROM boot launches L2 boot placed in the default external flash entry point;
2) L2 boot selects target image from the ones stored on subsequent flash sections;
3) Target application is executed with XIP fro flash;
I was just wondering if it is possible to build/store multiple application images in different flash sections in a such way that they can be launched with XIP just by jumping to the entry point of each one.
In other words I would like to understand if the memory addresses linked in the application image can be made relative to the entry point (i.e. so that I can store the image in any location of the physical memory) or if they are fixed after build (i.e. in that case I suppose that I need to store the target image in a fixed memory location and always have to copy there a new image from the other sections in case of update).