ICEPROG(1)

πŸ’– ICEPROG β€” ok bestie, let's talk flash πŸ’–

So this whole page is the manual for iceprog, and the manual lives in section 1 of the manual pages (that's the "(1)" β€” it's the tool manual, not the config-file one). It's the simple programming tool for FTDI-based Lattice iCE programmers. Periodt. πŸ’…


✨ NAME ✨

iceprog β€” simple programming tool for FTDI-based Lattice iCE programmers 🧚


🌸 SYNOPSIS 🌸

iceprog [options] <filename>

πŸ‘‘ DESCRIPTION πŸ‘‘

Ok so before you go plugging stuff in and yelling at your board, read this, because there are notes and they matter.

Notes for iCEstick (iCE40HX-1k devel board): πŸŽ€

  • An unmodified iCEstick can only be programmed via the serial flash. That's it. That's the rule.
  • Direct programming of the SRAM is not supported. Not "unsupported but you could try" β€” it's just not a thing on a stock board.
  • If you really want direct SRAM programming, then the flash chip and one zero ohm resistor must be desoldered, and the FT2232H SI pin must be connected to the iCE SPI_SI pin. Look, the exact picture is here: http://www.clifford.at/gallery/2014-elektronik/IMG_20141115_183838 β€” go look at it before you get out the soldering iron, fr fr.

Notes for the iCE40-HX8K Breakout Board: πŸ¦‹

  • Make sure that the jumper settings on the board match the selected mode (SRAM or FLASH). See the iCE40-HX8K user manual for details. That's the whole vibe check β€” jumpers and mode have to match or nothing slays.

πŸ’… OPTIONS πŸ’…

  • -d <device-string> β€” use the specified USB device. And the way you write that device string depends on what you want, so:
    • d:<devicenode> β€” give it a device node like this: (e.g. d:002/005)
    • i:<vendor>:<product> β€” give it a vendor and product: (e.g. i:0x0403:0x6010)
    • i:<vendor>:<product>:<index> β€” same thing with an index: (e.g. i:0x0403:0x6010:0) s:<vendor>:<product>:<serial-string> β€” and there's the serial-string flavour too, it's giving very picky-bestie energy.
  • -I [ABCD] β€” connect to the specified interface on the FTDI chip. One letter, A through D. Choose wisely. πŸ’œ
  • -r β€” read the entire flash (32Mb / 4MB) and write it to a file. Big read, big file, iconic.
  • -R β€” read the first 256 kB from the flash and write to file. Same energy, smaller snack. πŸ“
  • -c β€” do not write flash, only verify (check). Look but don't touch, respectfully.
  • -b β€” bulk erase entire flash before writing. Full wipe, no crumbs left.
  • -n β€” do not erase flash before writing. Bold. (You're skipping the erase, so know what you're doing.)
  • -S β€” perform SRAM programming. (Remember the iCEstick notes above, bestie β€” SRAM on a stock iCEstick is a no.)
  • -t β€” just read the flash ID sequence. Tiny little identity check, adorable.
  • -v β€” verbose output. For when you want the program to tell you everything. Obsessed. πŸ”₯

🫢 AUTHOR 🫢

This manual page was written by Ruben Undheim <ruben.undheim@gmail.com> for the Debian project (and may be used by others). Credit where credit is due, always. 🌈


Heads up: those iCEstick SRAM notes and the jumper/mode notes aren't optional lore, they're the difference between "slay" and "why is my board not doing anything". 😭

And that's the whole page, no cap β€” this version is the one from 28 February 2026, and it's the ICEPROG(1) manual. Go flash something cute. πŸ‘‘βœ¨

πŸ“¦ where this page comes from