Table of contents
  1. TL;DR
  2. ⚠️ Critical Safety
    1. Power Disconnection
    2. Voltage
    3. Workspace
    4. EC Firmware
  3. Tool Interchangeability
  4. Recommended Programmers
    1. Tigard (recommended)
    2. CH347F (preferred budget)
    3. CH341A Rev 1.6+ (budget, occasional use)
    4. Raspberry Pi Pico (DIY)
  5. Physical Connection
    1. SPI Chip Pin Mapping (SOIC8)
    2. Wiring Color Reference
  6. Connection Examples
    1. Tigard
    2. CH347F
    3. CH341A Rev 1.6+
    4. Raspberry Pi Pico (serprog)
  7. Backup & Verify
  8. Flashing New Firmware
  9. Troubleshooting
    1. Chip Not Detected
    2. Verification Fails
    3. Partial Writes / Intermittent Errors
    4. WSON8 Package Tips
    5. SPI Clock & Performance
  10. Summary
  11. Component Sources

This is the authoritative reference for safely flashing SPI chips with external programmers. Every board-specific flashing guide links here – read it before you touch any hardware.

TL;DR

Programmer Best for Voltage Speed (16MB read) Cost
Tigard Frequent flashing, debugging 1.8V / 3.3V / 5V ~42s $67-89
CH347F Budget but fast; adjustable VIO 1.8V-3.3V (VIO) ~60s (or ~4s at 60MHz) $5-15
CH341A rev1.6+ Occasional flashing, budget 1.8V / 3.3V (selector) ~240s $5-15
Raspberry Pi Pico DIY / low-cost 3.3V only ~30s $4-10

Before you start: always make two verified full-chip backups to separate locations. Without them, recovery is impossible and we cannot help you.

Quick start (safe minimal steps):

  1. Power off – remove all batteries (including CMOS), disconnect AC, wait 30s.
  2. Confirm clip orientation – match pin 1 (dot) on chip to red wire on Pomona 5250 clip.
  3. Backup and verify – read the full chip and verify the dump before any writes.
  4. Flash – only after verified backups. See Backup & Verify and Flashing below.

If unsure, STOP. Ask for help or measure the chip VCC with a multimeter.

⚠️ Critical Safety

Power Disconnection

Always disconnect all power sources before attaching the clip:

  • Remove batteries (internal, external, and CMOS)
  • Disconnect AC adapter
  • Wait 30 seconds for capacitors to discharge
  • Never connect or disconnect the clip while the programmer is powered on – this can damage your motherboard or SPI chip.

Voltage

Guessing voltage can destroy chips. If you cannot identify the chip or measure its VCC with a multimeter, do not attempt in-system programming – remove the chip or ask for help.

  • Prefer a programmer with reliable voltage control (Tigard, CH347F with VIO, or CH341A rev1.6+ with physical selector).
  • Match voltage to the chip’s datasheet spec, not to “what seems to work.”
  • 1.8V chips require a programmer with explicit 1.8V support – Tigard or CH347F with VIO. Do not use 3.3V-only programmers (Pico, CH347T) for 1.8V targets.

Workspace

  • Use an anti-static wrist strap and mat.
  • Work under good lighting with magnification available.
  • Have isopropyl alcohol and flux handy for cleaning contacts.

EC Firmware

If your board requires vendor-specific EC customizations (keyboard remaps, battery whitelists, power/thermal behaviour), apply those from the vendor BIOS before your first Heads flash. See Prerequisites.

Tool Interchangeability

Board-specific guides use these placeholders in command examples:

  • [flasher]flashrom or flashprog. These tools are interchangeable; most commands work identically in both. Install whichever your distro packages (apt install flashrom or equivalent).
  • [programmer] – your SPI programmer type. Common values: ch341a_spi, ch347_spi, ft2232_spi:type=2232H,port=B,divisor=4, serprog:/dev/ttyACM0. See Connection Examples for the full programmer strings.

Replace placeholders with your actual values. Your board’s specific flashing guide has board-specific commands (chip model, ROM path, dual-chip procedures) that use these placeholders.

Community-tested, ordered by preference. See issue #120 for detailed benchmarks.

  • Cost: $67-89 Voltage: 1.8V, 3.3V, 5V, external target voltage
  • Protocols: SPI, I2C, JTAG, SWD, UART
  • Speed: ~21s (8MB), ~42s (16MB) at default SPI settings; tunable via divisor
  • Reliability: Excellent (4/4 success in community testing)
  • Best for: Development, debugging, frequent flashing, new users

