Correct EEPROM soft-brick record: partial write on undersized U7 kills enumeration

Hardware bring-up correction (Dennis, 2026-08-22): writing the FT2232H product
string to the undersized 93LC46B (U7) does NOT harmlessly fail — the partial,
mirrored write lands a checksum-valid-but-garbage config, and the FT2232H then
FAILS USB enumeration entirely (dead silent, no dmesg attach). It does NOT fall
back to ROM defaults; only a blank/checksum-invalid EEPROM does. The earlier
claim that "a bad EEPROM always falls back and still enumerates" was WRONG.

Recovery (confirmed working): power on with U7 CLK shorted to GND so the FT2232H
can't read a valid config -> forces ROM defaults -> enumerates -> then erase U7.

Updated REVIEW.md, TODO.md, the flash-re-bba-rb skill (do-not-program warning +
recovery, native-Linux troubleshooting), and flash_ftdi_eeprom.py comments/help
to state the soft-brick reality. The script already refuses the write on
mirroring detection; --force now documented as "reproduce the soft-brick".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-22 18:57:52 +00:00
parent 1a7f0689ab
commit 6ba3447e58
4 changed files with 108 additions and 67 deletions
+17 -6
View File
@@ -85,12 +85,23 @@ datasheet extraction, WebSearch/WebFetch for parts and reference designs.
128-byte chip mirrors into the upper half (`has_mirroring=True`); a config
write mirror-clobbers word 0x80→0x00 and **fails verify at word 0x02**; and
`set_property` indexes past byte 128. **Consequence:** the "re-BBA-rb" product
string CANNOT be stored on V1. **Not a functional defect** with U7 left
blank the FT2232H uses ROM defaults ("Dual RS232-HS", 0403:6010), and iceprog
(bitstream flash — verified OK on this unit) + the channel-B UART work
normally. **Fix for a future rev:** fit a 93LC56B at U7 (same SOIC-8, fixed
16-bit org, pin-compatible). Tooling: `hardware/re-bba-rb/flash_ftdi_eeprom.py`
detects the mirroring and refuses the write; `--erase` blanks U7.
string CANNOT be stored on V1 — and worse, **attempting the write SOFT-BRICKS
the FT2232H** (confirmed 2026-08-22): the partial/mirrored write leaves a
checksum-valid-but-garbage config, and the FT2232H then **fails USB enumeration
entirely** (dead silent — no `dmesg` attach at all). It does NOT cleanly fall
back to ROM defaults; only a BLANK or checksum-INVALID EEPROM does that. (An
earlier note here wrongly said a bad EEPROM always falls back and still
enumerates — that is FALSE for a partial write; corrected.)
**RECOVERY (done on this unit, works):** short U7's **CLK to GND while powering
on** so the FT2232H can't read a valid EEPROM → forces ROM defaults →
enumerates → then **erase U7** (`flash_ftdi_eeprom.py --erase --commit`, or
FT_PROG). Classic FTDI EEPROM recovery. With U7 blank the board runs on ROM
defaults ("Dual RS232-HS", 0403:6010); iceprog (bitstream flash — VERIFY OK on
this unit) + the channel-B UART are unaffected.
**DO NOT run the string write on this board.** `flash_ftdi_eeprom.py` now
detects the mirroring and refuses (use --force only to deliberately re-soft-
brick for testing; `--erase` blanks). **Fix for a future rev:** fit a 93LC56B
at U7 (same SOIC-8, fixed 16-bit org, pin-compatible).
- **EE_CS pull-down (R43, 10 kΩ) — ADDED 2026-07-31.** FT2232H DS Table 3.4
states EECS/EECLK/EEDATA are all **"Tri-State during device reset"**, so CS
floats while the FT2232H is in reset. The Microchip 93LC46B DS is explicit: