Forum: Mikrocontroller und Digitale Elektronik ch32v003: Diskrepanz zwischen Datenblatt und ch32v003fun


von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

So, natürlich werde ich bestimmt wieder "verhauen" aber vllt. gibt es ja 
auch konstruktive Stellungsname.

Nachdem hier ab und an für billigste Mikrocontroller (neben PFS154) eben 
auch CH32V003 auftaucht, habe ich mich jetzt doch dazu durchgerungen 
mich mit diesem (dann neben STM32) auch zu befassen. Da mir das 
Herstellerpaket "mounriver" dann doch ein Brocken zu arg ist und ich 
sowieso meine Dinge mittels Editor(en) und Makefiles erstelle, befasse 
ich mich jetzt eben auf der Basis von ch32v003fun.

Da mir der Aufbau und die Benennung der Funktionsnamen nicht so gefällt 
(weil er in mein Schema der von mir benutzten anderen Controllerfamilien 
nicht so passt), passe ich mir dieses Framework jetzt an meine 
Gegebenheiten an und stolpere gleich zu Beginn an den GPIO's.

Mir gefällt bspw. das Initialisieren eines Pins als Ausgang oder Eingang 
respektive das Setzen/Löschen eines Pins in Form von funPinMode und 
funDigitalWrite so gar nicht, also möchte ich das durch meine eigenen 
Namen ersetzen (und dabei auch einigen Overhead von ch32v003fun 
beseitigen).

Natürlich schaue ich mir hierbei an, wie der Autor von ch32fun das 
gemacht hat und durchforste dessen Headerdateien (die ich weiter 
verwenden möchte, weil ich aus dem Datenblatt nicht das Rad noch einmal 
neu erfinden will).

Also Datenblatt zur Hand genommen und geschaut, was ch32fun so macht 
(und hier <ironiean> freue <!ironieaus> ich mich schon einmal über die 
Darstellungen im Datenblatt, weil ich mir erst einmal das Hirn verrenken 
muß, wie etwas dargestellt ist).

Im Speziellen geht es mir hier jetzt um das CFGLR Register (welches ich 
im Aufbau schon etwas "merkwürdig" finde).

Lt. Datenblatt sind die Bits 0 und 1 Modebits und im speziellen für den 
Takt der GPIOs zustäandig (bzw. Inputmode)... siehe Bildanhang

Hier soll es lt. Datenblatt 10MHz, 2MHz und 30MHz geben. Hier ist 
gesagt, dass im gesamten Datenblatt es ausser der Busfrequenz keinen 
Hinweis auf 50MHz gibt.

In einer Headerdatei hat der Autor die Taktfrequenzen folgendermaßen 
deklariert:
1
/* Output Maximum frequency selection */
2
typedef enum
3
{
4
  GPIO_Speed_In = 0,
5
  GPIO_Speed_10MHz,
6
  GPIO_Speed_2MHz,
7
  GPIO_Speed_50MHz
8
} GPIOSpeed_TypeDef;

Nach diesem Enumerator bekomme ich für die Bezeichnung GPIO_Speed_50MHz 
den Wert 3. Lt. Datenblatt müßte das dann doch GPIO_Speed_30MHz heißen, 
oder sehe ich das falsch?

von Michael D. (nospam2000)


Lesenswert?

Ralph S. schrieb:
> Nach diesem Enumerator bekomme ich für die Bezeichnung GPIO_Speed_50MHz
> den Wert 3. Lt. Datenblatt müßte das dann doch GPIO_Speed_30MHz heißen,
> oder sehe ich das falsch?

Ja

von Norbert (der_norbert)


Lesenswert?

Ralph S. schrieb:
> Nach diesem Enumerator bekomme ich für die Bezeichnung GPIO_Speed_50MHz
> den Wert 3. Lt. Datenblatt müßte das dann doch GPIO_Speed_30MHz heißen,
> oder sehe ich das falsch?

Ich musste auch erst drei mal drüber lesen, bis mir klar wurde was du 
meinst. ;-)

Aber auch ich denke, dass im Headerfile eine falsche Bezeichnung gewählt 
wurde. Es sollte GPIO_Speed_30MHz heißen.

von Vanye R. (vanye_rijan)


Lesenswert?

> Hier soll es lt. Datenblatt 10MHz, 2MHz und 30MHz geben. Hier ist
> gesagt, dass im gesamten Datenblatt es ausser der Busfrequenz keinen
> Hinweis auf 50MHz gibt.

Ich verstehe das anders. :-D

Die Geschwindigkeiten von Portleitungen werden eher ueber den Strom
definiert mit dem eine Portleitung schaltet. Daraus ergibt sich
die Flankensteilheit und davon abhaengig fuer welche Frequenz
das ganze geeignet ist. Ich denke aber nicht das da direkt
eine Frequenz vom Takt abgeleitet wird.

Vanye

von Norbert (der_norbert)


Lesenswert?

Vanye R. schrieb:
> Ich denke aber nicht das da direkt
> eine Frequenz vom Takt abgeleitet wird.

