Hallo Forengemeinde, Wenns dem Esel zu wohl wird, geht er aufs Eis. oder etwas positiver formuliert Man ist alt wenn man nichts Neues mehr anfängt. In einem Anflug von Größenwahn habe ich mir zum Probieren ein Set mit einem Testboard mit CH32V003 + Programmer bestellt (habe bisher nur Atmels verwendet). Erste Gehversuche mit dem MounRiver-Studio waren auch erfolgreich, das Blinkprogramm aus dem GPIO_Toggle-Beispiel tut was es soll. Ich habe dann auch noch ein paar Änderungen am Programm ausprobiert. Tat soweit alles wie es sollte, bis plötzlich das Schreiben auf den Flash beim nächsten Versuch nicht mehr funktionierte. Fehlermeldung siehe Meldung_3.jpg. Das Compilieren funktioniert ohne Fehler (Meldung_1.jpg), die dabei auftretenden Warnungen sind IMO irrelevant (Meldung_2.jpg). Ich interpretiere die Meldung so, das der zu flashende Prozessor nicht erkannt wird. Das zuletzt geflashte Programm blinkt weiter lustig vor sich hin, der Prozessor läuft also noch. Was habe ich bisher versucht? - Firmware des WCH-LinkE neu geflasht, Programmer wird erkannt und Firmware ist aktuell (Meldung_3.jpg) - Windows-Treiber neu installiert - in den Project-Properties gesucht, ob dort ein falscher Prozessor eingetragen ist, ist OK - Das originale GPIO_Toggle-Programm (ohne meine Änderungen) neu geladen - Verkabelung erneuert, China-Dupondkabel gegen sebst gecrimptes und durchgemessenes Kabel ersetzt (ca.12 cm lang, siehe Aufbau.jpg). - Programmiersignal getestet, direkt am Prozessorpin, siehe Signal.jpg Was mir sonst noch einfällt: - MounRiver-Studio deinstallieren und neu installieren - Den Prozessor auf dem Testboard tauschen (allerletzte Option) Habt ihr noch eine Idee? Gruß und einen guten Rutsch ins neue Jahr Reinhard
Du hast ja eine Menge guter Schritte bereits durchgeführt, deine allerletzte Option käme bei mir jetzt als nächste dran. Hast Du Ersatz-CPUs zur Hand?
:
Bearbeitet durch User
Nach deinem Foto hast du ja gar keinen Programmieradapter im Einsatz, sondern nutzt die Serielle Schnittstelle? Ich denke, dass dann mit dem Bootloader etwas nicht stimmt, vielleicht war der vorinstalliert und ist nun überschrieben, oder es muss ein passender Jumper gesetzt werden. Dagegen spricht, dass es schon funktioniert hat, aber das wäre schon mal eine Richtung in die man schauen kann. Also im Datenblatt schauen, wie die Programmierung über die Serielle funktioniert.
Harald A. schrieb: > Hast Du > Ersatz-CPUs zur Hand? Ja, in dem Paket waren noch 5 Chips mit drin. Aber dieses Jahr wechsele ich nicht mehr ;-) @Maxe Doch, das ist der zum Paket gehörende Programmieradapter. Der Anschluß ist 2-reihig, kontaktiert habe ich die untere Reihe, die Beschriftung die du siehst gilt für die obere Reihe. Ich habe mal die Rückseite fotografiert. Angeschlossen sind nur GND, 3V3 und SWDIO, SWCLK wird beim CH32V003 nicht benötigt. Aber wie gesagt, es hat ja schon funktioniert, ca. 20 Schreibzyklen sind gelaufen, auf einmal ging nichts mehr. Ich hatte nur eine kleine Änderung im Programm, weder das Studio geschlossen noch sonst irgendwas. Ich habe noch mit dem WCH-LinkUtility ein paar Versuche gemacht, es gelingt keine Verbindung zum CH32V003 (Meldung_4.jpg). Also doch Chip tauschen, Mach ich gleich nächstes Jahr ;-) OK, Ich gehe jetzt feiern, rutscht gut rein. Gruß Reinhard
Irgendwo hatte ich doch gelesen, dass diese Chips eine außergewöhnlich niedrige Anzahl an Programmiervorgängen spezifiziert haben. Spekulation: Flash-Technologie war ja lange Zeit eine Technik, die nur wenige Firmen beherrscht haben. Natürlich haben wir diese Zeiten hinter uns gelassen, aber vlt. sind die bei WCH noch nicht ganz so weit.
Habe ich auch schon dran gedacht, aber lt. Datenblatt hat der min. 10k und typ. 80k Schreibzyklen. da sind 20 ein bischen wenig :-( Andererseits, Datenblätter sind geduldig... Reinhard
:
Bearbeitet durch User
Es gibt mittlerweile 4 verschiedene WCH-Link Module welches hast du Link_E? Dann solltest du im WCH Utility auch diesen Link_E einstellen. Wenn ich richtig informiert bin hat der V003 eine verkrüpelte SWD Schnitstelle ohne Clock die nur vom Link_E korrekt bedient wird. Dein Screenshot zeigt jedenfalls dass du RISC-V Link #1 ansprechen willst. Diese verschiedenen Links sind ein Problem zumal die Software zum erkennen der div Links ziemlich buggy ist. https://www.wch-ic.com/downloads/WCH-LinkUserManual_PDF.html bzw in CN only für den Link_E https://www.wch. cn/uploads/file/20231103/1698980799168976.pdf
Hallo Reinhard, Vielleicht hast Du Dir Reset oder swdio wegprogrammiert. Versuch mal das hier: https://www.mikrocontroller.net/topic/7358147 Edit: link funktioniert nicht, hier den letzten Beitrag beachten: Beitrag "CH32V003 – Ressourcen und Beschnupperung der HAL"
:
Bearbeitet durch User
In dem Bild "meldung_3" steht aber was von "CH32V305" erkannt und nichts von einem "CH32V003". Überprüf das mal...
Thomas Z. schrieb: > Es gibt mittlerweile 4 verschiedene WCH-Link Module welches hast du > Link_E? Steht übrigens im ersten Beitrag im Thread - WCH-LinkE. Einstellen muss man da in mounriver studio übrigens nichts, das erkennt selbst, was für ein Programmieradapter dransteckt und gibt sogar halbwegs sinnvolle Fehlermeldungen aus. Irgend W. schrieb: > In dem Bild "meldung_3" steht aber was von "CH32V305" erkannt Das ist schon in Ordnung, das beschreibt das "Link Device", mit anderen Worten: Den Programmieradapter. Uwe G. schrieb: > Vielleicht hast Du Dir Reset oder swdio wegprogrammiert. Reset (PD7) wird beim CH32V003 nicht zur Programmierung verwendet. PD1 aber ist kritisch. Was also war die letzte Änderung am Code?
Hallo an die versammelte Forengemeinde, zuerst wünsche ich Allen ein frohes und gesundes neues Jahr. zum Zweiten, es geht wieder, der CH32V003 auf meinem Testboard ist nicht defekt. Nach dem bekannten Motto: "Eigene Schuld ist Goldes wert" habe ich -auch durch eure Anregungen- meinen letzten Code nochmal gesichtet und habe festgestellt, dass ich meine Vereinfachungen zu weit getrieben hatte und versehentlich die gesamten Ports C und D -außer den genutzten Ausgängen- auf analog Input (0, Standard nach Reset ist 4) gesetzt habe, wodurch scheinbar ein Erkennen der MCU am PD1 verhindert wird. Zurücksetzen konnte ich diesen Fehler, indem ich im Programm WCH-LinkUtility die Funktion Target --> Erase (F9) Chip aufgerufen habe, die tat es dann auch. Das Flashen des originalen "GPIO_Toggle" funktionierte dann auch wieder (Meldung_5.jpg). Vielen Dank an Alle, die sich an der Diskussion beteiligt haben, das Ergebnis ist durchaus positiv und vielleicht für Andere mit ähnlichen Problemen auch interessant. Gruß Reinhard
Kurzer Nachtrag noch, der Harald K. lag mit seinen Analysen betreffs Programmieradapter und der Vermutung eines Code-Fehlers in seinem letzten Beitrag 100% richtig, vielen Dank an Harald K. Reinhard
Freut mich, was sinnvolles beigetragen zu haben.
Hallo Reinhard, ich habe mich vor ca. 1 Jahr auch auf die CH32xx orientiert. Vielleicht helfen dir ein paar Tips weiter. Ich flashe grundsätzlich direkt aus MounRiver Studio wobei immer erst die Konfiguration eingestellt werden muss. Vielleicht nicht bei jedem Flashvorgang, zur Sicherheit habe ich es mir angewöhnt vor dem Flashen immer die 5 Punkte (siehe Bild) durchzugehen. Verfusen wie beim AVR ist NICHT möglich, egal wie die PINs gesetzt sind. NRST ist bei meinen Demoboards grundsätzlich deaktiviert (default). Aktivieren geht nur via Software durch ändern der UserOptionBytes (siehe Bild). Deshalb muss in der Download Konfiguration bei "Erase Code Flash:" (4) der Punkt "By Power OFF" ausgewählt werden. Dann Apply und Flashen. Klappt bei mir perfekt, nachdem ich anfangs die gleichen Probleme hatte. Ich spiele auch mit dem kleinen Ableger J4M6 im SOP8 Gehäuse und kann 6 GPIOs benutzen, auch mal mit 3 TimerPWM. Momentan habe ich es mehr mit den CH32V203, da geht ein bisschen mehr. In meiner Projektliste sind viele Spielereien, aber auch einige ernste Projekte. Aktuell bastele ich an einem CO2 Messgerät mit grafischer History auf einem 3,2" Display mit ILI9341. Schon wegen der Grafik reicht der Speicher vom 003 nicht aus. Die SPI Geschwindigkeit geht auch höher. Die mitgelieferten Beispiele sind manchmal auch etwas komisch... Ein GPIO toggle sieht bei mir so aus: GPIOC->OUTDR ^= GPIO_Pin_1; und kommt als Macro in eine *.h Datei Grüße und viel Spaß mit den RISCV Teilen Lothar
Hallo Lothar, vielen Dank für deine Hinweise, ich stehe erst ganz am Anfang. Diese Einstellungen von deinem Flashen1.jpg mache ich vorher nicht, bisher hat es mit meinem Testboard so funktioniert, bis auf das eine Mal. Aber ich werde das mal im Hinterkopf behalten. Mich nervt hauptsächlich dieses umständliche Programmieren mit diesen Strukturen, da blicke ich nicht richtig durch. Deshalb versuche ich das Ganze, sagt man da "bare metal"? zu programmieren. ich habe mal zwei Dateien angehängt, wie ich einzelne Pins konfiguriere, ohne die anderen zu beeinflussen (was ja Ursache für mein Problem weiter oben war). Aufruf dann einfach: SET_PIN('D', 0, UOUT_PP_50); Gibt es bestimmt bessere Lösungen, aber ist ja aber nur für mich als hobbybetreibender Rentner. der CH32V203 steht auch noch auf dem Plan, war mit Demoboard und 5 Einzelexemplaren auch in meinem Starterpaket, aber ich will erst mal den Kleinen quälen :-) Erstes Projekt ist die Ansteuerung von mehreren WS2812b bzw. WS2815. Platinen dafür sind bestellt, schaun wir mal. Auch dir noch gutes Gelingen mit Risk-V :-) Gruß Reinhard
Reinhard R. schrieb: > Risk-V :-) Reduzierte Instruktions-Satz Kommandos - Version Fünf Sehr schön! ;-)
Reinhard R. schrieb: > Mich nervt hauptsächlich dieses umständliche Programmieren mit diesen > Strukturen, da blicke ich nicht richtig durch. Deshalb versuche ich das > Ganze, sagt man da "bare metal"? zu programmieren. Diese Strukturen sind an die von STM für ihre STM32-µCs entwickelten HAL "Cube MX" angelehnt. Wer also Erfahrung mit STM32 hat, wird sich schnell zurechtfinden. Wenn Du aber "näher am Geschehen" dransein willst, solltest Du Dir das hier mal ansehen: https://github.com/cnlohr/ch32v003fun
Hallo Reinhard, komisch, dass sich so viele Rentner mit RISC-V beschäftigen. Ich gehöre auch dazu. An die Init-Strukturen habe ich mich schon gewöhnt, als ich mit STM experimentiert habe. Sieht umständlich aus, ist aber sehr aussagekräftig und praktisch. Mit Copy-Paste hält sich der Tipaufwand auch in Grenzen und ein ganzer Port in einem Rutsch ist auch möglich. Dein einfacher Aufruf von SET_PIN ist dagegen recht kryptisch. Aber viele Wege führen zum Ziel. Meine Spielerei mit WS2812 hänge ich mal an. Da habe ich das Timing einfach mit NOPs gemacht, landwirtschaftlich. Der Systick ist zwar schnell und gut, wird aber auch von den Delays benutzt und nach dem Delay gestoppt. Super finde ich auch die Printf Funktion die im Debug integriert ist. Gibt es beim Arduino auch, bei STM sind Hilfsmittel gefragt. Außerdem ist der Preis unschlagbar, made in China eben. Dazu gehen einige Typen auch mit 5 Volt und OPVs sind auch drin. Habe ich noch nicht getestet, da auch schlecht dokumentiert. Also, viel Spaß mit den RISC-V, ich habe ihn. Grüße Lothar
Harald K. schrieb: > Diese Strukturen sind an die von STM für ihre STM32-µCs entwickelten HAL > "Cube MX" angelehnt. > > Wer also Erfahrung mit STM32 hat, wird sich schnell zurechtfinden. Ja, so habe ich das auch empfunden. Ich hatte vor 3 Jahren mal einen Einstieg in die STM-Familie begonnen. Habe mir die Sachen von Stefan Frings reingezogen, dann irgendwann wegen der Komplexität aufgegeben und meine beiden Nucleo-Boards wieder verkauft. > Wenn Du aber "näher am Geschehen" dransein willst, solltest Du Dir das > hier mal ansehen: > > https://github.com/cnlohr/ch32v003fun Uff, ist ja auch recht umfangreich, ich schaue aber auf jeden Fall mal rein, irgendwas kann man immer gebrauchen, danke. Lothar L. schrieb: > Meine Spielerei mit WS2812 hänge ich mal an. Danke, ich schaue es mir auf jeden Fall an. > Da habe ich das Timing einfach mit NOPs gemacht, landwirtschaftlich. Der > Systick ist zwar schnell und gut, wird aber auch von den Delays benutzt > und nach dem Delay gestoppt. OK, war eigentlich mein erster Gedanke, den Systick zu nutzen. Und Delay stoppt den? Ich dachte immer, der läuft durch wenn erst mal aktiviert? > Super finde ich auch die Printf Funktion > die im Debug integriert ist. OK, soweit bin ich noch nicht. Wobei meine Vorgehesweise eher "Trial and Error" als "Debugging" ist :-) > Dazu gehen einige Typen auch mit 5 Volt und OPVs sind auch drin. Ja, die 5V sind auch ein Grund die Teile zu nutzen. Ist man z.B. bei den WS2812 auf der sicheren Seite. Ich habe da noch die Diskussionen wegen Levelshifter bei 3V3-Ansteuerung hier im Forum im Hinterkopf. Gruß Reinhard
@Lothar L. Also, die WS2812-Ansteuerung in deinen ws2812.c/ws2812.h habe ich mir angesehen - und verstanden :-) Macht auch Sinn da NOPs zu verwenden, was soll das Ding in der Zeit auch sonst machen? Reinhard
:
Bearbeitet durch User
Schau dir in deinem Projektordner die debug.c an, dann weißt du, was das Teil im Delay macht.... in einer while Schleife auf den Zähler warten ;-). Und der ist 32Bit beim 003 und 64Bit beim 203. Kann schon etwas dauern. Die NOPs konnte ich wenigstens mit dem Oszi einstellen. Ist auch platzsparender als eine SPI Version. Lothar
Hallo, ich nochmal. Lothar L. schrieb: > Schau dir in deinem Projektordner die debug.c an, dann weißt du, was das > Teil im Delay macht.... in einer while Schleife auf den Zähler warten > ;-). Ja, habe es mir angesehen. Wenn ich das richtig verstanden habe, wird der SysTick bei jedem Aufruf von Delay_xx(n) auf 0 gesetzt, gestartet und bei erreichen des Compare-Wertes wieder gestoppt. Damit wäre er ja für andere Anwendungen unbrauchbar, der sollte doch durchlaufen, oder? Also SysTick vergessen und Timer verwenden oder Delay vergessen? Reinhard
Hallo Reinhard, genauso läuft das, leider. Was du, wie nutzen willst kommt immer darauf an, was dein Projekt machen soll. Wenn du den Systick verwenden willst, z.B. als 1ms Takt kannst du ein Delay_MS über den Systick Interrupt machen, für Delay_US musst du dann den laufenden Systick abfragen. Macht aber auch Probleme, wenn ein Überlauf kommt. Den Überlauf einkalkulieren bedeutet Rechnerei. Oder im µs Bereich einen Delay mit NOPs machen, verzerrt das Delay, wenn ein Interrupt dazwischen schlägt, evtl. INT solange sperren. Ansonsten die zwei anderen Timer benutzen. Mit den Watchdogs kann man für Delays leider nichts anfangen, sind ja auch nicht dafür gedacht. Für "kleinere" Projekte sollten die drei Timer ausreichen, für etwas anspruchsvollere nehme ich den V203 und warte gerade auf einen Satz CH32X035G8R6. Der kann auch 5V (sinnvoll wenn FETs ohne extra Treiber gesteuert werden sollen) hat 3 Timer und bessere OPAs, die auch besser dokumentiert sind. Leider auch nur 48MHz. Güße Lothar
Hallo Lothar, danke für deine Infos. Mein erstes fertiges Projekt habe ich hier mal kurz vorgestellt: Beitrag "Re: Zeigt her eure elektronischen Weihnachtsbasteleien!" Dort habe ich zeitliche Abhängigkeiten noch mit normalem Delay erschlagen, wobei ich Delay sonst in meinen Programmen vermeide, höchstens mal für Tests verwende. Die Erzeugung des Datentaktes habe ich mit von dir abgeguckt, danke nochmal dafür. Den CH32X035 habe ich mir auch mal angesehen, 5V ist schon für manche Anwendungen von Vorteil. Was mir allerdings aufgefallen ist, die Teile haben keine Anschlüsse für einen HSE, gut, braucht man auch nicht immer. Na schaun wir mal wie es weiter geht... Reinhard
Hallo Reinhard, sieht doch echt gut aus, dein erstes Projekt. Schickes PCB. Delay ist eben auch Geschmackssache. Ich setze oft auf State Machine und dafür ist der Systick dann wieder gut. Einen Quarz benutze ich auch selten. Für eine UART, SPI oder ws2812 reicht die Genauigkeit des HSI und ich habe zwei PINs mehr. Wenn ich die 5V nicht brauche, setze ich auf den V203 oder höher. Kann eben jeder machen wie es passt. Als Hobby sowieso. Beim V203 gibt es auch ein RTOS, das braucht eben Speicher. Lothar
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.