CC Bootloader is a simple USB bootloader for the CC1111 microcontroller (and probably others in the family e.g. CC2511). It allows the update of the microcontroller firmware over its USB port. It also supports reading and writing to the flash memory of the microcontroller e.g. for user data storage.
The bootloader consists of two components, a piece of firmware that is flashed onto the device and a python utility for downloading code and manipulating the flash memory.
The first step is to flash your device with the
file. Once the device is flashed with this firmware it will identify itself
over USB as a CDC-class device which means it should show up as a serial port
without requiring any drivers on Linux and Mac OS X. Windows users should use
CCBootloader.inf driver file in the
If you have downloaded a release version of CC Bootloader it will include a
CCBootloader.hex file that you can simply flash onto your device. If you
have downloaded a development version then see the Building section below to
CCBootloader.hex file. You may also want to build your own version
to enable or disable certain features.
You can now use the bootloader.py python script to download your payload code.
This script requires the pySerial library.
If you have
easy_install then installing pySerial should be simple:
sudo easy_install pyserial
For usage instructions of this script, run the script with no arguments:
Preparing your user code for usage with the bootloader is very simple. All you
need to do is set your linker to start the code section at a higher location
in memory specified by the
USER_CODE_BASE define in
src/main.h. For an
example of this see the
Makefile file in the
This is the relevant line:
LDFLAGS_FLASH = ... --code-loc 0x1400 ...
This requires sdcc (Small Device C Compiler). Then it should be as simple as issuing
from the root directory of the project.
The only option that can currently be enabled or disabled is weather to start
running the user payload code after a certain timeout with no command issued
over USB. Once a USB command is issued this timeout will be canceled and a
command must be issued to explicitly start the user code. This option is
src/main.h. Just comment or uncomment this line:
You may also change the length of the timeout (default 10 seconds):
#define TIMER_TIMEOUT 229 // 10s timeout
Please note that if you make changes to the bootloader you may need to adjust
the value of
USER_CODE_BASE. You will need to do this if the linker
complains that it has run out of space. This value muse be a multiple of 1,024
so that the user code begins on a page boundary.
You must reflect this change in several places:
Change the value of
Change the value of
Change all the lines similar to
src/start.asm. The constant
0x1400should be changed to match
+0x??part should be unchanged.
Hopefully step three will not be needed in the future when I find a better way to implement this part of the code.
If you want the bootloader to only be invoked under certain conditions, e.g.
the presence of USB power then please modify the
All the board specific code is in
hal.c so make sure to take a look at that
if you are porting the code to a new board.