WCH RISC-V-MCUs im Test: Was können 10-Cent-Mikrocontroller aus China?

In der Vergangenheit sind wir gelegentlich über Meldungen zu extrem günstigen Mikrocontrollern(öffnet im neuen Fenster) von Herstellern aus der Volksrepublik China gestolpert. Eine gewisse Bekanntheit erlangten die RISC-V-Modelle der Nanjing Qinheng Microelectronics Co., Ltd., die unter dem Markennamen WCH (für Winchiphead) verkauft werden. Wir haben drei Modelle getestet.
Auf den ersten Blick ist das Angebot von WCH ziemlich erschlagend: Zur Auswahl stehen Dutzende Varianten mit unterschiedlichster Peripherie - diese reicht bis zu Ethernet- und USB-2.0-Schnittstellen. Bei vielen handelt es sich allerdings um reine Protokollwandler, die für uns uninteressant sind. Wir haben uns für die Modelle CH32V003(öffnet im neuen Fenster) , CH32V203(öffnet im neuen Fenster) und CH570 entschieden. Der Hersteller bietet günstige, damit bestückte Evaluationsplatinen an.
Die drei Controller decken ein breites Spektrum an Funktionalität ab: Der CH32V003 ist am ehesten etwa mit der Attiny-Reihe von Microchip zu vergleichen. Er bringt alle klassischen Schnittstellen (UART, SPI, I 2 C) mit und beherrscht PWM (Pulsweitenmodulation). Den CH570 positioniert WCH als dessen deutlich erweiterten Nachfolger: Er verfügt nicht nur über ein 2,4-GHz-Funkmodul (zu dem wir noch näher kommen), sondern auch über einen USB-Controller.
Der CH32V203 hat davon sogar zwei, von denen einer High-Speed-Übertragungen mit 480 MBit/s unterstützt. Dazu kommen CAN (Controller Area Network), eine Echtzeituhr und zwei Operationsverstärker - für weniger als einen Euro pro Chip. Alle Controller sind großzügig mit Speicher ausgestattet - die Tabelle unten gibt einen Überblick.
Kernechaos
Alle drei Mikrocontroller (kurz MCUs für Microcontroller Units) nutzen Qingke ( Tibetische Hochlandgerste(öffnet im neuen Fenster) ) genannte RISC-V-Kerne, allerdings in drei verschiedenen Versionen - V2, V3 und V4. Diese unterscheiden sich hauptsächlich im Funktionsumfang, sprich den implementierten RISC-V-Erweiterungen, sowie der Tiefe der Pipeline.
Alle unterstützen zwei verschachtelte (nested) Interrupts, der CH32V203 verfügt zudem über eine Sprungvorhersage (g+) , während der CH32V003 mit auf 16 Register halbiertem Registersatz und ohne Hardware-Multiplizierer auskommen muss.
| Name | Prozessor | max. Taktfrequenz | SRAM | Flash | Pins |
|---|---|---|---|---|---|
| CH32V003 | Quingke V2A (RV32EC) | 48 MHz | 2 kByte | 16 kByte Programm, 1.920 Byte Bootloader, je 64 Byte Konfiguration und User | 8/16/20 |
| CH32V203 | Quingke V4B (RV32IMAC) | 144 MHz | 10/20 kByte | 32/64 kByte Programm, 28 kByte Bootloader, je 128 Byte Konfiguration und User | 20/28/32/48 |
| CH570 | Quingke V3C (RV32IMCB) | 100 MHz | 12 kByte | 240 kByte Programm, 8 kByte Bootloader, 8 kByte Konfiguration | 8/10+1/20 |
Als wäre das nicht schon unübersichtlich genug, gibt es auch innerhalb der drei Kernvarianten Unterschiede: Dort gibt es noch einmal bis zu fünf Varianten mit unterschiedlichen Features. Auf die Programmierung hat das, zumindest in Hochsprachen, zwar erst einmal keinen direkten Einfluss. Das Portfolio von WCH wird aber dadurch sowie durch Varianten innerhalb der einzelnen Modellreihen extrem unübersichtlich, weshalb bei konkreten Anforderungen ein genauer Blick ins jeweilige Datenblatt ratsam ist.
Meh statt BLE
Genau den haben wir vernachlässigt: Eigentlich rechneten wir beim CH570 mit Unterstützung für Bluetooth Low Energy (BLE), die gibt es aber nur beim ansonsten identischen CH572. Zumindest bei den CH32-Modellen ist allerdings das Speicher-Layout konsistent, bestimmte Hardware-Einheiten sind also immer an derselben Adresse eingeblendet. Der CH570 hingegen nutzt eine andere Struktur.
So divers wie die drei Controller sind die Platinen: Der CH32V003 kann nur mittels Programmieradapter programmiert werden (die USB-C-Buchse dient lediglich der Stromversorgung), die beiden anderen Modelle auch über USB. Um den entsprechenden Bootloader zu starten, überlegten sich die Entwickler auch jeweils eine eigene Variante: Bei der CH570-Platine gibt es, wie beim Raspberry Pi Pico, einen Taster, beim CH32V203 hingegen müssen wir eine Steckbrücke abziehen und stattdessen einen Kontakt mit der Versorgungsspannung verbinden.
Werfen wir als nächstes einen Blick auf die Qualität der Datenblätter und die verfügbaren Entwicklungsumgebungen.
Dokumentation und IDEs
Die Datenblätter sind brauchbar, wenn auch nicht so gut wie die von Microchips AVR-Mikrocontrollern oder den Mikrocontrollern der Raspberry Pi Ltd. Für die CH32-MCUs existieren jeweils ein Datasheet und ein umfangreicheres Reference Manual, das sämtliche Register der Hardware sowie deren Funktionalität dokumentiert. Beim CH570 findet sich alles im Datenblatt, das knapper gehalten ist.
Oft scheint die Sprachbarriere durch, angesichts der Tatsache aber, dass China WCHs Hauptmarkt ist, geht das für uns in Ordnung. Gelegentlich finden sich Stellen, die etwas schwer verständlich sind, komplett unverständliche Stellen fanden wir aber nicht. Die Dokumentation der drei Platinen allerdings greift teils etwas kurz, wie wir noch merken werden.
Über das Github-Repository von WCH(öffnet im neuen Fenster) werden zudem Schaltpläne aller Evaluationsplatinen bereitgestellt. Diese sind allerdings teils nicht vollständig. Neben sehr umfangreichen Codebeispielen zu jedem Mikrocontroller wird dort zudem eine Arduino-Bibliothek für die CH32-Mikrocontroller bereitgestellt.
Die URL des Repositories kann in der Arduino-IDE (Integrated Development Environment) über Datei → Einstellungen → Zusätzliche Board Manager URLs als Quelle für Board-Beschreibungen hinzugefügt werden. Anschließend können die erforderlichen Komponenten über den Reiter Boards an der linken Seite der IDE ergänzt werden.
Mit Arduino schnell startklar
Wir mussten zudem den Treiber für den Programmieradapter WCH Link E installieren. Dazu luden wir das WCH Link Utility herunter - das wird später noch wichtig. Aus der Arduino-IDE konnten unsere beiden unterstützten Mikrocontroller (CH32V003 und CH32V203) nur über den Adapter programmiert werden, obwohl der CH32V203 auch die Programmierung über USB unterstützt. Dafür bringt der Adapter aber gleich einen UART-USB-Wandler mit.



Die Programmierung über die Arduino-IDE ist gewohnt unkompliziert, WCH bietet mit Mounriver(öffnet im neuen Fenster) aber auch eine eigene, komplexere IDE an. Beide nutzen eine eigene gcc-Toolchain, die selbstverständlich auch ohne IDE verwendet werden kann. Sie sollte genutzt werden, da WCH einige proprietäre Erweiterungen des Befehlssatzes sowie Hardware-Unterstützungen für die Stack-Verwaltung bei Interrupts implementiert.
Die eigene IDE ist gut, aber...
Die Basis von Mounriver ist Visual Studio Code, allzu große Einstiegshürden sollte es also nicht geben. Die IDE bringt zudem eine weitere Software zur Übertragung von Programmen in den Flash-Speicher eines Mikrocontrollers mit, sie heißt WCH ISP Tool (ISP steht für In-System Programmer).
In Mounriver legen wir ein neues Projekt an, wobei wir direkt auswählen müssen, für welchen Mikrocontroller wir entwickeln wollen - hier muss direkt die konkrete Variante ausgewählt werden. Das neue Projekt wird immer aus einem Template erzeugt, ein leeres Projekt scheint es nicht zu geben. Die Templates sind für den Einstieg interessant, da wir gleich ein Beispielprojekt haben, bei konkreten Projekten dürften sie aber schnell stören.
In das neue Projekt werden auch Bibliotheken für die Hardware-Einheiten des jeweiligen Mikrocontrollers kopiert. Diese nehmen den Großteil der Konfiguration ab, sodass wir schnell loslegen können. Da der CH570 nicht vom Arduino-Plug-in unterstützt wird, ist unser erstes Mounriver-Projekt eine Portierung unseres Benchmark-Codes, den wir bereits für die Tests des Arduino Uno R4 und Raspberry Pi Pico 2 verwendeten.
Hier macht sich bemerkbar, dass der CH570 noch recht neu ist: Das Beispielprojekt umfasst wesentlich weniger Code, es fehlt die Debug-Bibliothek, die uns beim CH32V203 aufgefallen ist und etwa die Funktion printf mitbringt. Interessanterweise funktioniert die Ausgabe über das UART mittels printf dennoch, wie wir durch Zufall feststellen - es ist eine portierte C-Standardbibliothek verfügbar. Sämtliche Kommentare im Beispielprojekt sowie den Hardwarebibliotheken sind zudem auf Chinesisch.
Das sollte sich allerdings als kleinstes Problem erweisen.
CH32-MCUs überzeugen, der CH570 ist noch reichlich grün
Denn aus Mounriver lässt sich der CH570 zunächst nicht programmieren. Mit den beiden ISP-Tools können wir zudem keine Verbindung zu den drei Mikrocontrollern mittels des Programmieradapters herstellen. Wir können also auf diesem Weg kein Programm in den Flash-Speicher schreiben.
Die Programmierung über USB hingegen funktioniert mit dem WCH ISP Tool bei CH32V203 und CH570 problemlos. Damit fehlt allerdings die Möglichkeit, Software auf dem Mikrocontroller zu debuggen. Auch das ist mit dem Programmieradapter möglich.
Die IDEs hingegen können zumindest mit den CH32-MCUs kommunizieren. Das liegt daran, dass hier mit Openocd ein drittes ISP-Tool verwendet wird. Beim CH570 jedoch bekommen wir beim Versuch, ihn über Flash → Download zu programmieren, nur den Hinweis, dass wir erst den Lese- und Schreibschutz entfernen müssen. Das gelingt uns schlussendlich mittels des WCH Link Utility, nachdem wir es unter Windows mit Administratorrechten gestartet haben.
Unter Linux muss gegebenenfalls eine udev-Regel angelegt werden, um mit Nutzerrechten auf das Gerät zugreifen zu können. Leider geht aus der Anleitung zur Entwicklungsplatine nicht eindeutig hervor, dass dieser Schritt erforderlich ist.
Nun kann der Chip aus Mounriver programmiert werden, Debugging ist aber weiterhin nicht möglich. Dabei scheint es sich allerdings um ein Softwareproblem zu handeln, da Openocd permanent Fehlermeldungen ausgibt.
Beim CH570 scheint noch einiges unfertig
Das ist aber nicht der einzige Aspekt, der den CH570 unfertig wirken lässt. Ein Durchlauf durch unseren Benchmark mit Conway's Game of Life dauert, je nach Optimierungsstufe des Compilers, mindestens 58 Sekunden und mehr.
Das ist rund zehn Mal so lang, wie der Arduino Uno R4 braucht - obwohl der CH570 mit 100 MHz mehr als doppelt so schnell taktet. Den Grund dafür konnten wir spontan nicht finden, hier ist eine intensivere Fehlersuche erforderlich. Wir nahmen den durchaus interessanten Chip daher nicht mit in den folgenden Vergleich auf.
Die CH32-MCUs liefern ordentliche Leistung
Die Leistung der beiden CH32-MCUs löst zwar keine Begeisterungsstürme aus, ist aber solide. Beim CH32V003 mussten wir die Problemgrößen verkleinern, die angegebenen Werte sind extrapoliert. Der Grund dafür ist, dass der Compiler ein Viertel des RAM für den Stack reserviert. Das ist wesentlich mehr als beim Arduino Uno R3, für dessen ebenfalls 2 kByte großen RAM die Implementierung von Game of Life angepasst war. Trotz des halbierten Registersatzes schlägt der 10-Cent-Mikrocontroller dessen Atmega328 deutlich.



