Forum: Projekte & Code CH32V003: Selbstbauprogrammer und "Getting started"


von Ralph S. (jjflash)



Lesenswert?

Nachdem in einem Nachbarthread doch tatsächlich jemand den 
Selbstbauprogrammer für einen CH32V003 nachgefragt hat, obwohl es einen 
originalen Programmer von WCH für sehr kleines Geld gibt (jedoch oft 
nicht erhältlich), habe ich mich daran gesetzt, das ganze aufzuarbeiten. 
Wirklich witzig ist, ohne Namen zu nennen, dass es Mitglieder hier gibt, 
die sich mittlerweile schier nicht "trauen" etwas zu posten, weil sie 
denken Gefahr zu laufen xyz Kommentare dafür zu erhalten: Ich habe 3 
(okay das sind nicht sehr viele) Interessenten, die den 
Selbstbauprogrammer wie ich den gemacht habe, gerne sehen würden und 
haben mich dann auch per Mail angeschrieben. Das, was ursprünglich kein 
Projekt war, und so auch nicht geplant war (ich dachte ich schreibe die 
Sachen einfach nur zusammen) wurde dann zu einem Projekt, zumindest für 
mich.

Wenn die Moderatoren dieses anderst sehen und zu der Ansicht kommen, 
dass dieser Thread hier woanderst besser aufgehoben ist, dann bitte 
verschieben (und nein, das ist absolut nicht böse gemeint).

Allerdings: im Archiv sind absolut genug Codebeispiele enthalten, sowie 
der Aufbau der Hardware an sich ist ja auch ein Projekt.

Grundsätzlich ist aus dem Selbstbauprogrammer eher ein "Getting started 
with CH32V003" geworden und wie immer glaube ich, deutlich zu viel 
geschrieben zu haben: Das Dokument ist jetzt 30 Seiten lang geworden (ob 
das dann wirklich jemand liest?).

Wie dem auch sei: Im Dokument wird beschrieben, wie man einen 
Selbstbauprogrammer für einen CH32V003 herstellen kann. Das einzige was 
benötigt wird ist ein CH32V003 Chip im 20pol. Gehäuse und ein Arduino 
Uno/Nano um den Programmer selbst zu flashen.

Im Archiv ist ein komplettes Setup unter Linux auf Basis von CH32FUN 
enthalten um damit starten zu können.

Und, auch wenn ich kein Arduino-Fan bin, ist den Seiten eine Anleitung 
hinzugefügt, wie man den CH32V003 auch unter Arduino programmieren kann 
und wie man den Selbstbauprogrammer der Arduino-IDE "unterjubelt".

Downloadlinks als "Quellenangabe", bis auf den Compiler sind alle 
benötigten Dateien hier im Archiv angehängt:

Für den Fall dass ich etwas ergänze, hier kann auch der RISCV-Compiler 
gedownloadet werden:

https://www.jjflash.de/ch32v003/downloads/

Der riscv-Compiler auf der originalen Webseite

https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/

V-USB mit der Programmerfirmware auf der Githubseite von Christian Lohr
https://github.com/cnlohr/rv003usb

CH32FUN von hier wurde das Framework für den V003 entnommen sowie das 
Hostprogramm minichlink für den Selbstbauprogrammer:

https://github.com/cnlohr/ch32fun

Der Arduino-Core für den CH32V003

https://github.com/openwch/arduino_core_ch32

Für denjenigen der das hier wirklich ausprobiert: Viel Spaß dabei (vllt. 
einfach bei der nächsten Bestellung bei einem Elektroniklieferanten die 
Chips mitbestellen. Außer dem Chip selbst benötigt es nur zusätzliches 
"Hühnerfutter" um damit anzufangen und bei einem Preis von ca. 25Cent / 
Stück ist das nun wirklich keine Investition).

von F. P. (fail)


Lesenswert?

Sofern man keinen CH32V003 auf Lager hat und daher eh bestellen muß, 
wäre ein CH32V203 praktischer wegen echtem USB statt V-USB.

von Ralph S. (jjflash)


Lesenswert?

