ftdi: replace proprietary libftd2xx with open-source libftdi1

The Olimex ARM-USB-OCD (and any FT2232 with a custom USB id) couldn't be
enumerated by libftd2xx and needed a manual ftdi_sio unbind. libftdi1
(libusb) opens any VID:PID and auto-detaches the kernel driver.

- rewrite drivers/ftdi_jtag on libftdi1: enumerate a known VID:PID list
  (incl. Olimex 15ba:0003/002b) with per-chip channel counts, open by
  bus/addr + interface, MPSSE via ftdi_write_data/ftdi_read_data (+
  SEND_IMMEDIATE for deterministic reads). MPSSE command building, pin
  map and clocking unchanged.
- CMake: link libftdi1 + libusb-1.0 (pkg-config), drop FTDILIB/FTD2XX
  defines and the libftd2xx.a link; remove the vendored src/libs/libftd2xx.
- registry: NXP LPC2103 (ARM7TDMI-S) entry, IDCODE 0x4F1F0F0F.
- docs updated (deps, layout, decision note, roadmap phase 8).

Validated on hardware: ARM-USB-OCD enumerates, jtag_scan reads the
LPC2103 IDCODE 0x4F1F0F0F, target_info -> [cpu, ARM7] prog: arm_flash.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-24 16:06:52 +02:00
parent 9ad776268e
commit 39963fd6d8
10 changed files with 621 additions and 2580 deletions

View File

@@ -84,11 +84,13 @@ targets:
ir_length: 8
prog: svf
# --- CPU example (ARM7TDMI-S, LPC2148-class) ----------------------
# EXAMPLE entry: verify the IDCODE, IR length and RAM/flash regions
# against your actual part before relying on it. The arm_flash backend
# is not implemented yet (see src/modules/arm_debug/ and CLAUDE.md).
- name: "ARM7TDMI-S (example, e.g. NXP LPC2148)"
# --- CPU: NXP LPC2103 (ARM7TDMI-S) --------------------------------
# IDCODE 0x4F1F0F0F detected on hardware (Olimex ARM-USB-OCD). That's
# the generic ARM7TDMI-S debug-TAP id, shared by many ARM7 parts, so
# the masked match covers any ARM7TDMI-S — adjust ram/flash per part.
# LPC2103: 32 KB flash @0x0, 8 KB SRAM @0x40000000. The arm_flash
# backend is not implemented yet (see src/modules/arm_debug/).
- name: "NXP LPC2103 (ARM7TDMI-S)"
kind: cpu
idcode: 0x4F1F0F0F
idcode_mask: 0x0FFFFFFF
@@ -96,7 +98,7 @@ targets:
ir_length: 4
debug: embeddedice
ram_base: 0x40000000
ram_size: 0x8000
ram_size: 0x2000
flash_base: 0x0
flash_size: 0x7D000
flash_size: 0x8000
prog: arm_flash