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
.