F. P. schrieb:
> Sofern man keinen CH32V003 auf Lager hat und daher eh bestellen muß,
> wäre ein CH32V203 praktischer wegen echtem USB statt V-USB.

Für den ist die Anleitung aber nicht gemacht! Außerdem: Die Firmware des 
Selbstbauprogrammers läuft auf dem V203 nicht (ich habe es ausprobiert). 
Das einzige das funktioniertist: Der Programmer (mit V003) kann auch den 
V203 flashen. Der Arduino-Core kann auch den V203 programmieren 
(allerdings muß man dann hier die Config-Dateien in ~./arduino15 
nochmals patchen.

Warum nur müssen irgendwelche Postings immer in der Art ausufern: Mein 
Chip ist aber besser als deiner und die Programmiersprache taugt nichts, 
nimm lieber die andere.

Das hier ist ein "Getting started" für einen CH32V003 und nicht für 
einen CH32V203.

Warum schreibst du nicht, nimm lieber einen STM32F400 (dem gibt es bei 
LCSC wirklich, ich habe ihn hier liegen), der kostet auch nur einen 1 
Euro, gibt es im LQFP-48 Gehäuse und hat FPU, 128kB Flash und 32kB SRAM. 
Okay, USB hat er nicht (ich war überrascht, ich dachte alle F4 haben 
das), aber ansonsten in allem besser als V003. Warum also nicht den 
nehmen? Ganz einfach, für den ist diese Anleitung hier nicht gemacht, 
für diese braucht es eine andere.

von Kilo S. (kilo_s)


Lesenswert?

Ralph S. schrieb:
> Wirklich witzig ist, ohne Namen zu nennen, dass es Mitglieder hier gibt,
> die sich mittlerweile schier nicht "trauen" etwas zu posten, weil sie
> denken Gefahr zu laufen xyz Kommentare dafür zu erhalten

Leider wahr. Ist mir hier auch begegnet.

Viel schöner finde ich das du das ganze hier trotzdem für alle 
veröffentlichst!

Danke dafür.

O.T
Ich hab zwar (noch) keine CH32, hab mir das ganze aber gespeichert, wenn 
mir auf einer der Schlachtplatinen mal ein CH32 begegnet kann ich ihn so 
nutzbar machen ohne extra Geld ausgeben zu müssen. Super Sache!

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> Nachdem in einem Nachbarthread doch tatsächlich jemand den
> Selbstbauprogrammer für einen CH32V003 nachgefragt hat, obwohl es einen
> originalen Programmer von WCH für sehr kleines Geld gibt (jedoch oft
> nicht erhältlich)

Der "originale Programemr" (WCHLinkE) ist kein "Programmer", sondern ein 
Debuginterface.
Darüber kann man also mehr anstellen, als Code in µCs zu laden, man kann 
Breakpoints im Code setzen, Speicherinhalte betrachten etc. Obendrein 
stellt das Ding auch noch eine serielle Schnittstelle zur Verfügung.

Kann das dieser Nachbau hier auch, oder ist das ein reiner "Flasher"?

Abgesehen davon:

Schickes Projekt, das gehört definitiv nach "Projekte & Code" und das 
hast Du auch schön detailliert aufgearbeitet - Schaltplan, 
Aufbauhinweise, Links -- richtig gut! Großes Lob!

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Der "originale Programemr" (WCHLinkE) ist kein "Programmer", sondern ein
> Debuginterface.
> Darüber kann man also mehr anstellen, als Code in µCs zu laden, man kann
> Breakpoints im Code setzen, Speicherinhalte betrachten etc. Obendrein
> stellt das Ding auch noch eine serielle Schnittstelle zur Verfügung.

Der WCH-LinkE ist nicht nur ein Debuginterface, er hat zudem noch eine 
sehr praktische USB2UART-Bridge mit integriert.

Harald K. schrieb:
> Kann das dieser Nachbau hier auch, oder ist das ein reiner "Flasher"?

Leider ist der Nachbau tatsächlich ein reiner "Flasher", Breakpoints 
setzen und Variableinhalte ansehen geht also tatsächlich nicht.

Harald K. schrieb:
> Schickes Projekt, das gehört definitiv nach "Projekte & Code" und das
> hast Du auch schön detailliert aufgearbeitet - Schaltplan,
> Aufbauhinweise, Links -- richtig gut! Großes Lob!

:-) Vielen Dank fürs Lob

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