The Tigard’s SPI header matches standard SOIC8 chip pinout, making it easy to attach a Pomona 5250 clip. Also includes logic analyzer and USB debugging.

Buy: Crowd Supply

CH347F (preferred budget)

  • Cost: $5-15 Voltage: Adjustable VIO ~1.8-3.3V (physical selector or exposed VIO pin); typically 5V-tolerant inputs
  • Protocols: SPI, I2C, JTAG (module-dependent)
  • Speed: Default ~15 MHz SPI clock; up to 60 MHz on capable modules. At 60 MHz a 16MB chip reads in ~4s.
  • Best for: Budget users who need speed and adjustable VIO

Critical: Verify the module is a CH347F variant with VIO support. CH347T variants are 3.3V-only. Check seller documentation for a voltage selector switch or VIO pin before purchasing. If unclear, use Tigard or CH341A rev1.6+ instead.

CH341A Rev 1.6+ (budget, occasional use)

  • Cost: $5-15 Voltage: 1.8V, 2.5V, 3.3V, 5V (physical selector switch)
  • Protocols: SPI, I2C
  • Speed: ~120s (8MB), ~240s (16MB); no user-adjustable SPI clock
  • Best for: Occasional flashing, budget users who verify voltage

⚠️ Only use rev 1.6+ modules with a physical voltage selector or regulator circuit. Older generic black CH341 modules output 5V and will destroy 3.3V chips.

CH341A v1.6+ identification

Quick checklist: Look for a voltage selector switch (1.8V/3.3V/5V) or regulator near power pins. If it looks like a generic black module without these, do not buy it.

Raspberry Pi Pico (DIY)

  • Cost: $4-10 Voltage: 3.3V only
  • Protocols: SPI (via serprog firmware)
  • Speed: ~30s (16MB)
  • Reliability: High
  • Best for: DIY enthusiasts, 3.3V-only workflows

Requires serprog-capable firmware flashed to the Pico. Confirm device node (e.g., /dev/ttyACM0). Do not use for 1.8V chips – prefer Tigard or CH347F.

SOIC8 clip orientation

Wiring: VCC (3.3V) to target VCC, GND to GND, MOSI/MISO/SCLK to corresponding flash chip pins. Use short jumper wires, confirm orientation with magnification, and verify voltage with a multimeter before writing.

Physical Connection

SPI Chip Pin Mapping (SOIC8)

Chip Pin Layout (top view, dot / notch = pin 1):
┌─────────────┐
│ 1 ●       8 │
│ 2         7 │
│ 3         6 │
│ 4         5 │
└─────────────┘

1 - CS / CS#    5 - SI / MOSI
2 - SO / MISO   6 - SCLK / CLK
3 - WP#         7 - HOLD#
4 - GND         8 - VCC

Wiring Color Reference

Tested mapping for Pomona 5250 clip and CH341A-style programmers:

Chip Pin Pomona Clip Function Wire Color Programmer Header
Pin 1 (dot) Pin 1 (red dot) CS Red 25XX / CS
Pin 2 Pin 2 SO/MISO Blue DO / MISO
Pin 3 Pin 3 WP# Brown NC
Pin 4 Pin 4 GND Black GND
Pin 5 Pin 5 SI/MOSI Purple DI / MOSI
Pin 6 Pin 6 SCLK Orange CLK
Pin 7 Pin 7 HOLD# White NC
Pin 8 Pin 8 VCC Red VCC

Always verify pin 1 orientation by locating the dot or notch on the chip. Red wire to pin 1.

Connection Examples

Test your programmer connection before attempting reads or writes. Run these from a Linux machine with flashrom installed.

Tigard

sudo flashrom --programmer ft2232_spi:type=2232H,port=B,divisor=4

CH347F

sudo flashrom --programmer ch347_spi
# With higher clock (example):
sudo flashrom --programmer ch347_spi --spispeed 60000

CH341A Rev 1.6+

sudo flashrom --programmer ch341a_spi

Raspberry Pi Pico (serprog)

sudo flashrom --programmer serprog:/dev/ttyACM0

Note: 3.3V only. Verify the Pico is running serprog firmware and the device node matches your system.

Backup & Verify

This is the most important step. Without verified backups, bricked hardware may be unrecoverable.

# 1. Detect the chip
sudo [flasher] --programmer [programmer]

# 2. Read full chip backup
sudo [flasher] --programmer [programmer] --read backup1.bin --chip [chip]

