Lets talk about Boot loader in embedded system and its basics.
What is Boot loader in embedded System and its initialization steps?
What happens on power on? What does bootloader do on power on? Read on for answers to these question .
Boot loader is a program which will execute on power-on in an embedded system. The main functionality of the boot loader is to initialize the hardware and make a platform for, and load the Operating system. Hardware initialization includes the CPU, memory controller, UART, etc. As system is up the CPU will be initialized then the memory controller (i.e. DDR controller, Flash controller) will be initialized. The Boot loader code will itself relocate to the RAM and do further hardware initialization like UART, MAC, PCI etc.
The very first initialization code should be from a non-volatile memory on board, which will have the capability of XIP (execute in place). IF you have serial Flash as boot code holder, which cannot be used for XIP, then other options are
In summary
Internal bootloader (IBoot) is present in the IROM memory of the chip and the main purpose of this is to do the critical initializations. The IBoot is divided into following.
Booting procedure:
• Jump to Internal ROM address 0xE8000100.
• Initialize CPU (peripheral port configuration).
• Disable the IROM on region0 i.e. at address 0x00 so that DDR can be configured.
• Initialize DDR memory controller.
• Check for PCIe RC/EP mode and if EP mode is enabled then configure the device properties.
• Check for external booting mode and if it is enabled relocate code from SPI flash and execute it.
• If external booting is not enabled then relocate the IBoot code from IROM to RAM and jump to the start_iboot ().
• Initialize UART with baud rate 57600.
• Initialize the stack.
• Print the IBoot command prompt.
• Now IBoot is ready to execute commands given by the user.
What is Boot loader in embedded System and its initialization steps?
What happens on power on? What does bootloader do on power on? Read on for answers to these question .
Boot loader is a program which will execute on power-on in an embedded system. The main functionality of the boot loader is to initialize the hardware and make a platform for, and load the Operating system. Hardware initialization includes the CPU, memory controller, UART, etc. As system is up the CPU will be initialized then the memory controller (i.e. DDR controller, Flash controller) will be initialized. The Boot loader code will itself relocate to the RAM and do further hardware initialization like UART, MAC, PCI etc.
The very first initialization code should be from a non-volatile memory on board, which will have the capability of XIP (execute in place). IF you have serial Flash as boot code holder, which cannot be used for XIP, then other options are
1. Boot from IROM
2. Boot from SPI flash
IROM code will be a one time programmable on-chip memory. This memory should be enough to hold a minimal boot loader. This memory will have the capability of XIP. On power-up, if boot strap selects this mode of operation IROM code will initialize the hardware. After initialization is over the code will be relocated to DDR.
Basic operations provided in the boot loader will be
1. Memory read
2. Memory write
3. SPI & I2C EEPROM support
4. SPI Flash read, write & erase
5. TFTP support for Upgrade
Algorithm for the boot-up procedure from IROM
1. On power-up IROM will be mapped to address 0x00 by H/W.
2. Read the configuration data from I2C/SPI memory for configuring memory controller and SPI Flash Support.
a. If I2C EEPROM is not present, I2C flag provided by the ASIC will be cleared. Thus boot loader can do a conditional read, either from SPI EEPROM or I2C EEPROM.
b. When neither SPI EEPROM nor I2C EEPROM has the configuration data, default configuration will be used.
3. Configure the memory controller and SPI Flash support
4. The IROM code will be relocated to the DDR
5. Control of execution will be transferred to DDR.
In summary
Internal bootloader (IBoot) is present in the IROM memory of the chip and the main purpose of this is to do the critical initializations. The IBoot is divided into following.
Booting procedure:
• Jump to Internal ROM address 0xE8000100.
• Initialize CPU (peripheral port configuration).
• Disable the IROM on region0 i.e. at address 0x00 so that DDR can be configured.
• Initialize DDR memory controller.
• Check for PCIe RC/EP mode and if EP mode is enabled then configure the device properties.
• Check for external booting mode and if it is enabled relocate code from SPI flash and execute it.
• If external booting is not enabled then relocate the IBoot code from IROM to RAM and jump to the start_iboot ().
• Initialize UART with baud rate 57600.
• Initialize the stack.
• Print the IBoot command prompt.
• Now IBoot is ready to execute commands given by the user.
Comments