Forum: Projekte & Code Usb Midi Firmare für die WCH CH55x Controller


von Thomas Z. (usbman)


Angehängte Dateien:

Lesenswert?

Usb Midi Firmware für die WCH CH551-CH554. Das Projekt ist sowohl unter 
Keil als auch SDCC zu benutzen. Eine einfache Doku kann mit Doxygen 
erzeugt werden.

Den Schaltplan hab ich mal angehängt, das SPI Flash und der 3.3V Regler 
ist nicht notwendig.

Forumsthread:
Beitrag "Re: uC für 0,20€ CH552 / CH554 von WCH Billig Micro mit USB Funktion, Chip vorstellung"

Als Besonderheit gibt es 3 konfigurierbare Optionen im DataFlash
- DataFlash[0] = 0 schaltet Active Sensing aus
- DataFlash[1] = 0 schaltet Running Status auf dem Output aus.
- DataFlash[2] = 0 schaltet schaltet die Ausgabe auf Uart0.

Alle anderen Werte schalten die Optionen ein.

Running Status auf der Ausgangsseite ist noch nicht 100% getestet und 
auch nicht unbedingt notwendig (im Gegensatz zur Eingangsseite).

Das Grundkonzept des Eingangsparsers habe ich mal vor vielen Jahren auf 
einer Linux Seite als Demo für die Programmierung des Cypress FX1 oder 
AN2131 gefunden. Mit Google kann das allerdings nicht mehr finden und 
das Original hab ich nicht mehr. Ich kann deshalb keine Angaben zum 
Ursprung machen.

Die Firmware läuft stabil (getestet über viele Stunden) mit MidiOx mit 
einer Brücke von RxT und TxT und einem Midi File unter MidiOx in einer 
Endlosschleife.

von Thomas Z. (usbman)


Lesenswert?

Irgendwo ist noch ein Bug vergraben. Ich habe hier ein Midifile bei dem 
sich der Uart komplett aufhängt.
Das passiert allerdings nur mit der SDCC Variante. Die Keil Version 
spielt wie erwartet. Ich hab auch schon eine Idee was da passiert. 
Zuerst will aber die Config Optionen  via SysEx sowie das FW update 
implementieren.

Beitrag #6849393 wurde von einem Moderator gelöscht.
von Philipp Klaus K. (pkk)


Lesenswert?

Thomas Z. schrieb:
> Das passiert allerdings nur mit der SDCC Variante. Die Keil Version
> spielt wie erwartet.

Ohne Details zu kennen, kann ich zwar eigentlich nichts dazu sagen, 
aber: Eine naheliegende Möglichkeit wäre die Verwendung einer nicht 
initialisierten Variablen, die bei Keil gerade einen Wert enthält, mit 
dem es klappt, bei SDCC dagegen einen anderen.

von Thomas Z. (usbman)


Lesenswert?

Philipp Klaus K. schrieb:
> Eine naheliegende Möglichkeit wäre die Verwendung einer nicht
> initialisierten Variablen, die bei Keil gerade einen Wert enthält, mit
> dem es klappt, bei SDCC dagegen einen anderen.
Zuerst hatte ich die Vermutung, dass etwas mit dem volatile bei den Fifo 
Control structs nicht so funktioniert wie gedacht.

Inzwischen gehen meine Vermutungen aber auch eher zu nicht 
initialisierten Variablen. Ich weis inzwischen dass die Ursache wohl ein 
Bufferüberlauf bei der TxFifo ist. Warum das nur bei SDCC passiert und 
dort auch nur bei einem bestimmten Midifile, untersuche ich noch.

Ich muss mir mal den Startup Code beim SDCC genauer ansehen, den hab ich 
bisher weitgehend ignoriert.

: Bearbeitet durch User
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.