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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user