Skip to content
fpga/flash programmer
Rust Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
driver Improve udev rules Jun 10, 2019
firmware Report device unique ID as USB serial number Jun 14, 2019
hardware Add updated schematic pdf and PCB png May 15, 2019
scripts Swap to newly-assigned USB PID FF50 May 22, 2019
LICENSE-APACHE Release under open-source licences May 15, 2019
LICENSE-MIT Release under open-source licences May 15, 2019 Update READMEs Jun 13, 2019
ffp_pcb.jpg Add photo of PCB May 7, 2019

FFP: Flash/FPGA Programmer

FFP is a dead-simple USB to bidirectional SPI bridge for programming iCE40 FPGAs and their SPI flash. The hardware is an STM32F042 and not much else. Firmware and host software is written in Rust.

Photo of FFP PCB

See software/ for the host-side software, firmware/ for the embedded device firmware, and hardware/ for the hardware design files.


The FFP r1 hardware uses a 5x2 pin 0.05"-pitch connector, which is also commonly used for Cortex family microcontrollers for SWD and JTAG. The pinout is deliberately compatible (though note RESET is moved) to allow hardware reuse and for compatibility with tools such as TagConnect cables. It would also be possible to add SWD support to FFP without changing the hardware, permitting programming of Cortex-M devices.

    3v3 --|1  2|-- FLASH DI / FPGA DO
    GND --|3  4|-- CLK
    GND --|5  6|-- CS
        x-|7  8|-- FPGA nRST
    GND --|9 10|-- FLASH DO / FPGA DI

This is the same pinout used by amp_flashprog, a custom firmware for Black Magic Probes to bitbang SPI to the same ends.


Software and firmware is licensed under either of

at your option.

Hardware design files are licensed under the Creative Commons Attribution license (CC-BY).

You can’t perform that action at this time.