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
Install esptool via pip.
pip install esptool -
2
Download
firmware.binfrom the project's GitHub releases page. -
3
Find your serial port:
- macOS →
/dev/cu.usbmodem… - Linux →
/dev/ttyACM0 - Windows →
COM3or similar (check Device Manager under Ports)
- macOS →
-
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
Offset warning: Use
0x10000for CrossPoint and its forks — never0x0, which overwrites the OEM bootloader. Exception: Microreader ships a full image that flashes to0x0— 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.