A bootloader enables download of hex-files directly into the flash-memory of a PIC or other microcontroller. The bootloader receives the user program via the PIC’s UART and writes it directly to the program memory (self programming). This feature greatly speeds up the development process, because the chip remains in the target circuit and need not be moved between the target circuit and the programmer. When no bootloader is installed, all memory in the PIC can be utilized for user programs. That is 4 K for the 16F873 (0x000 to 0xFFF). Installing a bootloader means, that some part of the memory is occupied by the bootloader. The user can download his program into the remaining memory space. The bootloader in figure 1 occupy 256 words (0xF00 to 0xFFF), that is 6 % of the memory in a 16F873. The disadvantage of loosing 6 % memory is little compared to the advantage of fast program download and more friendly development routines.
The first 4 words in the flash memory (0x000 to 0x003) contain a jump to the bootloader. The original 4 words are recognized during download and reallocated to the memory space of the bootloader. At boot time, the bootloader waits 200 ms for a download to begin. If no download is detected, the bootloader activates the user program, starting with the first 4 reallocated words and then jumping to the remaining user program.
Programming the bootloader
The bootloader package contains all the software needed. I’ll explain the procedure by giving an example how to program the bootloader version 8.23 into a 16F873.
Choose the hex-file with the right crystal oscillator frequency and the desired download speed. I chose the file 30419-bootldr-v26-16F873-74-04Mhz-19200bps.hex for my 16F873 with 4 MHz oscillator and 19200 bps download.
Load the hex-file into the PIC-programmer and check the fuse settings before programming. I did not want the Low Voltage programming to be on (which it is in the hex-file). If the Low Voltage programming fuse is on, the PIC may become unstable during operation. My recommended fuse settings are shown in figure 2.
Fig. 2. Fuse settings for programming the bootloader
into a 16F873 with 4 MHz oscillator
The fuses selected when programming the bootloader can not be changed later by the downloaded user program. This is because the bootloader does not change the configuration word of the PIC.
Downloading a user program
A PIC downloader is contained in the bootloader software package. The PIC downloader is used for transferring the hex-file from your PC to the bootloader in the target chip. After having programmed the bootloader into the PIC, the download procedure is tested by downloading a suitable program into the PIC. An UART test program for 16F873 and a description of a testboard for 16F873 can be found elsewhere on this site. A test program is also included in the bootloader software package.
Load the hex-file into the PIC downloader (click Search or press F2), activate the downloader (click Write or press F4) and reset the PIC. The reset activates the bootloader and makes it listen for a new download on the serial port. The bootloader and PIC downloader shake hands and then the hex-file is downloaded. After a few seconds – viola – the new user program is running in the PIC.
For more detail: Bootloader for 16F87x PIC Microcontrollers