Today I had a discussion with one of my co-worker, on the concept of bootloader. What is a bootloader? I knew that bootloader is firmware, i.e it will be written in assembly language of a particular processor. It allows applications to be loaded on the memory of that processor. So both bootloader as well as the application will stay in memory.
On POR(Power On Reset) or any other kind of reset it is expected that the user application will be executed straightaway. To enter into bootload mode, normally a special command or switch need to be provided on the hardware board. The initialization portion of the firmware will check the switch and based on that it will decide to enter into either bootload mode or application mode.
When there is no application available in the memory it is assumed that the bootloader will get loaded automatically.
We use PIC18F4550 Family of devices from Microchip for our application development. There is a demo board available from microchip, which comes with the bootloader and an example application. User can use the bootloader supplied to load his applications on the board. PIC18F4550 devices are having an USB pheripheral implemented on them. With the help of USB the device get its communication done with the host. i.e PC.
Manytimes depending on the board architecture and processor architecture, the bootloader will be designed. If the non-vovalite( permanent memories like FLASH) memory is implemented inside the micro controller and only internal address bus is available like how it is in most PICs, then a technique called In-circuit programming is used to load the programs on to the FLASH. But, if there external address bus and data bus coming out of the micro, then the techniques would be very much different for progamming the non-volatile memory.
The other part will be the host application which communicates with the board mostly on RS-232 or USB(in case 18F4550 family). There are other communication systems available between the host and the board like Eathernet. Protocols like CAN, Zigbee are normally not used for this kind of situations.
The host application will be running on a PC and will be able load various kinds of HEX files( Examples of HEX formats are INTEX80, Motorol format etc..) on the device/flash.
Otherthings that need to be take care are with respect to memory mappings. The program memory need to be partitioned between bootloader firmware and application software.
For more information on PIC controllers, USB and Bootloader visit www.microchip.com/usb. In next few post I will try to explain how the bootloader is implemented on 18F4550. I am understanding the source code.