leider haben sich im PDF kleinere Fehler eingeschlichen (vorzugsweise 
eines fehlenden "make flash" beim Flashen des Programmers) und deshalb 
hier die erste bereinigte Version des PDF's

Sorry

von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> Der WCH-LinkE ist nicht nur ein Debuginterface, er hat zudem noch eine
> sehr praktische USB2UART-Bridge mit integriert.

Sieh mal, was im letzten von Dir zitierten Satz von mir drinsteht:

Harald K. schrieb:
> Obendrein stellt das Ding auch noch eine serielle Schnittstelle
> zur Verfügung.

Aber schön, wenn wir uns da einig sind.

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Sieh mal, was im letzten von Dir zitierten Satz von mir drinsteht:
>
> Harald K. schrieb:
>> Obendrein stellt das Ding auch noch eine serielle Schnittstelle
>> zur Verfügung.
>
> Aber schön, wenn wir uns da einig sind.

:-) sorry, das hatte ich überlesen => wer lesen kann ist klar im Vorteil 
(das ging jetzt an mich selbst)

von F. P. (fail)


Lesenswert?

Ralph S. schrieb:
> Warum nur müssen irgendwelche Postings immer in der Art ausufern: Mein
> Chip ist aber besser als deiner und die Programmiersprache taugt nichts,
> nimm lieber die andere.

Darum ging es mir doch gar nicht! Ich will hier keinen angreifen. Du 
schreibst mehrfach von einem "Selbstbauprogrammer für einen CH32V003" 
nicht von einem "Selbstbauprogrammer mit einem CH32V003". Wenn man eh 
Chips für einen Selbstbauprogrammer kaufen muß, ist ein CH32V203 besser 
als ein CH32V003. Ich schrieb an etwaige Nachbauwillige, nicht an Dich. 
Die Lage ist natürlich eine andere, wenn man schon eine 50er-Rolle 
CH32V003 hat.

Noch besser wäre natürlich ein CH32V305. Kostet etwas mehr, aber damit 
kann man einen WCH-LinkE nachbauen und hat dann auch gleich einen 
Debugger. Die beiden CH217K kann man durch einen mechanischen Umschalter 
ersetzen.

> Das hier ist ein "Getting started" für einen CH32V003 und nicht für
> einen CH32V203.

Genauer: Für zwei CH32V003 und einen Arduino.

> Warum schreibst du nicht, nimm lieber einen STM32F400 (dem gibt es bei
> LCSC wirklich, ich habe ihn hier liegen)

Weil ich kein Polemiker bin.

von Ralph S. (jjflash)


Lesenswert?

Zitat 2:

F. P. schrieb:
> Weil ich kein Polemiker bin.

Zitat 1:

F. P. schrieb:
> "Selbstbauprogrammer für einen CH32V003"
> nicht von einem "Selbstbauprogrammer mit einem CH32V003"

von Vanye R. (vanye_rijan)


Lesenswert?

> schreibst mehrfach von einem "Selbstbauprogrammer für einen CH32V003"
> nicht von einem "Selbstbauprogrammer mit einem CH32V003".

Waere nicht ein Selbstbauprogrammer fuer einen CH32V003 aber mit einem 
Atmel/ST/usw irgendwie klueger? Denn wenn ich schon einen CH32V003 
flashen kann, dann brauch ich den Programmer ja garnicht mehr. :-p

Vanye

von Harald K. (kirnbichler)


Lesenswert?

Vanye R. schrieb:
> Denn wenn ich schon einen CH32V003
> flashen kann, dann brauch ich den Programmer ja garnicht mehr.

