Getting Started with Firmware Development

Here’s some quick info for people with GreatFETs who want to get started with firmware development.

Fresh install

To get started, you will need to install the dependencies:

sudo apt-get install gcc-arm-none-eabi libnewlib-arm-none-eabi cmake make dfu-util python-setuptools python-yaml
pip install pyyaml

Acquire the code by cloning the repository:

git clone --recursive https://github.com/greatscottgadgets/greatfet.git

Updating your repository

You should already have the prerequisites installed as above. Now update the GreatFET repository that you have previously cloned:

cd greatfet
git pull
git submodule update

Installing host tools

The host tools are written in Python. To install them, run the following from the root of the cloned repository:

pushd libgreat/host/
python setup.py build
sudo python setup.py install
popd

pushd host/
python setup.py build
sudo python setup.py install
popd

Building and flashing firmware

The firmware currently constitutes two parts, libopencm3 and greatfet_usb. We build the library first, then the firmware on top of it:

cd firmware/libopencm3
make
cd ../greatfet_usb
mkdir build
cd build
cmake ..
make

This will produce a file named greatfet_usb.bin which can be written to a GreatFET One using greatfet_firmware -w greatfet_usb.bin.

If you need to recover from an empty flash or non-functional firmware, you will need to use DFU to recover. Remember, if the firmware written to flash was non-functional, the DFU version will be too, you will need to return to a known good version to restore GreatFET.

To write the file, first hold the DFU button while resetting the board, lsusb will show a line such as Bus 002 Device 007: ID 1fc9:000c NXP Semiconductors, which is the NXP LPC4330 in DFU mode. You can write the firmware to the GreatFET One’s RAM using greatfet_firmware -V greatfet_usb.bin. The firmware will run immediately. If you wish to run from ROM you then need to use greatfet_firmware as above.

Re-Building and flashing firmware

When rebuilding software the following is recommended

cd firmware/libopencm3
make clean
make
cd ../greatfet_usb
mkdir build
cd build
cmake ..
make clean
make

This will produce a file named greatfet_usb.bin which can be written to a GreatFET One using greatfet_firmware -w greatfet_usb.bin.