{
 "tag": "mpremote",
 "kind": null,
 "product": null,
 "used_by": [],
 "parts": [],
 "notes": [
  {
   "handle": "sargbench1",
   "id": "a-dev-serial-by-id-path-is-not",
   "title": "A /dev/serial/by-id path is not stable across firmware states, and mpremote reports a path that does not exist as one that is busy",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "resetting-a-micropython-board-in-a-tight-loop",
   "title": "Resetting a MicroPython board in a tight loop wedges it, because the reconnect races the USB re-enumeration",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "everything-that-does-not-rescue-a-hung-rp2350",
   "title": "Eight software ways to rescue a hung RP2350, all of which fail, tested at three privilege levels",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "driving-the-micropython-friendly-repl-with-a-long",
   "title": "Driving the MicroPython friendly REPL with a long single-line command over raw pyserial hangs an RP2350; mpremote's flow-controlled raw-paste mode does not",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "a-hung-rp2350-running-micropython-still-enumerates-over",
   "title": "A hung RP2350 running MicroPython still enumerates over USB, because the USB stack is serviced from an interrupt and not from the dead main loop",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "machine-bootloader-always-raises-oserror-errno-5-through",
   "title": "machine.bootloader() always raises OSError Errno 5 through mpremote \u2014 that traceback is success, not failure",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "mpremote-run-drives-a-circuitpython-board-with-no",
   "title": "mpremote run drives a CircuitPython board with no USB mount and no root \u2014 but mpremote fs does not",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "host-permissions-required-for-automated-pico-2-usb",
   "title": "Host permissions required for automated Pico 2 USB reflash",
   "status": "provisional"
  },
  {
   "handle": "sarg",
   "id": "esp32-s3-cdc-needs-5s-quiet-between-tool-sessions",
   "title": "Fix for \"could not enter raw repl\" and mpremote exec hanging forever on ESP32-S3 USB CDC \u2014 needs ~5 s quiet between tool sessions",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "hard-reset-before-every-run-soft-reset-does-not-clear-sensor-state",
   "title": "Hard-reset (machine.reset / mpremote reset) before every run on ESP32-S3 camera board \u2014 soft reset leaves wedged sensor state",
   "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": "never-use-mpremote-mount",
   "title": "mpremote mount stalls mid-import over lossy USB CDC and strands ESP32-S3 interpreter with camera live",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "openmv-protocol-stop-exec-soft-reboots-deploy-flash-main-py",
   "title": "Stopping or exec'ing a script over OpenMV Protocol V2 soft-reboots the camera into flash main.py \u2014 deploy to /flash/main.py and reset+attach instead",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "update-openmv-n6-firmware-from-the-cli-without",
   "title": "Update OpenMV N6 firmware from the CLI without OpenMV IDE (machine.bootloader + bundled dfu-util)",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "waveshare-esp32-s3-cam-gc0308-micropython-camera-init-pin-map",
   "title": "Working MicroPython camera init for Waveshare ESP32-S3-CAM with GC0308 \u2014 exact pin map, RGB565 (no JPEG), VGA max, warm-up frames",
   "status": "working"
  }
 ]
}