MocoMakers is creating Fipsy FPGA Breakout Board, a tiny circuit board offering a piece of Field-programmable gate array (FPGA). I worked with FPGA years ago in class projects, but didn't have access to a device after that. I backed the project, and received two Fipsy boards on Jul 20.
Fipsy is a very simple board: there is no power regulator or USB port.
The official method to program the Fipsy is through the SPI port on a Raspberry Pi.
It is easy to setup, and is a good use case for my Raspberry Pi Zero W (paid link), but there is one problem:
It is good practice to power off the circuit when modifying hardware wiring.
However, powering off a Raspberry Pi cleanly requires sending a
shutdown command and waiting for a few seconds.
If I just pull the power cord, I would risk corrupting the filesystem.
ESP32 microcontroller has SPI ports, and can be powered off and restarted very quickly. Can I program Fipsy from an ESP32?
Hardware side is easy. ESP32 has two available SPI ports, HSPI and VSPI, and I connected Fipsy to the Heltec WiFi_Kit_32 (paid link)'s HSPI port. All that remains is deciphering the spaghetti code of the official programmer. After a day of hard work, I got it working:
Code link: esp-fipsy library.
There are a few differences from the official programmers:
- My code is clean. I'm obsessed with this.
- I only write the fuse table to the MachXO2-256. By not writing Feature Row and FEABITS, there's less chance of mistakenly disabling slave SPI port and bricking the device.
- JEDEC parsing and FPGA programming are separate.
- Fuse checksum is verified.