Forum: Mikrocontroller und Digitale Elektronik CH32V003 J4M6


von Ralph S. (jjflash)


Lesenswert?

Jetzt ist es mir zum zweiten mal passiert (weil ich die Pinanschlüsse 
nicht richtig gelesen habe).

Ich habe an einem CH32V003 J4M6 (das ist der 8 pol. Chip) den Pin als 
Ausgang geflasht.

Das Programm funktioniert dann darin auch. Allerdings ist am 8 pol. Chip 
an diesem GPIO auch der SWIO aufgelegt.

Nach diesem Flashen, kann ich den Chip kein weiteres mal flashen.

Unter Linux verwende ich das Programm minichlink und auch ein Aufruf:

minichlink -u

welches die Option für "unbrick" ist, funktioniert nicht.

Ein:

minichlink -p

für das Entfernen einer Readprotection funktioniert natürlich auch 
nicht.

Das ganze erinnert mich an viel frühere Tage, an denen man (ich) einen 
AVR "verfusen" konnte.

Gibt es einen Trick, wie man den Chip wieder verwendbar machen kann oder 
ist der für die Tonne?

Als einzigen verfügbaren Programmer habe ich einen WchLinkE.

von Harald K. (kirnbichler)


Lesenswert?

Versorgst Du auch den µC über den WchLinkE mit Spannung, oder hast Du 
den nur als "ISP"-Adapter an Deine bestehende Schaltung angeschlossen, 
so daß der die Versorgungsspannung nicht abschalten kann?

von Thomas Z. (usbman)


Lesenswert?

Hast du es schon mal mit dem WCHIspTool probiert? WCH schreibt dass man 
einige Zeit nach dem Resett warten sollte bevor man am SWIO Pin 
rumfummelt.

ansonsten:
https://www.wch._cn/bbs/forum-106-2.html

und Webseiten Übersetzer einschalten. Du kannst da auch auf Englisch 
fragen. Die FAEs antworten in der Regel innerhalb eines Tages (im Moment 
sind allerdings Feiertage in CN)

von Harald K. (kirnbichler)


Lesenswert?

Nachtrag zu minichlink:

Wie alt ist Deine Version?

Es gibt eine Commit-Message vom 8. August:

"Fix unbrick. Enhance prints for b003boot init."

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Versorgst Du auch den µC über den WchLinkE mit Spannung, oder hast Du
> den nur als "ISP"-Adapter an Deine bestehende Schaltung angeschlossen,
> so daß der die Versorgungsspannung nicht abschalten kann?

Habe ich beides versucht...
Am Chip selbst ist nichts angeschlossen.

Harald K. schrieb:
> Nachtrag zu minichlink:
>
> Wie alt ist Deine Version?
>
> Es gibt eine Commit-Message vom 8. August:
>
> "Fix unbrick. Enhance prints for b003boot init."

Habe ich mir gerade heruntergeladen...

Versuche des "unbrickens" über externe 5V, externe 3,3V, Spannung über 
WchLinkE mit 5V und 3,3V mit der neuen Version von minichlink

Die Fehlermeldungen kommen jetzt schneller, aber der Chip ist immer noch 
gebrickt.

Grundsätzlich rentiert sich der Aufwand ja schier nicht, bei dem Preis 
was der kostet. Das ist jetzt irgendwie auch "wissenschaftlicher Natur" 
zu erfahren was da machbar und was nicht ist. Für mich jetzt halt blöd, 
weil ich keine 8 pol. Chips mehr da habe.

Thomas Z. schrieb:
> Hast du es schon mal mit dem WCHIspTool probiert? WCH schreibt dass man
> einige Zeit nach dem Resett warten sollte bevor man am SWIO Pin
> rumfummelt.

Der 8 pol. Chip hat keinen Reset Anschluss !

von Thomas Z. (usbman)


Lesenswert?

Ralph S. schrieb:
> Der 8 pol. Chip hat keinen Reset Anschluss

Ich hatte bewusst nach dem Reset geschrieben, das ist in deinem Fall 
halt der PowerOn.

von Ralph S. (jjflash)


Lesenswert?

Thomas Z. schrieb:
> Ralph S. schrieb:
>> Der 8 pol. Chip hat keinen Reset Anschluss
>
> Ich hatte bewusst nach dem Reset geschrieben, das ist in deinem Fall
> halt der PowerOn.

... auch eine Wartezeit nach Power on habe ich eingehalten

