Forum: Mikrocontroller und Digitale Elektronik STM32 - µC Reset bei SPI Prescaler 256


von ui (Gast)


Lesenswert?

Hallo Leute,
ich habe ein komisches Problem.
Ich nutze das STM32F4 Discovery Board und wollte auf eine µC SD Karte 
schreiben (mit Adafruit 358 Display. Es wird überall empfohlen die 
Initialisierung mit weniger als 400kHz zu machen. Mein Clock läuft auf 
168Mhz, demnach brauche ich einen Prescaler von 256 für SPI1 um auf 
unter 400kHz zu kommen. Jetzt habe ich ein ganz komisches Problem: Ich 
debugge mit dem JLink und sobald ich das erste mal mit diesem Prescaler 
ein Datum auf den SPI schreibe, schmiert das Ding einfach ab. Und zwar 
komplett. Geht in den Reset und startet neu...
Mit Prescaler 128 passiert das nicht, leider lässt sich damit die Karte 
nicht initialisieren. Hatte jemand schonmal ein ähnliches Problem oder 
weiß woher das kommt?

von Aha? (Gast)


Lesenswert?

Möglicherweise mag das daran liegen, dass der SPI Prescaler 8 bit hat?

Weil 256, das wäre 0x100 und damit 9Bit. Und schreibt man das da rein, 
hat man den Prescaler 0x00 eingestellt. Das könnte möglicherweise 
fallweise etwas schnell sein, für die arme SPI.

Kuckt man S604 im Reference Manual.

von Stefan K. (stefan64)


Lesenswert?

Schau doch mal, welche Reset-Quelle das ist. Ist die Watchdog aktiv?

Gruß, Stefan

von ui (Gast)


Lesenswert?

Aha? schrieb:
> Möglicherweise mag das daran liegen, dass der SPI Prescaler 8 bit hat?
>
> Weil 256, das wäre 0x100 und damit 9Bit. Und schreibt man das da rein,
> hat man den Prescaler 0x00 eingestellt. Das könnte möglicherweise
> fallweise etwas schnell sein, für die arme SPI.
>
> Kuckt man S604 im Reference Manual.

Sicher nicht. Das RM sagt im Punkt 28.5.1 das der Wert 111b im BR Teil 
des Control Registers vom SPI einen Prescaler von 256 hat.

Stefan K. schrieb:
> Schau doch mal, welche Reset-Quelle das ist. Ist die Watchdog aktiv?

Was meinst du mit Reset-Quelle? Und nein, Watchdog ist nicht aktiv.

Ich seh ja auch auf dem Oszi, dass das eine Byte noch rausgeschrieben 
wird. Dannach ist das Ding tot.

von Stefan K. (stefan64)


Lesenswert?

Such mal im Reference Manual nach:

7.3.22 RCC clock control & status register (RCC_CSR)

Zu beachten ist, dass die Flags nur durch einen Power-Reset 
zurückgesetzt werden.

Viele Grüße, Stefan

von Aha? (Gast)


Lesenswert?

ui schrieb:
> Sicher nicht. Das RM sagt im Punkt 28.5.1 das der Wert 111b im BR Teil
> des Control Registers vom SPI einen Prescaler von 256 hat.

Stimmt, nach erneutem Lesen des Urprungsbeitrags muss ich zustimmen.

Er hat ja (laut eigenem Bekunden) einen Prescaler von 256 gesetzt, und 
nicht 256 auf das Prescalerregister geschrieben, wie ich zunächst 
herausgelesen hatte.

Danke für die Korrektur, damit ist mein Post natürlich so nicht richtig.

von ui (Gast)


Lesenswert?

Stefan K. schrieb:
> Such mal im Reference Manual nach:
>
> 7.3.22 RCC clock control & status register (RCC_CSR)
>
> Zu beachten ist, dass die Flags nur durch einen Power-Reset
> zurückgesetzt werden.
>
> Viele Grüße, Stefan

Interessant ist noch folgendes:
Stelle ich den APB2 Prescaler auf 4 (also quasi 42 Clock Signal auf den 
SPI Peripherie-Baustein) und wähle dann einen Prescaler von 256 aus, 
funktioniert das Ding auch.
Ich kanns mir grad nicht so recht erklären -.-

von Martin Beuttenmüller (Gast)


Lesenswert?

Guten Morgen.

Der Takt wird mehrmals geteilt und (durch PLL) wieder vervielfältigt.
Besteht die Möglichkeit, daß Deine (logisch korrekte) Auswahl
eventuell physikalisch nicht erlaubt ist?

Vieleicht findet sich eine alternative Kombination, die das
gewünschte Resultat liefert und zulässig ist.

Gibt es in "Errata" Hinweise/Eintragungen?

Ich drück die Daumen
Martin

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.