Close
0%
0%

ESP32-S3 CH32V003 SWIO Programmer

An ESP32-S3 based SWIO programmer for the CH32V003, with a custom host flasher and verified physical hardware programming.

Similar projects worth following
0 followers
I built an ESP32-S3 based programmer for the WCH CH32V003 using its single-wire SWIO interface. The project includes the ESP32-S3 firmware, Python host flashing tool, hardware documentation, and physical verification on a CH32V003A4M6. The goal is to provide a reusable alternative for programming CH32V003 devices using a general-purpose development board.

Overview

This project implements a CH32V003 SWIO programmer using an ESP32-S3 development board.

The ESP32-S3 communicates with the CH32V003 over the single-wire SWIO interface and provides the programming interface that would normally be handled by a dedicated WCH programmer.

Why I built it

I wanted to see whether a general-purpose ESP32-S3 development board could be used as a reusable CH32V003 programmer instead of requiring dedicated programming hardware.

The implementation was developed and tested on a CH32V003A4M6 and includes ESP32-S3 firmware together with a Python host-side flashing tool.

Hardware

  • ESP32-S3 development board
  • WCH CH32V003A4M6
  • SWIO connection between ESP32-S3 GPIO10 and CH32V003 PD1/SWIO
  • External 4.7kΩ–10kΩ SWIO pull-up to 3.3V
  • Common ground

Verification

The programmer has been tested on physical hardware for CH32V003 detection, flash erase/programming, readback verification, and target reset/run.

A physical motor demonstration was also performed using the programmed CH32V003 to control a CP6208 motor driver.

Software

The project contains:

  • ESP32-S3 programmer firmware
  • SWIO implementation
  • CH32V003 target/DMI handling
  • Python host flashing tool
  • Hardware and protocol documentation

Source code and the latest documentation are available on GitHub:

https://github.com/Ishu1519/esp32s3-ch32-programmer

esp32s3-ch32v003-programmer-source.zip

x-zip-compressed - 1.80 MB - 08/21/2026 at 17:26

Download

  • 1 × ESP32-S3 development board Programmer/controller
  • 1 × CH32V003A4M6 Target MCU
  • 1 × 4.7kΩ–10kΩ resistor SWIO pull-up
  • 1 × CP6208 Motor driver for demonstration
  • 1 × DC motor Physical programming/demo load

View all 6 components

  • Physical Hardware Verification

    Ishu1519an hour ago 1 comment

  • Getting CH32V003 SWIO Working on ESP32-S3

    Ishu1519an hour ago 0 comments

    The initial goal was to program the CH32V003 from a general-purpose ESP32-S3 board.

    The main challenge was getting the single-wire SWIO interface working reliably. After testing the implementation, I was able to communicate with the CH32V003 and complete the programming flow on physical hardware.

    The current implementation can detect the target, erase/program flash, verify the programmed data by readback, and reset the target.

    The project is still ongoing. Future work includes improving signal-integrity validation, testing different wiring lengths and GPIO timing configurations, and expanding compatibility.

View all 2 project logs

  • 1
    Hardware

    You need:

    - ESP32-S3 development board
    - CH32V003A4M6 target MCU
    - 4.7kΩ–10kΩ pull-up resistor
    - USB cable
    - 3.3V logic supply
    - Common GND

  • 2
    SWIO wiring

    ESP32-S3 GPIO10 → CH32V003 PD1/SWIO (Pin 7)
    ESP32-S3 3.3V → CH32V003 VDD (Pin 15)
    ESP32-S3 GND → CH32V003 VSS (Pin 14)

    Place a 4.7kΩ–10kΩ pull-up resistor between SWIO and 3.3V.

  • 3
    Build the programmer

    Open the programmer firmware directory:

    cd firmware/programmer

    Build with PlatformIO:

    pio run

    Upload to the ESP32-S3:

    pio run -t upload

View all 6 instructions

Enjoy this project?

Share

Discussions

Does this project spark your interest?

Become a member to follow this project and never miss any updates