Programming QuickFeather FAQ

Post Reply
Posts: 7
Joined: Thu May 14, 2020 2:50 am

Tips on programming and recovering a Quickfeather board

1. How do I program my QuickFeather board ?
2. Where do I get the manufacturing Binaries to program the QuickFeather with?
3. I bricked my board, how do I recover the bootloader images?
4. How do I download and test an FPGA and M4 Application without programming the FLASH?

1. How do I program my QuickFeather board ?
The QuickFeather contains a bootloader and an FPGA IP image that allows the loading of user created images into the SPI Flash for execution on the EOS-S3.
The tinyfpga-programmer is a python script has been modified to support the Quickfeather board and program the onboard SPI Flash device.
Tinyfpga-programmer is available at ... pplication and can be downloaded wit hthe following command:

Code: Select all

git clone --recursive
Execution to of tinyfpga-programmer may require the following commands to install the proper modules

Code: Select all

sudo apt-get install python3
sudo apt-get install python3-pip       
sudo apt-get install python3-serial
sudo apt-get install python3-tk
python -m pip install tinyfpgab
With the QuickFeather board connected via USB, press the reset button -- the Blue LED Flashes. After 5 seconds the bootloader will load and run the M4 Application. If the User button is pressed while the Blue LED is flashing, the bootloader enter flash programming mode and the Green LED will begin pulsing.

For Linux systems the QuickFeatherboard will probably be present as /dev/ttyACM0.
On WSL (Windows Subsystem for Linux) systems it will be /dev/ttySxx where the xx is the COM port that the Windows Device Manager assigned it.
Also depending on the permissions and groups the programming command my require a sudo prefix.

The Linux command for programming the m4app is as follows: (dev/ttyXXX is the serial port that Quickfeather is assigned to)
The Linux command line is

Code: Select all

$ [sudo] python3 --port=/dev/ttyXXX --m4app <path_to_binary_to_program>
The Windows command line is

Code: Select all

c:\Users\qf-user\TinyFPGA-programmer> --port=COMXX --m4app <path_to_binary_to_program>
2. Where do I get the manufacturing Binaries to program the QuickFeather with?
The current manufacturing binaries are in github at ... -dev-board
They are in the binaries directory which contains files for the bootloader (M4-code), the fpga during boot (USB ip for the embedded FPGA), A simple M4 Application program, and a recovery file for use with JLINK to restore the SPI flash.
The most recent versions of the bootlooder, flash loader and FPGA images are available at ... l-binaries

3. I bricked my board, how do recover the bootloader images?
If your Quickfeather doesn't boot properly it may have a corrupted bootloader or USB eFPGA image in its SPI flash memory.
The recovery of a QuicKFeather board requires the use of JTAG 2 wire program.
JLINK is reccommended, the software and instructions are available at ... tationPack .
To enable JTAG access to the EOS-S3, install the two jumpers J1 and J7. J1 and J7 are next to the 10 pin SWD header (J6) the jumpers install perpendicular to the long side of the board.
Connect the debugger to J6.
Quickfeather documentation is available at ... -dev-board
Once the jumpers and SWD debugger is connected, connect the Quickfeather to a USB port for power and tinyfpga-programmer connectivity.

The following command sequence is for a Seeger JLINK debugger.
1. Enter 'Jlink" at a shell prompt.
2. At the Jlink prompt type "connect", select CORETEX-M4 as the device
2. For Target Interface select "S" for SWD
3. For speed the default value is sufficient
4. type 'r' to reset the target
5. type "loadbin ql_loadflash.bin 0x0" to load the recovery program.
6. type "r" to reset the target
7. type "g' to start the loadflash program running. The Green LED should be breathing.

Use the tinyfpga-programmer steps to program the bootloader and the eFPGAboot image.
1. find the serial port (COMxx on windows, /dev/ttySxx on WSL, or /dev/ttyACM0 on ubuntu)
2. from the directory with the recovery binaries type the following command
[sudo] python3 --port=/dev/ttySxx --bl qf_bootloader.bin --bootfpga qf_bootfpga.bin
3. After the programming is complete, remove J1 and J7 straps and the J6 SWD cable.
4. Press the reset button - Blue LED is flashing, press the User buttionwithin 5 seconds for programming M4 applications or let the bootloader load the M4 app and begin execution of the application.

4. How do I download and test an FPGA and M4 Application ?
  • The simplest way is to use the TinyFPGAProgrammer to program the M4application and eFPGA image into the onboard SPI Flash, Then simply reseting the board and waiting the 5 seconds for the boot loader to load the M4App transfer control over to you application. This method is easy, but interactive debugging with breakpoints is not possible, embedded printf's and/or logic analyzers may be the only way to observe system behavior.
  • To perform more interactive debugging via an SWD interface such as JLINK. a couple of options are available. The eFPGA image can be programmed into the SPI flash and an M4 image can be downloaded via SWD and standard software debugging with GDB can be used. This method requires the debugger support GDB and that the M4 application loads the eFPGA from the SPI flash. An example of M4 application loading from SPI flash is in the qf_bootloader application in the qorc-sdk GitHub repository at
  • For applications that are more fluid with change activity on both the eFPGA and the M4 application, embedding the FPGA bitstream into the application is an easy and efficient way to develop. One of the symbiflow outputs from compiling rtl is header file that defines the bitstream as a data array that can be included into the M4 application program. The M4 application with the programming data can be downloaded via SWD and normal debugging can used. An example of this method is in the qf_advancedfpaga application in the GitHub repository mentioned above.
  • And additional output of the symbiflow eFPGA compilation process is a JLINK command file that contains the JLINK commands required to configure the eFPGA. This command file can be used with JLINK to directly configure the eFPGA, or it can be adapted to work with other SWD probes and debuggers for configuring the eFPGA. Instructions on use of this file can be found in the QuickFeather Development Kit User Guide ( ... rGuide.pdf
Post Reply