Skip to content
Notes on flashing the ice40 board(s) by Olimex using a raspberry pi
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
README.org
wiring.jpg

README.org

Notes on flashing the ice40 board(s) by Olimex using a raspberry pi

If you have a raspberry PI around, you can use the flashrom utility with Linux’ /dev/spidev to program a bitstream to your ICE40HX1K-EVB. The following table shows the wiring required for the Pi B+ or 2. I used IDC connectors with a rainbow ribbon for convenient wiring (image below).

Raspi 2/B+ICE40-EVBcomment
173v313v3
18gpio246creset
19mosi8sdo
20gnd2gnd
21miso7sdi
22gpio255cdoneoptional
23clk9sck
24ce010#cd = ss_b
25gnd
26ce1

enable SPI device on the Pi (needs reboot)

echo dtparam=spi=on >> /boot/config.txt

build and install flashrom

git clone https://www.flashrom.org/git/flashrom.git
cd flashrom
make CONFIG_ENABLE_LIBPCI_PROGRAMMERS=no CONFIG_ENABLE_LIBUSB0_PROGRAMMERS=no CONFIG_ENABLE_LIBUSB1_PROGRAMMERS=no install

claim GPIO24 for sysfs-control

echo 24 > /sys/class/gpio/export

Pull GPIO24 low to put the ice40 into reset. The cdone-LED on the board should turn off.

echo out > /sys/class/gpio/gpio24/direction

Read the flash chip at 20MHz (for short cabling)

flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=20000 -r dump

Simply swap -r for -w to write the dump back

flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=20000 -w dump

As generated bitstreams are smaller than size of the flash chip, you need to add padding for flashrom to accept them as image. I used the follwing commands to do that:

tr '\0' '\377' < /dev/zero | dd bs=2M count=1 of=image
dd if=my_bitstream conv=notrunc of=image

Deassert creset to let the ice40 read the configuration from the bus:

echo in > /sys/class/gpio/gpio24/direction

wiring.jpg

You can’t perform that action at this time.