von Thomas Z. (usbman)


Lesenswert?

schau mal hier:

https://www.wch._cn/bbs/thread-144229-1.html mit Übersetzer

von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> Am Chip selbst ist nichts angeschlossen.

Na, drei Leitungen müssen schon angeschlossen sein: +5V, GND und eben 
SWIO, alle mit dem WCHlinkE verbunden. Und mit nichts anderem.

von Reinhard R. (reirawb)


Lesenswert?

Hallo Ralph,

klingt fast wie mein Problem von Ende 2023, war damals aber ein 
20-Pinner:
Beitrag "Problem: CH32V003 läst sich nicht (mehr) flashen"
Die Lösung:
Beitrag "Re: Problem: CH32V003 läst sich nicht (mehr) flashen"

Ich weiß, du bist Linux-Nutzer, aber vielleicht hast du noch einen 
Windows-PC auf dem du mal das WCH-LinkUtility laufen lassen kannst. Die 
sind nicht sehr groß und du brauchst da auch nichts zu installieren, die 
WCH-LinkUtility.exe läuft out-of-the-box.

Reinhard

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Na, drei Leitungen müssen schon angeschlossen sein: +5V, GND und eben
> SWIO, alle mit dem WCHlinkE verbunden. Und mit nichts anderem.

:-) okay, außer der Betriebsspannung und dem SWIO ist nichts 
angeschlossen

von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> außer der Betriebsspannung und dem SWIO ist nichts
> angeschlossen

Und nochmal: Die Betriebsspannung kommt aus dem WCHlinkE?

von Ralph S. (jjflash)


Lesenswert?

Reinhard R. schrieb:
> Ich weiß, du bist Linux-Nutzer, aber vielleicht hast du noch einen
> Windows-PC auf dem du mal das WCH-LinkUtility laufen lassen kannst. Die
> sind nicht sehr groß und du brauchst da auch nichts zu installieren, die
> WCH-LinkUtility.exe läuft out-of-the-box.

Ich habe jetzt mein altes Win10 Notebook "reaktiviert" (ich glaube das 
war dieses Jahr noch nicht angeschaltet): Mit dem WCH-LinkUtility 
funktioniert es auch nicht.

Harald K. schrieb:
> Ralph S. schrieb:
>> außer der Betriebsspannung und dem SWIO ist nichts
>> angeschlossen
>
> Und nochmal: Die Betriebsspannung kommt aus dem WCHlinkE?

Grüß dich Harald (mitten in der Nacht). Ich hab es eigentlich (aber eben 
nur eigentlich) aufgegeben gehabt und mein "Programmprojekt" eben auf 
einem 20 Pinner zu Ende gebracht (in der Hoffnung dass das dann in einem 
8 Pinner - wenn ich dann wieder welche habe - auch sofort läuft).

Aber vielleicht hast du ja eine Idee (auch wenn es vom Preis eines Chips 
den Aufwand nicht lohnt, pfupfert es einen, dass das hinüber sein 
sollte).

Was ich gemacht habe ist:

- Programmer ist WchLinkE
- der CH32V003 J4M6 war schon immer auf einer Adapterplatine für das 
Steckbrett aufgelötet
- auf der Unterseite des PCBs ist direkt ein 100 nF Kondensator 
aufgelötet (weil das dort vom Chiplayout sehr gut passt - für diejenigen 
die als Standardlösung immer den Blockkondensator nennen - )

##########

nachfolgende Versuche wurden mit Betriebsspannung einmal vom Programmer 
selbst, einmal von einem linear geregelten Selbstbaunetzgerät 
unternommen, jeweils Versuche mit 3,3V und einmal mit 5V

#########

- Bei Versorgung mit externem Netzteil somit nur der GND und der SWIO 
des Programmers mit dem Chip verbunden
- neues Programm minichlink aus GitHub von Christian Lohr
- minichlink in jeglicher Kombination mit den Parametern -u (unbrick) -E 
(erase chip) -p (disable read protection) -5 (enable 5V) -3 (enable 3V) 
-t (disable 3V) -f (disable 5V) ausprobiert
- angeschlossen war außer der Betriebsspannug und dem SWIO nichts 
weiter. Betriebsspannung wurde nicht über die Schiene des Steckbretts 
angelegt, sondern direkt an den Pins
- zusätzlich zu dem Kondensator 3 unterschiedliche Elkos 10uF, 47uf, 
100uf über die Betriebsspannung gelegt
- Lochrasterkarte aufgelötet mit Schiebeschalter um die Spannung des 
V003 (als irgendwie gearteten Ersatz für einen Reset) ein- und 
auszuschalten. Hier dann Versuche mit zuerst abgeschalteter 
Betriebsspannung, Programmstart, einschalten der Betriebsspannung direkt 
nach dem Programmstart
- alle Versuche noch einmal mit auf GND gelegten fünf Pins, die nicht am 
Flashen beteiligt sind.

