Desktop application for programming TinyFPGA boards. Updated to python3 and to support QuickLogic's QuickFeather.
Note: This repository uses sub-modules for some of the functionality. Using the "Download ZIP" functionality does not package these necessary sub-modules. To use this project, please follow the instatllation instructions given below.
Clone the repository and install the tinyfpgab dependency
git clone --recursive https://github.com/QuickLogic-Corp/TinyFPGA-Programmer-Application.git pip3 install tinyfpgab
- Connect the QuickFeather board, and set it to flash mode.To put it into flash mode, press the RST button, and the LED should turn blue and start flashing.Press the USR button within 5 seconds of pressing the RST button. The LED will turn green and go into breathing mode.At this point, run
lsusb
on the terminal.lsusb
should contain an entry similar to the following:Bus 002 Device 029: ID 1d50:6140 OpenMoko, Inc.
orBus 002 Device 029: ID 1d50:6130 OpenMoko, Inc.
If the OpenMoko device is not present, then run the following commands.pip3 install apio apio drivers --serial-enable
You should see:Serial drivers enabled Unplug and reconnect your board
and then check the output oflsusb
contains an entry as shown above. - It is recommended to set up an alias to simplify programming using the editor of your choice to edit
~/.bashrc
:Change /PATH/TO/BASE/DIR/ to wherever you cloned this git repo.alias qfprog="python3 /PATH/TO/BASE/DIR/TinyFPGA-Programmer-Application/tinyfpga-programmer-gui.py" source ~/.bashrc
NOTE
qfprog --port /dev/ttyX --bootloader /path/to/latest/qorc-sdk/qf_bootloader.bin --mode m4
--mode
and the --appfpga
options will have no effect.Help is available by running with the --help parameter:
python3 tinyfpga-programmer-gui --help
or, if you have already setup the alias
qfprog --help
usage: tinyfpga-programmer-gui.py [-h] --mode [fpga-m4] [--m4app app.bin] [--appfpga appfpga.bin] [--bootloader boot.bin] [--bootfpga fpga.bin] [--reset] [--port /dev/ttySx] [--crc] [--checkrev] [--update] [--mfgpkg qf_mfgpkg/] optional arguments: -h, --help show this help message and exit --mode [fpga-m4] operation mode - m4/fpga/fpga-m4 --m4app app.bin m4 application program --appfpga appfpga.bin application FPGA binary --bootloader boot.bin, --bl boot.bin m4 bootloader program WARNING: do you really need to do this? It is not common, and getting it wrong can make you device non-functional --bootfpga fpga.bin FPGA image to be used during programming WARNING: do you really need to do this? It is not common, and getting it wrong can make you device non-functional --reset reset attached device --port /dev/ttySx use this port --crc print CRCs --checkrev check if CRC matches (flash is up-to-date) --update program flash only if CRC mismatch (not up-to-date) --mfgpkg qf_mfgpkg/ directory containing all necessary binaries
The programmer allows you to specify various options:
- The
--port port-name
option is used to tell the programmer which serial port the QuickFeather board is connected to. The form of port-name varies depending on the system:COM##
on PC/Windows/dev/ttyS##
on PC/wsl1/Ubuntu18+ (where the ## is the same as the COM## shown by device manager under Windows)/dev/ttyACM#
on PC/Ubuntu18+ - The
--mode [operating-mode]
tells the programmer to set the "operating mode" for the bootloader to use.The options currently supported are:--mode m4
,--mode fpga
,--mode fpga-m4
This is used to let the bootloader identify the use case, and load the images accordingly.If--mode m4
: then the bootloader will only load the m4app binary that has been flashedIf--mode fpga
: then the bootloader will only program the fpga using the appfpga binary that has been flashedIf--mode fpga-m4
: then the bootloader will program the fpga using the appfpga binary and then load the m4app binary that has been flashedNOTE 1. The bootloader needs to be updated first before flashing any appfpga or m4app images!Example:qfprog --port /dev/ttyX --bootloader /path/to/latest/qorc-sdk/qf_bootloader.bin --mode m4
If not, then the--mode
option has no effect, and it always acts as if--mode m4
is specified.NOTE 2. The--mode
argument is mandatory and must be always specified. The
--m4app app.bin
tells the programmer to program the file app.bin as the m4 applicationThe
--appfpga appfpga.bin
tells the programmer to program the file appfpga.bin as the application fpga binary- The
--reset
option tells the programmer to reset the board, which will result in the bootloader being restarted, and if the user button is not pressed, the bootloader will then laod and start the most recent m4app.Example:qfprog --port /dev/ttyS8 --m4app output/bin/qf_helloworldsw.bin --reset --mode m4
will program the m4app with qf_helloworldsw and then run it The
--crc
option simply prints the crc values for each of binaries that are programmed into the flash memory- The
--checkrev
option compares the crc for a binary specified as an option to the binary file progammed into the flashExample:qfprog --port /dev/ttyS8 --m4app output/bin/qf_helloworldsw.bin --checkrev --mode m4
will compare the crc for file output/bin/qf_helloworldsw.bin with the crc for the binary programmed into the m4app location of the flash memory The
--update
option causes the progammer to check the crc of any specified binary against the crc of the binary progammed into the flash, and only programmer the specified binary if it the crc is different
Danger Zone
- The
--bootloader boot.bin
option tells the programmer to program the file boot.bin as the bootloader application.If the programming fails for any reason, or the boot.bin file doesn't work as expected the QuickFeather will become non-functional and only recoverable by using J-LINK. - The
--bootfpga fpga.bin
option tells the programmer to program the file fpga.bin as the fpga image for the bootloader.If the programming fails for any reason, or the fpga.bin file doesn't work as expected the QuickFeather will become non-functional and only recoverable by using J-LINK. - The
--mfgpkg mfgpkg/
option can be used to update all of the QuickFeather firmware or restore it to the factory delivered state.The programmer expects the mfgpkg/ directory will contain qf_bootloader.bin, qf_bootfpga.bin and qf_helloworldsw.bin.The recommended update method is to use the --update option with the --mfgpkg option
The 5 bin files are:
- bootloader
- bootfpga
- m4app
- appfpga
- appffe (for future use)
The flash memory map defined for q-series devices is: