Skip to content

Breaking Changes

Henrik Olsson edited this page Aug 31, 2026 · 1 revision

Firestarter EPROM Programmer


Breaking Changes

Changes that require action when upgrading. Newest first.

The firmware and the CLI are upgraded together. Every wire-protocol change below breaks mixed versions — a new CLI cannot drive old firmware, and old firmware cannot be driven by a new CLI. A mismatched pair fails with a timeout or a decode error rather than misbehaving quietly.

pip install --pre firestarter && firestarter fw -i --pre

All of these are beta-only. Nothing is promoted to stable without operator authorization.


v1.32 — chip database

The database stores numbers, not unit-suffixed strings

vcc / vdd / vpp ("5V") and pulse_duration ("100 us") are replaced by vcc_mv, vdd_mv, vpp_mv and pulse_duration_us, holding integers (5000, 100). There is no tolerant reader for the old schema — this is a clean break by design.

If you have a ~/.firestarter/database.json override written against the old schema, it will no longer load. The failure is loud — a missing key raises rather than silently resolving to a valid-looking 0.

Upgrade: rewrite your override with the new key names and integer millivolt / microsecond values.

AT28C-family VCC now reports 5.0 V

firestarter info on an AT28C-family part — and 55 other EEPROMs sharing the same decode condition — previously reported VCC: 4.0v and now reports VCC: 5.0v.

This is a data correction, not new decoding. Upstream's vcc field for these chips was the programmer's low-margin verify rail, not the chip's operating supply, and Firestarter was surfacing it as if it were VCC. The corrected value is the chip's own already-decoded operating-supply field. The decode table itself is unchanged.

This does not fix, and does not claim to fix, any write-path failure. vcc never crosses the wire to the firmware — it is display-and-data only.

AT28C010-class parts write with a 128-byte page

The database now delivers a per-chip page size for the 18 chips whose upstream record is natively protocol 0x0D. 15 move from the firmware's 64-byte floor to their datasheet 128-byte page; 3 are corroborated at 64 and unchanged. Firmware receiving no page-size field keeps the conservative 64-byte floor, so an older host still issues legal write cycles.

This does alter write behaviour for those 15 parts, and it is software-proven and unvalidated on silicon — no physical AT28C part was tested. Those parts issue half as many page-write cycles, so writes may complete faster; nothing else about the command surface changes.

AT28C256 is unaffected — its upstream record is not natively 0x0D and its page size was already 64. Nothing here explains any failure reported against it. Protocol 0x0D remains unverified and no chip's support status changed.


v1.20 — algorithm is the only dispatch key

The host-to-firmware JSON command no longer carries a type field (the old mem_type integer). algorithm is now the only value the firmware uses to decide how to program a chip; the mem_type fallback dispatch chain is gone from both sides.

Every chip database entry — built-in or override — must now carry a usable, non-zero algorithm. A chip lacking one is refused by the CLI before any serial byte is sent. There is no silent fallback.

A stale host is not harmful to new firmware. The firmware skips unknown JSON fields, so a type field simply does nothing. The only loss is the fallback path, which was already dead code for every real chip in the database.


v1.10 — COBS framing and CRC8 on the command channel

The host-to-firmware JSON command channel uses COBS framing with a CRC8-CCITT integrity byte. Every command — including the firmware version probe — is wrapped as [COBS(JSON + CRC8)][0x00] and written in a single atomic call. The firmware verifies CRC8 before the JSON parser sees any byte; the previous channel had no checksum.

The legacy plaintext command path is removed from the firmware entirely. There is no plaintext fallback, and no mixed-version interop — a new host cannot drive unframed firmware, and an old host cannot drive new firmware.

Clone this wiki locally