Ich sags ungern, aber:
1
###############################################
2
                 aufgegeben
3
###############################################

von Harald K. (kirnbichler)


Lesenswert?

Ich würd' noch einen ganz perversen Versuch machen: Lass' mal entgegen 
aller Erfahrung und Praxis den Abblockkondensator weg.
Vielleicht ist das Ab- und Wiederanschalten der Versorgungsspannung 
durch den WCHLinkE timingkritisch, und der Kondensator funkt ausreichend 
lange dazwischen.

Ich hab für ein 2-Minuten-Winz-Projekt mal wirklich nur drei Drähte an 
einen CH32v003 gelötet und die direkt mit dem WCHlinkE verbunden - der 
ließ sich damit sauber programmieren, obwohl es jeder erlernten Praxis 
widerspricht und auch einiges an innerer Überwindung gekostet hat (die 
Faulheit siegte, und es sollte schnellgehen).

Und wenn auch das nicht klappt: Tja, dann kommst Du leider zu spät. Zu 
spät, um den µC Richie zukommenzulassen, um Bilder der Innereien 
anzufertigen.
Denn das hat er schon: https://www.richis-lab.de/uC06.htm

Dann sind 20 Cent ein Fall für die Tonne.

von Ralph S. (jjflash)


Lesenswert?

... ich kann das leider nicht mehr versuchen, ich habe den Chip weg 
geworfen!

von Dieter S. (ds1)


Angehängte Dateien:

Lesenswert?

Ralph hat mir netterweise einen CH32V003 J4M6 zum Testen zukommen 
lassen, damit habe ich ausprobiert ob man wieder auf den Chip per ISP 
zugreifen kann wenn man den SWIO Pin als IO Pin verwendet.

Folgender Ablauf:

 - Die Firmware "blink.hex" (siehe Anhang) in den Chip programmiert 
(PD5/SWIO wird als Ausgang zum Blinken konfiguriert)

 - An PD5 kann man messen dass es "blinkt" (alle ca. 200 ms)

 - Dann mit dem WCH-LinkUtility V2.70 unter Windows den Menüpunkt "Clear 