# 3. Inspect the dump (sanity check)
hexdump -C backup1.bin | head -20

# 4. Verify the backup reads back correctly
sudo [flasher] --programmer [programmer] --verify backup1.bin --chip [chip]

# 5. Read a second backup to a different file (paranoia is good)
sudo [flasher] --programmer [programmer] --read backup2.bin --chip [chip]
sudo [flasher] --programmer [programmer] --verify backup2.bin --chip [chip]

Store backups in a safe, separate location. If anything goes wrong or you need to restore stock firmware, these are your only recovery path. If they are lost or corrupted, recovery may be impossible and maintainers cannot help you.

Board-specific regions (GBE/IFD): Some boards store MAC addresses or manufacturing data in chip regions. These are preserved by Heads during normal operation. For advanced selective-region workflows, consult your board’s boards/<boardname> build configuration and issue #120.

Flashing New Firmware

Only proceed after verified backups.

sudo [flasher] --programmer [programmer] --chip [chip] --write firmware.rom --progress

Before writing, confirm:

  • Verified full-chip backup saved to a safe location
  • Chip VCC confirmed with multimeter (or programmer voltage set correctly)
  • Clip seated firmly with clean contacts
  • Correct firmware file for your board (check path and filename)

If verification fails after writing: do not retry. Troubleshoot the connection first (clip seating, voltage, clock speed). See Troubleshooting.

Troubleshooting

Chip Not Detected

  • Check clip connection and orientation (pin 1 alignment)
  • Do not guess voltage. Measure chip VCC with a multimeter.
  • Verify all power sources are disconnected (including CMOS battery).
  • Increase clip contact pressure; clean chip pins with isopropyl alcohol.

Verification Fails

  • Increase clip pressure or re-seat the clip.
  • Clean chip pins and clip contacts with isopropyl alcohol.
  • Reduce SPI clock speed:
    • CH347 / Pico: --spispeed 15000 (or lower)
    • Tigard: increase divisor, e.g. divisor=6 (10 MHz) or divisor=8 (7.5 MHz)
    • CH341A: no clock control; try a shorter/better USB cable or different USB port
  • Check for oxidation on contacts; use flux if needed.

Partial Writes / Intermittent Errors

  • Usually a physical connection issue. Re-seat the clip.
  • Consider a spring-loaded WSON probe or adapter jig for better contact (see below).
  • Use a short, high-quality USB cable.

WSON8 Package Tips

For WSON8 surface-mount packages (no leads):

  • Prefer a spring-loaded WSON8 probe or purpose-built adapter jig with alignment guide. These ensure correct pad alignment and consistent contact pressure.
  • Do not use a standard SOIC/Pomona clip directly on WSON pads – clips slip and fail to make reliable contact. If you must use a clip, use a PCB adapter designed for WSON.
  • Use a spring-assisted guide or 3D-printed jig to hold the probe steady during long operations.
  • Start by reading a backup and verifying it to confirm reliable contact before committing to a write.

WSON8 Probe

See issue #120 for community photos of spring-guided probes and jigs.

SPI Clock & Performance

SPI clock directly affects read/write speed. If you increase the clock, throughput scales roughly linearly – until the connection becomes unstable.

Clock control by programmer:

Programmer Parameter Notes
CH347 --spispeed <kHz> (e.g. --spispeed 60000) Default ~15 MHz, max 60 MHz. Use powers-of-two steps: 60M, 30M, 15M, 7.5M…
Pico (serprog) --spispeed <kHz> 3.3V only
Tigard (FT2232H) divisor=<n> Clock = 60 MHz / n. n must be even (2, 4, 6…). Default divisor=2 = 30 MHz.
CH341A N/A No adjustable SPI clock

If verification fails, reduce the clock (lower --spispeed or larger divisor) until reads/verifies become consistent.

Example (community measurement): CH347F reading GD25LQ128E (16MB) at 60 MHz: read ~4s, erase ~12s, write ~110s, verify ~4s = ~126s total.

Summary

Tigard is the recommended choice: fast, multi-voltage, excellent reliability, debugging features. Worth the cost for anyone flashing more than once.

CH347F is the best budget option when you need speed and adjustable VIO. Verify the module exposes VIO before buying.

CH341A rev 1.6+ is acceptable for occasional use with a physical voltage selector. Expect long read/write times and basic SPI-only operation. Never use old CH341 modules without voltage selection – they can destroy your hardware.

Raspberry Pi Pico is a capable DIY option for 3.3V-only workflows, requiring more setup.

Component Sources