ch32v003: Diskrepanz zwischen Datenblatt und ch32v003fun

#7849268
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?

Angehängte Dateien:
#7849273
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.

#7849288
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

#7849308
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

Beitrag #7849454 wurde von einem Moderator gelöscht.
#7849470
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!

#7849472
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)

#7849544
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren