Programmatore SWIO open-source con ESP32-S3 per CH32V003

Questo progetto realizza un programmatore e debugger open-source per il microcontrollore WCH CH32V003, usando una scheda ESP32-S3 come cuore del sistema. Il firmware gestisce la segnalazione fisica SWIO e le operazioni di protocollo DMI direttamente, isolando l’host dai vincoli di temporizzazione real-time. La pipeline di programmazione flash è stata verificata su hardware reale, quindi funziona.

Il flashing segue una sequenza precisa: sblocco flash in 3 fasi, cancellazione pagina veloce da 64 byte, scrittura del buffer pagina, verifica di lettura byte per byte e reset/run esplicito della CPU. Dopo la scrittura, il core rimane in halt. Per riavviarlo si esegue una sequenza di resume su DMI_DMCONTROL (0x10). Inoltre, il progetto include un demone hardware che pilota un motore DC tramite driver CP6208.

Come funziona il programmatore SWIO

L’ESP32-S3 lavora a 240 MHz e usa il GPIO10 per la comunicazione SWIO. La sincronizzazione richiede uno stato alto stabile all’avvio, implementato con un hold attivo nella funzione swioSynchronize(). L’interfaccia host è un’utility Python CLI standalone, che comunica via USB-UART a 115200 baud. Il firmware gestisce tutto il protocollo, quindi il PC non deve rispettare vincoli di tempo stretti.

I registri DMI usati includono 0x5AA50400 per lo sblocco, 0x7D e 0x11 per i comandi di cancellazione e scrittura, 0x0713BB91 per la verifica. L’indirizzo di memoria flash è 0x08000000. La cancellazione avviene su pagine da 64 byte, con riempimento a 0xFFFFFFFF. La scrittura usa un buffer di 52 byte, mentre i registri 0x00000200, 0x00008020 e 0x08000033 controllano il reset e l’avvio. Il repository GitHub di Ishu1519 documenta ogni passaggio.

Terminale con log di verifica hardware su CH32V003A4M6
Verificato su hardware reale CH32V003A4M6. (foto: Ishu1519)

Il driver CP6208 e il motore DC

Il demone hardware pilota un motore DC tramite il driver CP6208, lo stesso compito che in un progetto amatoriale può svolgere un driver per motore DC. Il driver richiede che l’ingresso BIN sia collegato a GND per completare il circuito di pilotaggio. La tensione di alimentazione del motore, ad esempio un motore DC 6-12V, può variare tra 5V e 12V, mentre la logica del driver lavora a 3.3V. Il tutto è gestito dal firmware dell’ESP32-S3, che genera i segnali di controllo necessari.

Questo programmatore SWIO è open-source e verificato su hardware reale. Permette di programmare e debuggare il CH32V003 usando un ESP32-S3 economico, senza bisogno di strumenti proprietari. La pipeline di flashing è completa, con cancellazione, scrittura e verifica di lettura. Inoltre, il supporto per il motore DC lo rende un progetto versatile.

Il software è sviluppato con PlatformIO e Python. La toolchain usa riscv64-unknown-elf-gcc o xpack-riscv-none-elf-gcc, con Makefile per automatizzare la build. La CLI Python è standalone, quindi non richiede dipendenze aggiuntive. Tutto il codice è disponibile e modificabile.

  • Sblocco flash in 3 fasi con registro 0x5AA50400
  • Cancellazione pagina veloce da 64 byte
  • Scrittura buffer pagina da 64 byte
  • Verifica di lettura byte per byte
  • Reset e run esplicito della CPU via DMI_DMCONTROL

In sintesi, il progetto copre l’intero flusso di programmazione del CH32V003, dalla sincronizzazione SWIO alla verifica finale. Il demone hardware aggiunge il controllo di un motore DC, rendendo la scheda utile anche per applicazioni di movimento. Il codice è pulito e ben documentato, adatto a chi vuole capire il protocollo SWIO in profondità.


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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Menu