Skip to content

We're upgrading our operations to serve you better. Orders ship as usual from Laval, QC. Questions? Contact us

Bitcoin accepted at checkout  |  Ships from Laval, QC, Canada  |  Expert support since 2016

NERDMINER_LILYGO_USB Warning

NerdMiner – LILYGO T-Dongle-S3 USB Unrecognized

LilyGo T-Dongle-S3 running NerdMiner firmware is not enumerated by the host — Windows reports `Unknown USB Device (Device Descriptor Request Failed)`, macOS shows nothing in `system_profiler`, Linux logs no `new full-speed USB device` in `dmesg`. ESP32-S3 native USB-CDC fails the descriptor handshake, almost always because of (a) USB-3 hub mis-negotiation, (b) charge-only USB-C cable with no D+/D- conductors, (c) stale Windows enumeration state, or (d) physical damage to the USB-A male shell. Recovery via host-side hygiene, ROM-bootloader test, or UART fallback on `TX0` / `RX0`.

Warning — Should be addressed soon

Affected Models: LilyGo T-Dongle-S3 (ESP32-S3-FN8, 0.96" ST7735 80x160, 8 MB flash) running BitMaker-hub/NerdMiner_v2 firmware. USB-A male shell direct to host. Same recovery technique transfers to T-Display S3 and other ESP32-S3 native-USB Nerd-family boards.

Symptoms

  • Plug T-Dongle-S3 into Windows USB port → balloon notification reads `Unknown USB Device (Device Descriptor Request Failed)`, or device appears under `Other devices` with a yellow exclamation in Device Manager
  • Windows shows nothing at all on plug-in — no chime, no Device Manager change, no Event Viewer entry under `System` → `USB`
  • On macOS: `system_profiler SPUSBDataType | grep -i lilygo` returns no results; About This Mac → System Report → USB shows no new device
  • On Linux: `lsusb` does not list a device matching VID `303a` (Espressif Systems); `dmesg | tail -20` shows no `new full-speed USB device` line, or shows `device descriptor read/64, error -71` repeating
  • Power LED on the T-Dongle-S3 is on but the ST7735 0.96" display is black or showing pre-flash factory text — the chip is powered but the host can't see it
  • Same dongle worked previously on the same host, then stopped after a Windows Update, macOS upgrade, or USB hub change
  • Cable in use is a USB-C cable from a phone wall wart (often charge-only with no D+/D- conductors — silently fails enumeration)
  • Plugged into a USB-C-to-USB-A adapter, USB-3 hub, docking station, or laptop's front-panel USB-3 port (highest-failure environments)
  • Switched from a USB-3 hub to a USB-2 host port and the dongle suddenly enumerated — confirms USB-3 host-controller / hub mis-negotiation
  • On Windows, Device Manager view-by-connection shows the dongle under a `Generic USB Hub` with code `43` (Windows has stopped this device) or code `28` (drivers not installed)
  • Holding the `BOOT` button while plugging in does NOT change behaviour — ROM-bootloader USB-CDC should always enumerate, so failure here points to physical USB damage
  • Multimeter on the USB shell `VBUS` and `GND` pads of the T-Dongle-S3 reads `4.6 - 5.1 V` — power is good — but enumeration still fails, isolating the fault to D+/D- signaling

Step-by-Step Fix

1

Move the T-Dongle-S3 from a USB-3 hub or front-panel USB-3 port to a rear-panel USB-2 port directly on the motherboard. ESP32-S3 native USB enumerates reliably on USB-2 host controllers; USB-3 hubs frequently mis-negotiate the descriptor-request handshake. This single move fixes about 40% of `unknown USB device` reports on T-Dongle-S3. If you don't have a desktop, use the USB-2 port (white or black, not blue) on the side of an older laptop.

2

Try a different USB cable, ideally one that came with a known data-capable device. Charge-only USB-C cables from phone wall warts have no D+/D- conductors and silently fail USB enumeration. Confirm a cable is data-capable by plugging it into a phone connected to a computer first; if the phone offers `File Transfer` mode, the cable has data lines. If only `Charging only` appears, replace the cable before doing anything else.

3

Plug the T-Dongle-S3 directly into a rear-panel USB-A port on a desktop motherboard with no extension or hub. Skip your dock, monitor's USB hub, KVM switch — every additional layer is another opportunity for descriptor handshake failure. The T-Dongle-S3 is USB-A male and plugs straight into a host port without any cable. If it enumerates this way, your hub or extension is the fault.

4

Try a different host machine for 60 seconds — borrow a friend's laptop or any second computer with a USB-2 port. If the dongle enumerates on the second host, your original host has a Windows / macOS / Linux driver or registry issue and the dongle is fine. The simplest fix is to reinstall the host's chipset USB drivers from the motherboard or laptop manufacturer's support site.

5

Hold the `BOOT` button on the T-Dongle-S3 while plugging into the host. This forces the ESP32-S3 into ROM-bootloader mode, where the USB-CDC stack lives in mask ROM and cannot be corrupted by any firmware bug. If the dongle enumerates only when `BOOT` is held, your previous firmware was crashing before it could assert the USB pull-up — re-flash via `bitmaker-hub.github.io/diyflasher` and pick the `T-Dongle-S3` variant explicitly (NOT generic `ESP32`).

6

Multimeter VBUS check on the T-Dongle-S3 pads. Probe `5V` to `GND` on the back side pads while the dongle is plugged into a host. Expected `4.6 - 5.1 V`. Below `4.5 V` = cable VBUS damage or undersized host port. Then probe `3V3` to `GND`. Expected `3.20 - 3.35 V`. Below `3.0 V` with VBUS confirmed good = on-board LDO has failed or ESP32-S3 is internally short — Tier 4.

7

Windows: uninstall the unknown device from Device Manager. Open Device Manager (Win+X). Find the T-Dongle-S3 under `Other devices` or `Universal Serial Bus controllers` with a yellow exclamation. Right-click → Uninstall device. Physically unplug, wait 5 seconds, re-plug into a different rear-panel USB-2 port. Windows will rescan and re-enumerate. This clears stale enumeration state from a previous failed plug — the #1 Windows-specific recovery.

8

macOS: reset SMC and NVRAM if persistent. On Intel Macs: shutdown, hold `Shift+Control+Option+Power` for 10 seconds, release, power on. Then reboot and immediately hold `Option+Command+P+R` for 20 seconds, release, let boot normally. On Apple Silicon Macs: shutdown for 30 seconds, then power on (SMC resets automatically). Re-test enumeration. SMC corruption is a known cause of phantom USB enumeration failures.

9

Linux: check `dmesg -w` for `device descriptor read/64, error -71` (`EPROTO`) or `error -110` (`ETIMEDOUT`) while plugging in the T-Dongle-S3. If you see these errors repeating, the host's USB stack is rejecting the descriptor handshake. Disable USB autosuspend with `echo 0 | sudo tee /sys/bus/usb/devices/usbX/power/autosuspend` (replace X with your USB controller index from `lsusb -t`). Most common culprit on Ubuntu and Fedora.

10

Inspect the USB-A shell on the T-Dongle-S3 under magnification. Use a phone macro lens or jeweller's loupe. Look for: bent contact pins inside the shell (re-form gently with a toothpick); cracked solder joints where shell tabs mate to the PCB (reflow with fine-tip iron at 320 °C with flux); scorch marks (Tier 4); a loose wobbling shell (mounting tabs torn from PCB — Tier 4). About 60% of `USB unrecognized` cases on second-hand T-Dongle-S3 boards turn out to be mechanical shell damage from rough handling.

11

Last-resort Windows fallback: install Zadig from `zadig.akeo.ie` and bind WinUSB. With the T-Dongle-S3 in ROM-bootloader mode (hold `BOOT`, plug in), open Zadig, find Espressif VID `303a` PID `1001`, click `Install Driver` and pick `WinUSB`. Use this only as a last resort — it overrides the native USB-CDC class driver and can interfere with normal `esptool.py` use afterward (you'll have to uninstall via Zadig if you want CDC back). Known recovery path for stubborn Windows hosts where Device Manager refuses to bind any driver.

12

Wire UART fallback on `TX0` (`GPIO43`) and `RX0` (`GPIO44`). Open the T-Dongle-S3 plastic shell (pops off, no screws on most revisions). Identify `TX0` / `RX0` on the side pad row using the `Xinyuan-LilyGO/T-Dongle-S3` schematic. Solder three short 24 AWG silicone wires: `TX0` → adapter RX, `RX0` → adapter TX, `GND` → adapter GND. Use a 3.3V FT232RL or CP2102 USB-UART adapter — NOT 5V (will fry GPIOs). Power the dongle through its USB shell from the host. Hold `BOOT`, pulse `EN` low briefly. Run `esptool.py --chip esp32s3 --port <UART COMx> --baud 115200 chip_id`. If chip ID is reported, UART recovery works.

13

Flash via UART at conservative baud. Run `esptool.py --chip esp32s3 --port <UART COMx> --baud 115200 erase_flash`, then `esptool.py --chip esp32s3 --port <UART COMx> --baud 115200 write_flash -z 0x0 nerdminer-t-dongle-s3-v1.6.2.bin` (download matching `.bin` from the BitMaker-hub/NerdMiner_v2 releases page). Full write at 115200 baud on the 8 MB part takes 5-8 minutes. Do NOT bump wires mid-flash. After flash completes, pulse `EN` low to reset; the dongle reboots into the new firmware. If native USB now works, firmware was the problem; if not, UART will keep the board mining forever.

14

Hot-air reflow the USB-A shell joints if Step 10 found cracked solder. Set up preheat-plus-hot-air station: preheat 130 °C bottom-side, top-side hot air at 290-310 °C with a 5 mm nozzle, 30-45 seconds focused on each shell tab in turn. Apply flux first. Avoid blasting the ESP32-S3 module directly — the chip tolerates reflow but small ceramic capacitors around it can tombstone or move. After reflow, retest enumeration from Step 1.

15

Check for burned USB-related eFuses. Run `espefuse.py --chip esp32s3 --port <UART COMx> summary` and inspect `DIS_USB_JTAG`, `DIS_USB_SERIAL_JTAG`, `USB_PHY_SEL`, `DIS_FORCE_DOWNLOAD`. All should be zero on a stock T-Dongle-S3. Any non-zero value = someone burned a USB-related eFuse, which can disable native USB or remap it. eFuses are one-way silicon fuses — once burned, cannot be un-burned. UART will still work, but native USB is permanently gone. Document and continue using UART for all flashing thereafter.

16

Stop DIY and ship to D-Central when: USB-A shell has lifted/torn/peeled pads; visible scorch marks, swollen RF shield, or substrate crack on the ESP32-S3 module; 3V3 rail dead with confirmed VBUS (LDO failure or chip short); UART recovery from Step 12 also fails despite confirmed VBUS, BOOT pull-down, EN reset; `espefuse.py` shows non-zero `SECURE_BOOT_EN` or `FLASH_CRYPT_CNT` (someone burned encryption fuses without giving you the key); you attempted hot-air reflow yourself and moved/tombstoned/lifted the ESP32-S3 module. D-Central stocks every Nerd-family board including T-Dongle-S3 and keeps replacement ESP32-S3-FN8 modules pre-programmed on the bench.

17

D-Central bench protocol: VBUS / 3V3 multimeter check, ROM-bootloader handshake test on a known-good rear-panel USB-2 port, UART chip-ID via the side pad row, `espefuse summary`, then either USB shell reflow / replacement (most cases), full ESP32-S3 module hot-air swap (~10% of cases), or PCB-level repair on lifted pads (rare but doable). Post-repair: clean flash of latest known-good NerdMiner firmware, 60-minute burn-in against `solo.ckpool.org` to verify enumeration stability and hashrate before shipping back.

18

Ship safely to D-Central. ESD bag the dongle, drop into a small padded mailer or rigid box (USB-stick-sized — don't overpack). Include the USB cable you were using (rules out a bad cable). Include a written note: firmware version last flashed (or `unknown` if second-hand), exact host OS + USB port type when failure first observed, whether `BOOT` button was tested, whether UART was attempted. If you soldered UART flying leads, mention so D-Central can remove them. Canada Post small-packet or UPS Ground; D-Central HQ in Quebec receives within 48 business hours.

When to Seek Professional Repair

If the steps above do not resolve the issue, or if you are not comfortable performing these repairs yourself, professional service is recommended. Attempting advanced repairs without proper equipment can cause further damage.

Related Error Codes

Still Having Issues?

Our team of Bitcoin Mining Hackers has been repairing ASIC miners since 2016. We have seen it all and fixed it all. Get a professional diagnosis.