Manch einer, der so ausgestattet ist, könnte als Freundschaftsdienst 
so einen Programmieradapter programmieren, um jemandem zu helfen, der 
aus welchen Gründen auch immer noch keinen WCH-LinkE abbekommen hat.

Sowas soll es ja geben.

(Ansonsen hast Du recht, dieses Projekt hat ein deutliches 
Henne-Ei-Problem).

von F. P. (fail)


Lesenswert?

Ralph S. schrieb:
> Zitat 2:
> Zitat 1:

Pedanterie muß nicht Polemik sein.

Das Huhn-und-Ei Problem läßt sich umgehen, indem man einen 
64-Pin-CH32V305 nimmt, den kann man wegen rausgeführtem BOOT0 auch ohne 
vorhandene Firmware über USB programmieren. Ich habe hier einen 
CH32V305RBT6, vielleicht sollte ich mal ausprobieren, ob die 
WCH-LinkE-Firmware darauf läuft.

Übrigens ist der WCH-LinkE im WCH-Store auf AliExpress wieder lieferbar:

https://www.aliexpress.com/item/1005004881582037.html

von Johannes F. (jofe)


Lesenswert?

@jjflash, vielen Dank, werde mir das ganze bei Gelegenheit mal ansehen, 
da ich vorhabe, mich in die CH32 einzuarbeiten.

Weil die so billig sind (und ich nur größere Mengen bei LCSC bestelle, 
damit sich die Versandkosten lohnen), habe ich mir kürzlich bei LCSC mal 
150 Stück CH32V003 im TSSOP-20 bestellt. Da ich so viele ja eigentlich 
auf absehbare Zeit nicht brauchen werde, wäre ich gern bereit, zum 
Selbstkostenpreis welche abzugeben (in 10er-Packungen). Wer Interesse 
hat, kann mir gern ne PN schreiben.

von F. P. (fail)


Lesenswert?

F. P. schrieb:
> Ich habe hier einen
> CH32V305RBT6, vielleicht sollte ich mal ausprobieren, ob die
> WCH-LinkE-Firmware darauf läuft.

Wird länger dauern, denn ich habe nicht den passenden Quarz auf Lager.

von Ralph S. (jjflash)


Lesenswert?

Hm, irgendwie glaube ich, dass ihr das ganze nicht ganz korrekt (oder 
vollständig) gelesen habt.

Wenn man einen Selbstbauprogrammer zusammennagelt hat man natürlich 
immer ein Henne-Ei Problem.

Genau aus diesem Grunde ist die Anleitung etwas länger geworden. Diese 
Anleitung soll helfen, wenn man schlicht die V003 Controller schon 
hat... und sonst auch nichts hat.

Aus diesem Grund wird einem Arduino UNO oder Nano eine 
Programmersoftware aufgespielt und der Arduino ist fortan mein 
Programmer für CH32. Der Haken an einem Arduino basierenden Programmer 
ist, dass er schnarch langsam ist (er braucht ca. 80 Sekunden um den 
gesamten Flash von 16384 Bytes zu flasen - was inakzeptabel ist).

Allerdings kann man ihn genau ein einziges mal dafür verwenden, nachdem 
die Hardware für den Selbstbauprogrammer aufgebaut ist, um genau diesem 
die Programmersoftware aufzuspielen und fortan braucht man dann den 
Arduino-basierenden Programmer nicht mehr (der sich im Übrigen Ardulink 
nennt).

F. P. schrieb:
> Das Huhn-und-Ei Problem läßt sich umgehen, indem man einen
> 64-Pin-CH32V305 nimmt, den kann man wegen rausgeführtem BOOT0 auch ohne
> vorhandene Firmware über USB programmieren.

sofern man zum einen einen CH32V305 hat, diesen aufgebaut hat und man 
dann eine Firmware für CH32V305 hat. Ich hatte das nicht gesucht und 
werde das auch nicht suchen, weil der Programmer mit V003 wirklich gut 
funktioniert. Ob nun die Software des WCH-LinkE im Netz auffindbar ist, 
weiß ich nicht. Welches Hühnerfutter daraum noch zu platzieren ist, weiß 
ich auch nicht.

