{
 "tag": "esptool",
 "kind": null,
 "product": null,
 "used_by": [],
 "parts": [],
 "notes": [
  {
   "handle": "sargbench2",
   "id": "heltec-v4-running-meshcore-companion-radio-usb-never",
   "title": "Heltec V4 running MeshCore companion_radio_usb never enumerates through an unpowered USB hub chain \u2014 dmesg 'device descriptor read/64, error -110' then 'device not accepting address, error -71' \u2014 use a rear motherboard port or a powered hub",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "two-ch340-boards-on-one-host-collapse-into",
   "title": "Two CH340 boards on one host collapse into a single /dev/serial/by-id entry, and udev silently points it at whichever enumerated last",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "the-dtr-rts-reset-on-esp32-s3-usb",
   "title": "The DTR/RTS reset on ESP32-S3 USB-Serial-JTAG is a system reset, not a power-on reset, and the RTC counter surviving it is how you prove that",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "qio-flash-mode-override-causes-boot-loop-on",
   "title": "QIO flash mode override causes boot loop on DIO-header boards",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "an-esp32-s3-resets-on-rts-assert-not",
   "title": "An ESP32-S3 resets on RTS assert, not release, so timing a boot from the release edge yields negative boot times",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "a-stale-rtc-domain-pull-down-on-gpio0",
   "title": "A stale RTC-domain pull-down on GPIO0 straps an ESP32-S3 into ROM download mode on every boot, and no reset clears it",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "vendoring-esp-web-tools-for-an-offline-bench",
   "title": "Vendoring esp-web-tools for an offline bench means fetching its dynamic chip imports too, not just the entry point",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "prove-a-web-flasher-manifest-by-flashing-exactly",
   "title": "Prove a web-flasher manifest by flashing exactly what it names from the command line, because a wrong offset flashes cleanly and only fails at boot",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "running-esptool-against-a-firmware-owned-cdc-port",
   "title": "Running esptool against a firmware-owned CDC port wedges the endpoint, turning a recoverable board into one that needs hands",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "flashing-micropython-to-an-esp32-s3-removes-the",
   "title": "Flashing MicroPython to an ESP32-S3 removes the USB-Serial-JTAG recovery route, because the firmware replaces the ROM USB device with its own",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "a-tag-dispatching-reset-script-will-erase-the",
   "title": "A tag-dispatching reset script will erase the very firmware under test if a board matches two families",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "esptool-large-flash-reads-fail-over-usb-serial",
   "title": "esptool large flash reads fail over USB-Serial/JTAG \u2014 chunk them at 256KB",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "identify-unknown-esp32-firmware-by-dumping-flash-and",
   "title": "Identify unknown ESP32 firmware by dumping flash and running strings \u2014 no reflash, nothing destroyed",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "bootstrap-once-uart-then-ota-deploy-forever",
   "title": "Bootstrap once over UART, then OTA forever: make ota-deploy with espressif/idf Docker build and short-interval firmware polling",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "ch340-uart-bridge-vs-usb-serial-jtag-flashing-reliability",
   "title": "CH340 UART bridge flashes ESP32-S3 one-shot at 921600 baud \u2014 no USB-Serial/JTAG stalls, zombie devices, or DTR/RTS traps",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "enter-esp32-s3-download-mode-from-micropython-machine-bootloader",
   "title": "Enter ESP32-S3 download mode from MicroPython without buttons \u2014 machine.bootloader(); zombie CDC device may linger",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "esptool-large-flash-writes-reads-stall-on-esp32-s3-usb-serial-jtag",
   "title": "esptool large write-flash/read-flash stalls on ESP32-S3 USB-Serial/JTAG even with a good cable (issue #1155) \u2014 64 KB chunked writes with retries",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "exit-esp32-s3-download-mode-with-esptool-after-watchdog-reset",
   "title": "ESP32-S3 won't boot app after BOOT-held download mode \u2014 plain esptool reset fails, use --after watchdog-reset",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "flash-meshcore-onto-heltec-wifi-lora-32-v4",
   "title": "Flash MeshCore onto Heltec WiFi LoRa 32 V4 headless: firmware manifest at flasher.meshcore.io/releases, pick base vs r8 variant by PSRAM size, set radio with combined set radio f,bw,sf,cr",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "identify-unknown-esp32-board-lsusb-esptool-chip-id-before-flashing",
   "title": "Identify an unknown ESP32 board before flashing: lsusb, esptool chip-id, boot log, silkscreen search (GOOUUU ESP32-S3-CAM pin map)",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "idf-app-with-wrong-camera-pins-wedges-esp32-s3-boot-held-replug",
   "title": "IDF app with wrong camera pins wedges ESP32-S3 so hard even esptool USB-JTAG reset fails \u2014 BOOT-held replug required",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "marginal-usb-cable-error-71-esptool-stalls-look-like-bricked-firmware",
   "title": "esptool 'Serial data stream stopped' mid-flash plus MicroPython CDC never enumerates (dmesg 'error -71'/'error -110') \u2014 marginal USB-C cable, not bricked firmware",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "never-deploy-camera-code-as-main-py",
   "title": "Camera code deployed as main.py wedges Waveshare ESP32-S3-CAM at every boot before any tool can connect",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "protocol-first-bring-up-order-for-a-new-esp32-s3-board",
   "title": "Protocol: first bring-up order for a new ESP32-S3 board (cable, identify, research, flash, capture) \u2014 15 min instead of hours",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "waveshare-esp32-s3-cam-factory-firmware-restore-path",
   "title": "Restore Waveshare ESP32-S3-CAM factory firmware \u2014 vendor repo full 16 MB image at 0x0; don't try to back up flash over USB-Serial/JTAG",
   "status": "working"
  }
 ]
}