UART bootloader for baby boom Loads a flash image over a UART to the i.MX series of microprocessors. Important notes: * The board must be in UART Boot mode * The i.MX processors default to 115200-8-n-1. * If a flash image works for EXTERNAL FLASH boot, it does not have a header. A header must be added to make it work right for UART boot. * The header length is 32 bytes. * The header format is struct { UINT32 app_start_address; UINT32 app_barker; UINT32 csf_ptr; UINT32 dcd_ptr_ptr; UINT32 another_security_pointer; UINT32 dcd_ptr; UINT32 app_dest_ptr; UINT32 junk; }; Since our flash image must be loaded at 0x83f00000, the header looks like this: header = { (0x83f00000-32), 0x000000b1, 0x0, 0x83f00000-0x20+0x14, 0x0, 0x0, 0x0, 0x0 } However, the program that Jim Kenny sent, make it the following: header = { (0x83f00000-32), 0x0, 0x0, 0x83f00000-0x20+0x8, 0x0, 0x0, 0x0, 0x0 } I don't know which is right, or if it matters, since we don't have a DCD. The 2nd field (the barker), is a special code that says this is a valid flash image. If during internal boot from external flash, the barker isn't found, UART Boot starts. This is to allow for factory programming of flash. Once the header is prepended to the flash image, it can be loaded. Our image MUST be loaded at 0x83f00000. In order for this to happen with the header, the load address is 0x83f0000-0x20 (i.e. the start of the flash image still starts at 0x83f00000). The header prepending and image load address should all be done in the loader, rather than placed in the load image. This will be easy to handle in software. To look at the header, use imx25_bootloader.bt with '010 Editor'