Vanye R. schrieb:
> Waere nicht ein Selbstbauprogrammer fuer einen CH32V003 aber mit einem
> Atmel/ST/usw irgendwie klueger?

Warum sollte das klüger sein? Mit Atmel gibt es den für ATmega88 bis 
328p und ATtiny2313, nennt sich wie oben genannt ArduLink .. und ist 
schnarch lahm. Ob es etwas für STM32 gibt weiß ich nicht (glaube ich 
allerdings auch nicht). Also, warum sollte es klüger sein, etwas das 
(zufriedenstellend) funktioniert durch etwas zu ersetzen von dem man es 
nicht weiß?

Das Szenario ist/war doch: Ich habe mehrere ch32V003 und wie kann ich 
den mit den Mitteln flashen die ich habe. Meine Mittel waren vor Beginn 
des Projekts: Boards mit USB-Zugang oder virtuellen COM-Ports auf Basis 
von: MCS-51, PIC16, STM8, PFS154, STM32F0, F1, F3, F4 und Atmel AVR.

Ich habe genau 2 Firmware's gefunden, die in der Lage sind, einen CH32 
zu flashen, eben die eine für Atmel und die andere für einen V003. Und 
aus den oben genannten Gründen gab es eben eine Anleitung für den V003 
basierenden Programmer!

Warum muß hier jetzt nach Alternativen gesucht werden. Die einzige 
Alternative die wirklich zählt (und die habe ich gleich auf den ersten 
beiden Seiten beschrieben) ist es, einen originalen WCH-LinkE zu 
benutzen, der - in Einigkeit mit Kirnbichler - zum einen schnell ist, 
natürlich auch ein Debug-Interface hat, zudem eine UART-USB-Bridge und 
außerdem auch noch super preiswert ist. Alle anderen Klimmzüge (auch die 
meinigen bei diesem Projekt) müssen hinterfragt werden, wieviel Sinn die 
machen (und "mein" Selbstbauprogrammer macht dann Sinn, wenn es gerade 
mal wieder keinen WCH-LinkE gibt oder man nicht auf dessen Lieferung 
warten möchte um anzufangen).

Letztendlich: Wenn jemand andere Programmerfirmware (egal für welche 
Plattform) findet als die beiden von mir genannten: postet die hier, das 
würde mich interessieren und wie man die verwenden kann.

Im übrigen, so als Überlegung, welchen Sinn ein Programmer mit V003 noch 
machen könnte: Bei mir ist mit derselben Hardware plus zusätzlich einer 
Resetschaltung ein V003 mit USB-Bootloader am laufen. Dieser Bootloader 
kann natürlich auch die Programmersoftware flashen und so habe ich eine 
Schaltung die überhaupt keinen Programmer benötigt, aber zur Not selbst 
zum Programmer werden kann.

von Ralph S. (jjflash)


Lesenswert?

Johannes F. schrieb:
> @jjflash, vielen Dank, werde mir das ganze bei Gelegenheit mal ansehen,
> da ich vorhabe, mich in die CH32 einzuarbeiten.

In der nächsten Zeit, so hoffe ich, werde ich mich meinen STM32F4 
Projekten widmen, allerdings wird das nächste auf der ToDo-Liste für 
CH32V003 das Routen eines eigenen Evaluation-Boards sein, bei dem dort 
der V003 über einen USB-Bootloader verfügen wird, und entweder als 
normales Board verwendbar ist, oder eben auch als Programmer für weitere 
V003.

Allerdings, wie oben beschrieben, wenn du schon einen WCH-LinkE hast, 
wirst du den Programmer nicht wirklich brauchen, allerdings könnte der 
Bootloader interessant werden.

