Skip to content

Flash guide · Method 4 of 5

Flash with esptool

~10 min Technical Unlocked X3 & X4

Unlocked devices only

esptool requires USB access — this method only works on unlocked devices. If the web flasher can't detect your device, use the OTA Unlocker instead.

Prerequisites

  • Python 3.x installed
  • pip available
  • USB-C data cable (not charge-only)
  • Device unlocked and awake

Steps

  1. 1

    Install esptool via pip.

    pip install esptool
  2. 2

    Download firmware.bin from the project's GitHub releases page.

  3. 3

    Find your serial port:

    • macOS/dev/cu.usbmodem…
    • Linux/dev/ttyACM0
    • WindowsCOM3 or similar (check Device Manager under Ports)
  4. 4

    Run the flash command, replacing <PORT> with your port from step 3.

    esptool.py --chip esp32c3 --port <PORT> --baud 921600 write_flash 0x10000 firmware.bin
  5. 5

    Offset warning: Use 0x10000 for CrossPoint and its forks — never 0x0, which overwrites the OEM bootloader. Exception: Microreader ships a full image that flashes to 0x0 — always follow each project's README for the exact offset.

Troubleshooting

esptool.py: command not found
Use python -m esptool or python3 -m esptool instead. Or check that your Python Scripts/bin directory is in your PATH.
Failed to connect to ESP32-C3
Try lowering the baud rate: replace 921600 with 460800. Also check the cable and port, and make sure the device is awake.
Permission denied: /dev/ttyACM0 on Linux
Add yourself to the dialout group, then log out and back in.sudo usermod -a -G dialout $USER
No serial ports found on Windows
Install the CP210x or CH340 USB driver for the ESP32-C3. Check Device Manager for an "Unknown device" under Ports.
Device bricked after flashing to 0x0
Writing to 0x0 overwrites the bootloader. Recovery requires a hardware programmer or JTAG. Always use 0x10000 for CrossPoint firmware.

Still stuck, or hit a different error? Browse every fix in the Xteink firmware help & FAQ — searchable by problem.