1a7f0689ab
Devcontainer now grants libusb access to the FT2232H so iceprog (bitstream) and pyftdi (FT2232H EEPROM) run inside the container: - devcontainer.json: --privileged + /dev/bus/usb bind mount - Dockerfile: sudo (NOPASSWD for vscode; USB nodes are root-owned), libusb-1.0-0, libftdi1-2, pyftdi Add the flash-re-bba-rb skill documenting the procedure (bitstream via best swept seed, optional EEPROM string, troubleshooting, guardrails) and flash_ftdi_eeprom.py (pyftdi, backup-first, dry-run default) + ftdi_eeprom.conf value spec. Bring-up on the repaired V1 unit: bitstream flash VERIFY OK (iceprog build/seed4/top.bin, capture 58.36 MHz). EEPROM product string CANNOT be programmed on V1 — U7 is a 93LC46B (128 B), too small for the FT2232H, which needs a 93LC56B (256 B); the 128 B chip mirrors and the config write fails verify. This overturns the old REVIEW note "93LC46B = correct for FT2232H" (that only checked ORG, not size). Board still works blank -> ROM defaults; iceprog + UART unaffected. Documented in REVIEW.md + TODO.md (swap U7->93LC56B for V2); flash_ftdi_eeprom.py detects the mirroring and refuses the write. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
33 lines
1.2 KiB
JSON
33 lines
1.2 KiB
JSON
{
|
|
"name": "Amaranth HDL - IceBreaker",
|
|
"build": {
|
|
"dockerfile": "Dockerfile",
|
|
"context": ".."
|
|
},
|
|
"remoteUser": "vscode",
|
|
"workspaceFolder": "/workspace",
|
|
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached",
|
|
"mounts": [
|
|
"source=${localEnv:HOME}${localEnv:USERPROFILE}/.claude,target=/home/vscode/.claude,type=bind,consistency=cached",
|
|
"source=/dev/bus/usb,target=/dev/bus/usb,type=bind"
|
|
],
|
|
// --privileged + the /dev/bus/usb bind mount give libusb (iceprog, pyftdi)
|
|
// access to the FT2232H once it is usbipd-attached into WSL2. Attach the
|
|
// device on the Windows host BEFORE opening/rebuilding the container:
|
|
// .devcontainer/attach-icebreaker.ps1 (run as Administrator)
|
|
// New devices attached after start still appear (the bind mount is live).
|
|
"runArgs": ["--privileged"],
|
|
"customizations": {
|
|
"vscode": {
|
|
"extensions": [
|
|
"ms-python.python",
|
|
"ms-python.pylance",
|
|
"anthropic.claude-code"
|
|
],
|
|
"settings": {
|
|
"python.defaultInterpreterPath": "/opt/venv/bin/python"
|
|
}
|
|
}
|
|
}
|
|
}
|