Außerdem hatte ich gestern abend mit Arduino "gespielt" (entgegen meinen 
Überzeugungen) und habe aus meiner TM16xx-Software eine 
"Arduino-Library" gemacht (an alle: ich weiß, dass das keine Library im 
Sinne von C, C++ ist, Library's ist eine Ansammlung von compilierter 
Software in einer *.a Datei, die mittels -lfoo.a hinzugelinkt wird) ... 
wobei ich zu meinem Erschrecken festgestellt hatte, dass die noch Fehler 
enthalten hat. Das Ergebnis des Spielens mit Arduino und CH32V003 war 
erschreckend und ernüchternd: Während ein einfaches Zählerprogramm in C 
mit CH32FUN und TM1650 nicht ganz 1500 Byte groß wurde, wurde dasselbe 
Programm mit Arduino über 9000 Byte groß. Angesichts der Tatsache dass 
der V003 nur 16384 Flashbytes hat stellt sich die Frage nach dem Sinn 
von V003 und Arduino. Hier werde ich mal nachsehen, ob es evtl. 
effizientere Cores als den von mir benutzten gibt.

Es gibt noch viel zu tun, warten wir's ab!

von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> Aus diesem Grund wird einem Arduino UNO oder Nano eine
> Programmersoftware aufgespielt und der Arduino ist fortan mein
> Programmer für CH32. Der Haken an einem Arduino basierenden Programmer
> ist, dass er schnarch langsam ist (er braucht ca. 80 Sekunden um den
> gesamten Flash von 16384 Bytes zu flasen - was inakzeptabel ist).
>
> Allerdings kann man ihn genau ein einziges mal dafür verwenden, nachdem
> die Hardware für den Selbstbauprogrammer aufgebaut ist, um genau diesem
> die Programmersoftware aufzuspielen und fortan braucht man dann den
> Arduino-basierenden Programmer nicht mehr (der sich im Übrigen Ardulink
> nennt).

Dann hat sich das Henne-Ei-Problem in Luft aufgelöst.

Das wurde aus der ursprünglichen Beschreibung (zumindest mir) nicht so 
ganz klar. Ein Satz wie

"Hier wird einmalig der pröttenlahme Arduino-Programmer genutzt, um dann 
einen viel schnelleren auf Grundlage des CH32V003 zu gewinnen"

vielleicht noch hervorgehoben, in einem eigenen Absatz, hätte mir 
geholfen.

Ja, das steht anders formuliert im Eröffnungsposting, aber das hätte man 
gründlicher lesen müssen (als zumindest ich es getan habe).


Fazit: Ich bleibe bei meinem Lob für das Projekt. Klasse Idee, klasse 
umgesetzt (und bei Problemen muss man halt gründlicher lesen - Asche auf 
mein alterndes Haupt)

: Bearbeitet durch User
von F. P. (fail)


Lesenswert?

Die Original-WCH-LinkE-Firmware für den CH32V305 (u.a.) gibt es hier:

https://github.com/cjacker/wlink-iap/tree/main/firmwares

Die Software zum Flashen des CH32V305 (u.a.) über USB ohne vorhandene 
Firmware ist hier:

https://github.com/ch32-rs/wchisp

Hühnerfutter: 12-MHz-Quarz mit passenden Kondensatoren.

Kompletter Original-Schaltplan mit einigem, was man nicht braucht:

https://www.wch.xx/download/file?id=421

(Bitte xx durch cn ersetzen) Der Schaltplan für den WCH-LinkE ist auf 
der zweiten Seite.

Offen ist, ob die Firmware für den 20-Pin-CH32V305 (der keinen BOOT0-Pin 
hat und daher das Huhn-und-Ei-Problem hat) auch für den 64-Pin-CH32V305 
(mit per BOOT0 aktivierbarem USB-Bootloader) funktioniert.

Das Flashen der Firmware funktioniert, aber das Ding meldet sich nicht 
am USB-Port. Eine mögliche Ursache ist, daß die Firmware den HSE statt 
des HSI für USB verwendet (der HSE hat bei mir die falsche Frequenz). 
Oder daß die beiden Versionen des CH32V305 zu verschieden sind. Werde 
ich herausfinden, sobald ich einen Quarz aufgetrieben habe. Für Taktung 
mit SI5351 bin ich im Moment zu faul.

Ich habe halt ein paar 64-Pin-CH32V305 (samt PCB) da und ein 
Notfall-WCH-LinkE wäre ganz praktisch...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.