Denke ich auch nicht.
Hat Ralph aber auch nicht geschrieben.

Er vermeldet lediglich, dass es im gesamten Datenblatt – außer bei der 
Busfrequenz – keinerlei Hinweis auf 50MHz gibt.

von Ralph S. (jjflash)


Lesenswert?

ich werde nächste Woche einmal mit dem Logicanalyzer an einen PIN gehen 
und den frei toggeln lassen um zu sehen, welche Maximalfrequenz da 
herauskommt.

Für GPIO-Pins ist das wahrscheinlich schon eher zweitrangig, aber für 
einen SPI-Datentransfer (der sich derselben Deklaration bedient) kann 
das schon einen Unterschied machen, ob die Taktfrequenz der Pins 10 oder 
30MHz hat.

:-) SPI wird wohl die zweite Chalenge werden, weil ich im Netz gelesen 
habe, dass der 16-Pinner bei SPI wohl fehlerhaft ist (oder sein soll).

Vielen Dank vorerst an Norbert.

Und an MichaelD : es wäre interessant, wie dann Deine richtige 
Sichtweise aussieht. Für mich stellt sich das so dar, dass wenn ich das 
Register mit der Deklaration GPIO_Speed_50MHz beschreibe jedoch 30MHz 
werden (und demnach in den Beispielprogrammen, bei denen die 
50MHz-Angabe steht, das ganze mit 30MHz konfiguriert wird).

---------------------------------------

Ich bin mal gespannt, wie lange es dauern wird, bis die mir wichtigen 
Dinge an meine Notationen angepasst sind.

---------------------------------------

Ein schönes Wochenende euch allen

von Harald K. (kirnbichler)


Lesenswert?

Du könntest Dir ansehen, wie es WCH selbst macht, indem Du Dir 
"mounriver studio" installierst und dort in den entsprechenden 
Headerdateien stöberst.

Wenn Du einen tatsächlichen Fehler in ch32fun (ist mittlerweile 
umbenannt worden) findest, wird sich Charles Lohr sicherlich darüber 
freuen, wenn Du ihm das mitteilst.

Beitrag #7849454 wurde vom Autor gelöscht.
von Ralph S. (jjflash)


Lesenswert?

Meine Recherchen haben ergeben, dass der "Fehler" wohl weder bei ch32fun 
(Charles Lohr) noch bei mir liegt, sondern dass es wohl ein Reference 
Manual (v 1.4) für den CH32V003 gibt, bei dem dann tatsächlich 50MHz 
angegeben sind (und nach dem sich Lohr wohl augenscheinlich gerichtet 
hat, aber in dem von mir verwendeten Reference Manual v1.7 stehen dann 
30MHz drin!

von Reinhard R. (reirawb)


Lesenswert?

Also bei dem bisher von mir verwendeten Referenzmanual steht 50MHz.
Es ist allerdings V1.5 und damit älter als deine V1.7.
Vielleicht hat WCH da was geändert.
Wobei -wenn ich ins Datenblatt schaue- ich eher den Eindruck gewinne, 
dass sich die Einstellung der GPIOs auf die Anstiegs- und Abfallzeit 
bezieht.
Dort angegeben (max.):
 2MHz ‐-> 125ns
10MHz -->  25ns
30MHz -->  10ns (im vorliegenden DaBla V1.4 steht wieder 30MHz)

: Bearbeitet durch User
von Vanye R. (vanye_rijan)


Lesenswert?

> dass sich die Einstellung der GPIOs auf die Anstiegs- und Abfallzeit
> bezieht.

Sagte ich ja schon. Damit stellt man eigentlich den Strom ein und als 
folge davon die Anstiegszeit. Benutzt doch mal euer tolles Oszi und 
schaut euch das an.

Vanye

von Ralph S. (jjflash)


Lesenswert?

Vanye R. schrieb:
>> dass sich die Einstellung der GPIOs auf die Anstiegs- und Abfallzeit
>> bezieht.
>
> Sagte ich ja schon. Damit stellt man eigentlich den Strom ein und als
> folge davon die Anstiegszeit. Benutzt doch mal euer tolles Oszi und
> schaut euch das an.
>
> Vanye

Genau das werde ich nächste Woche einmal machen, just for fun, 
allerdings, wie Vanye bereits gesagt hat ging es mir nicht darum, 
sondern lediglich um die Bezeichnung.

Mit den beiden Bits im GPIOx_CFGLR Register wird der Modus eingestellt, 
als Eingang oder Ausgang, und wenn als Ausgang, dann welche maximale 
Geschwindigkeit verwendet werden kann (resultierend aus Anstiegs- und 
Abfallzeiten).

Egal ob da dann im Text 30MHz oder 50MHz steht, die Bits werden eben für 
die schnellstmögliche Frequenz gestellt.

von Tim  . (cpldcpu)


Lesenswert?

Ralph S. schrieb:

> Nachdem hier ab und an für billigste Mikrocontroller (neben PFS154) eben
> auch CH32V003 auftaucht, habe ich mich jetzt doch dazu durchgerungen

Nicht zu vergessen: Die Puya CM0 controller.

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.