All Code Flash-By Power off" ausgeführt (siehe Bild)

 - Dann "Disable Chip Code-Protect" ausgeführt (WCH-LinkUtility fordert 
dazu auf, beim Programmieren der Firmware war "Enable MCU Code 
Read-Protect" gesetzt)

 - Fertig, auf den Chip kann wieder ganz normal zugegriffen werden

Die Firmware des WCH-LinkE Interface wurde vom WCH-LinkUtility auf "v39" 
aktualisiert (Version laut "firmware_version.txt" im "Firmware_Link" 
Verzeichnis vom WCH-LinkUtility).

Die Verbindungen zwischen dem WCH-LinkE Interface und dem CH32V003 J4M6 
auf einer SMD Adapter-Platine war GND, Vcc (3.3 Volt) und SWIO, es 
wurden keine weiteren Bauteile (z.B. Abblockkondensator) verwendet.

von Kilo S. (kilo_s)


Lesenswert?

Harald K. schrieb:
> Ich hab für ein 2-Minuten-Winz-Projekt mal wirklich nur drei Drähte an
> einen CH32v003 gelötet und die direkt mit dem WCHlinkE verbunden - der
> ließ sich damit sauber programmieren, obwohl es jeder erlernten Praxis
> widerspricht und auch einiges an innerer Überwindung gekostet hat (die
> Faulheit siegte, und es sollte schnellgehen).

Das ist doch im Vergleich zu meinem "Toter Käfer piekser" noch voll im 
Rahmen. Beitrag "Re: Fumot Tornado 25000 mit LCD -Teardown"

Dieter S. schrieb:
> Fertig, auf den Chip kann wieder ganz normal zugegriffen werden

Gute Neuigkeiten, erinnert an meine Experimente mit dem Puya. Da dachte 
ich anfangs auch er sei hinüber bis ich ihn mit dem ISP tool 
angesprochen habe.

Ich glaub ich Leg mir auch mal ein paar von den WCH zu.

von Dieter S. (ds1)


Lesenswert?

Es gibt übrigens ein paar nette Spielereien mit dem CH32V003 J4M6, z.B. 
das hier:

https://github.com/wagiminator/CH32V003-GameConsole

von Kilo S. (kilo_s)


Lesenswert?

Dieter S. schrieb:
> Es gibt übrigens ein paar nette Spielereien mit dem CH32V003 J4M6, z.B.
> das hier:

Und wirklich brutal günstig die Käfer, Link-e mit zwei Boards und 5x003 
und 5x203 als blanke IC, Amazon, Prime, 20€!

Gut, verglichen mit der Bestellung in China noch teuer, dafür schneller.

von Harald K. (kirnbichler)


Lesenswert?

Kilo S. schrieb:
> dafür schneller

Aliexpress hat in letzter Zeit oft die unter-zwei-Wochen-Latte deutlich 
gerissen.

WCH selbst betreibt dort einen Shop, der ist nur am Wochenende aus 
irgendwelchen Gründen immer wieder ziemlich geplündert. Jetzt (Sonntag, 
kurz nach elf) haben sie gerade mal 12 Produkte im Angebot ...

https://wchofficialstore.de.aliexpress.com/store/1100367542

Dort aber bekommt man auch interessante Alternativen zum CH32V003, wie 
z.B. den CH32V002, der trotz der kleineren Nummer eher ein Upgrade 
darstellt (mehr RAM, mehr Flash, 12-Bit-ADCs, nur schneller ist er wohl 
nicht, siehe Beitrag "CH32V003 Instruction Execution Timing"), oder den 
CH32V006 ...

Und am kommenden Dienstag soll es dort wohl auch einige Angebote geben.

von Kilo S. (kilo_s)


Lesenswert?

Ich bestell aktuell nix auf Ali. Hat sich so ergeben, nutzen es kaum.

Der PY32F030 mit dem ich immer noch spiele nervt mich. Was auch immer 
für ein kastriertes DIE drin steckt. (DBGMCU->IDCODE:0x60001000) VRRF 
(intern) scheint zu wackeln wie ein kuhschwanz, der interne 
Temperatursensor springt um 1,4-2,6°C hin und her, RTC nicht nutzbar. 
Arduino Core kann Pin 5&32 (PF3/PB8) nicht initialisieren usw.
Aktuell auf der Liste steht erst mal noch ein neuer, hoffentlich 
unkastrierter, PY32F030K28, gibt's auch auf Amazon. Ich Brauch ne 
Referenz um die Unterschiede aus zu machen.

Wenn das geschafft ist sind die WCH dran. Von denen verspreche ich mir 
etwas mehr "Spaß", einfach weil es weniger workarounds brauchen sollte.

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Dieter S. schrieb:
> - Die Firmware "blink.hex" (siehe Anhang) in den Chip programmiert
> (PD5/SWIO wird als Ausgang zum Blinken konfiguriert)
>
>  - An PD5 kann man messen dass es "blinkt" (alle ca. 200 ms)
>
>  - Dann mit dem WCH-LinkUtility V2.70 unter Windows den Menüpunkt "Clear
> All Code Flash-By Power off" ausgeführt (siehe Bild)
>
>  - Dann "Disable Chip Code-Protect" ausgeführt (WCH-LinkUtility fordert
> dazu auf, beim Programmieren der Firmware war "Enable MCU Code
> Read-Protect" gesetzt)
>
>  - Fertig, auf den Chip kann wieder ganz normal zugegriffen werden

Vielen Dank für deine Mühe, ich werde doch glatt mein Windows 10 
Notebook hervorkramen und das mal genauso versuchen wie du das gemacht 
hast...

Dieter S. schrieb:
> Es gibt übrigens ein paar nette Spielereien mit dem CH32V003 J4M6, z.B.
> das hier:
>
> https://github.com/wagiminator/CH32V003-GameConsole

"wagiminator" hat noch andere schöne Sachen, die Spiele hatte ich zuvor 
schon einmal ausprobiert, allerdings ist das OLED-Display dann wirklich 
etwas arg arg klein, aber dennoch nett.

Kilo S. schrieb:
> Und wirklich brutal günstig die Käfer, Link-e mit zwei Boards und 5x003
> und 5x203 als blanke IC, Amazon, Prime, 20€!

Schmunzeln muß, das ist doch exorbitant teuer (ist ein Scherz und bitte 
nicht so arg ernst nehmen).

Ich bin immer noch am Zusammenschreiben von Dokumentationen, hier auch 
zum Thema CH32V003. Hier möchte ich meine Basteleien alle zusammenfassen 
und dann in einem Nachbarthread:

Beitrag "CH32V003: Selbstbauprogrammer und "Getting started""

gesammelt hinzufügen.

Warum ich das als "exorbitant teuer" bezeichne? Ganz einfach, der 
Programmer im angehängten Foto kostet, so man unter Linux ist, an 
Bauteilen inkl. einer bei JLCPCB bestellten Platine (wenn man eine 
10x10cm große Platine mit diesem kleinen Programmer füllt), dann doch 
glatte 73 Cent ( :-) ich habe es ausgerechnet).

Bei LCSC.COM kosten dann die Controller selbst zwischen 18 und 24 Cent.

https://www.lcsc.com/product-detail/C5346354.html?s_z=n_ch32v
https://www.lcsc.com/product-detail/C5346357.html?s_z=n_ch32v
https://www.lcsc.com/product-detail/C5187096.html?s_z=n_ch32v

Von daher haben die CH32V003 die AVR-Serie abgelöst, so die 16 KByte 
Flash reichen. Wie Kirnbichler angemerkt hat, gibt es auch den CH32V002 
mit mehr Speicher, den habe ich noch nicht evaluiert, aber von dem, was 
ich im Datenblatt gesehen habe, unterscheidet der sich vom 003 nur 
marginal.

Wenn ich alles zusammen geschrieben habe (ich hoffe doch bis 
Weihnachten), dann werde ich das alles im Paket veröffentlichen, dann 
gibt es ein

- Board mit USB Bootloader (welches auch als Programmer fungieren kann)
- Board mit seriellem Bootloader (CH340N Chip), welches bspw. mit 
Arduino wie ein Arduino Nano eingesetzt werden kann (okay, anders Pinout 
und Libraries sind nicht wirklich vorhanden, deshalb bastel ich zum 
ersten mal wirklich auch an Arduino-Libraries)
- den im Foto zu sehenden Programmer für CH32V003, der selbst durch 
einen CH32V003J4M6 realisiert ist (in bester/schlechtester V-USB 
Manier).

Prinzipiell benötigt man nur ein einziges mal einen Arduino UNO oder 
Nano mit ATmega168 / ATmega328 um den Programmer zu flashen und fortan 
können V003-Chips dann  mit diesem geflasht werden.

von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> gibt es auch den CH32V002
> mit mehr Speicher, den habe ich noch nicht evaluiert, aber von dem, was
> ich im Datenblatt gesehen habe, unterscheidet der sich vom 003 nur
> marginal.

Er ist wohl bei mehr als 24 MHz Taktfrequenz langsamer als der 003, da 
das ROM dann immer mit Waitstates angesteuert wird.

Interessanter ist der Unterschied bei der Peripherie - 12- statt 
10-Bit-ADC, höhere Samplerae, Touch-Controller und LIN-Schnittstelle.
Oh, und etwas nach unten erweiterter Versorgungsspannungsbereich, 
bereits ab 2.0 V kann das Ding genutzt werden. Könnte für 
batterieversorgte Anwendungen lohnend sein.

Und es gibt noch den CH32V006, den aber nicht mehr im SO-8.

Wenn man sich übrigens mit USB beschäftigen will, ist der CH32X035 ein 
interessanter Kandidat, der enthält ein USB-Device-Interface und 
"spricht" USB PD. Stefan Wagner (wagiminator) hat damit zwei Projekte 
veröffentlicht.

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Er ist wohl bei mehr als 24 MHz Taktfrequenz langsamer als der 003, da
> das ROM dann immer mit Waitstates angesteuert wird.
>
> Interessanter ist der Unterschied bei der Peripherie - 12- statt
> 10-Bit-ADC, höhere Samplerae

Den Thread hier im Forum habe ich gelesen und ich bin gespannt, wenn ich 
den in der Mache haben werde. Momentan bin ich wirklich noch mit dem 003 
und parallel hierzu mit einem STM32F4 beschäftigt (Spiele). Viele 
Projekte verderben den Brei und ich glaube ich verballere schon jetzt 
"zu" viel Zeit mit den schwarzen Käferlein

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.