Wir gaben zudem Werte für zwei verschiedene Optimierungen an - auf minimale Anwendungsgröße (-Os) und maximale Leistung (-O3). Denn beim Arduino-Plug-in von WCH kann das Optimierungsziel, anders als bei den Arduino-Boards, ausgewählt werden.
Der CH32V203 ordnet sich zwischen RP2040 und RP2350 ein. Im Gleitkomma-Benchmark schlägt er die RISC-V-Kerne des letzteren, auch unter Einbeziehung des etwas höheren Takts, leicht. Da ihm allerdings eine Gleitkommarecheneinheit fehlt, ist er den Cortex-M33-Kernen des RP2350 deutlich unterlegen.
Sollte man also die WCH-Mikrocontroller als ernsthafte Alternative in Erwägung ziehen?
WCH-Mikrocontroller: Preis und Verfügbarkeit, Fazit
Wir bestellten die Evaluationsplatinen über Aliexpress, dort betreibt WCH einen offiziellen Shop(öffnet im neuen Fenster) . Die beiden CH32-Platinen kosten als Kit mit Programmieradapter 19 Euro inklusive Versand, von jedem Mikrocontroller liegen noch einmal fünf bei. Die CH570-Platine kostet inklusive Versand acht Euro. Eine Reihe anderer Anbieter verkauft Platinen mit CH32V003 bereits für weniger als einen Euro.
Auch die Mikrocontroller werden, je nach Modell, in Stückzahlen zwischen fünf und 50 über Aliexpress verkauft. Der CH32V003 kostet, je nach Gehäuse, zwischen 15 und 25 Cent (verkauft werden 50 Stück), der CH570 50 Cent (5 Stück, andere Anbieter bieten 10 mit geringerem Stückpreis an) und der CH32V203 zwischen 78 und 99 Cent (20 Stück, Preis wiederum abhängig vom Gehäuse). Die Versandkosten sind jeweils schon enthalten.
Während der Aliexpress-Shop für Privatkunden erste Wahl ist, werden gewerbliche Interessenten dort nicht glücklich. Bei größerem Produktionsumfang wird wohl niemand reihenweise Gurtabschnitte bestellen wollen. Auf Rolle werden die WCH-Mikrocontroller allerdings nur vom chinesischen Distributor LCSC angeboten, Digikey, Farnell oder Mouser führen sie nicht.
Dort kommt man dann auch auf die kursierenden Cent-Preise - muss allerdings noch Einfuhrumsatzsteuer und Versandkosten aufschlagen. Der CH32V203 ist ab 31 Cent gelistet, CH570 und CH572 sind zum Zeitpunkt der Verfassung dieses Textes noch nicht erhältlich. Auch der CH570 soll in großen Stückzahlen ab 10 Cent kosten.
Fazit: Attraktive Mikrocontroller, aber auch für jeden?
Ein gewerblicher Einsatz der WCH-Mikrocontroller sollte aber gut überlegt sein. Sorgen machen sollten nicht in erster Linie eventuelle Hardware-Backdoors oder Abschalteinrichtungen. Vielmehr riefen die Kampfpreise chinesischer Unternehmen die EU auf den Plan .
Es ist denkbar, dass Sonderzölle eingeführt werden könnten, die den Kostenvorteil und eventuelle Investitionen in Code-Anpassungen zunichte machten. Die US-Regierung führte 2024 ähnliche Untersuchungen durch .
Im schlimmsten Fall könnte ein Hersteller wie WCH auf der Entity List des US-Handelsministeriums landen, was Geschäftsbeziehungen effektiv unmöglich macht. Die kompliziertere Beschaffung stellt ein weiteres Hindernis dar. Andererseits konnte sich etwa Espressif international etablieren. Der Hersteller der beliebten ESP-MCUs ist jedoch deutlich internationaler aufgestellt als WCH.
Für den DIY-Bereich sehen wir die WCH-MCUs als interessante, aber nicht unkomplizierte Alternative. Das liegt nicht nur an der oft etwas unübersichtlichen Software und dem unsortiert wirkenden Portfolio, es fehlt insbesondere eine größere englischsprachige Community. Das erschwert die Problemlösung weiter. WCH bietet definitiv interessante Mikrocontroller an, insbesondere an den CH570 hatten wir hohe Erwartungen, die aber bislang nicht ganz erfüllt wurden.
Auch wenn die älteren CH32-Modelle besser unterstützt werden, würden wir keine explizite Empfehlung aussprechen. Wer auf unkomplizierte Entwicklung Wert legt, sollte lieber bei Arduino oder Raspberry Pi Pico bleiben - zumal letzterer nur unwesentlich teurer ist.



