Introduction.
ROBOOT (Robust Bootloader) is a software component that makes it easier to write a robust and reliable bootloader for any embedded microcontroller application. Currently, ROBOOT supports the following microcontroller families:
ROBOOT is almost everything you need to write your own bootloader, but it's not a bootloader itself. It's rather a set of tools that minimize development time and provides common way of organising things.
The basic idea.
When you write an embedded application you usually cross-compile it on a PC platform and then write it into destination memory on the target board. The application is written using using a JTAG or any other FLASH/EEPROM/etc. programming tool. Many times it is necessary to update your application without connecting such external equipment. A good example is a system running in a sealed enclosure, where you don't have easy access to the programming interface. This is where bootloader comes to rescue. A Bootloader is a small program that runs on your CPU and handles loading of the application code. Very often such bootloader can accept new application code from some communication interface (serial port, SD card etc.) and write it into a non-volatile memory installed on the embedded system for future execution. It actually realizes software-updating. ROBOOT is a set of tools that help in development of such bootloading solutions.
Architecture.
A compiled embedded application is transformed into a bootloader image (this step includes optional data protecting). This file is then downloaded into an embedded system using some communication interface. The image is intercepted by a bootloader, and processed by ROBOOT tools. This processing includes decoding and decrypting the data, verification of it's integrity and compatibility with the target embedded system. It also includes the actual writing of the new app into non-volatile memory. In such scenario, ROBOOT handles creation of bootloader images, decoding it in embedded system and writing data into destination memory. It also provides some examples on how to realize the communication and main bootloader control flow, but it's so application-specific, that we decided to leave it to the developer.
Important definitions.
What's inside.
ROBOOT is distributed as source code. The package includes:
Components.
ROBOOT is modular. It consists of several components: