Forum: Mikrocontroller und Digitale Elektronik Baudrate einstellen SPI


von Hannes (Gast)


Lesenswert?

Hallo zusammen,

ich habe eine vielleicht dumme Frage bzgl. der Baudrate für eine SPI 
Schnittstelle:

Mein uC (Master) wird mit einer 24MHz Frequenz getaktet. Im Bus hängen 
ein paar Sensoren. Die maximale SPI-Frequenz Anforderung des 
"schwächsten" Sensors sind laut Datenblatt 840kHz.

Wie entscheide ich jetzt welche Baudrate ich wähle?
Gibt es irgendwas, was ich beachten muss?

Danke!

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Hannes schrieb:
> Wie entscheide ich jetzt welche Baudrate ich wähle?

Über das Datenblatt des verwendeten MC natürlich. Nur dieses kann dir 
sagen, wie man das SPI bedient und konfiguriert.
Da wir hier am anderen Ende des Internet nicht wissen, was du da verbaut 
hast, gehts nicht detaillierter. Es ist nur klar, das die 
Geschwindigkeit des SPI sich nach der langsamen Peripherie richten muss, 
sonst kriegt die nicht alles mit. Ist diese nicht selektiert, kanns auch 
schneller sein, das entscheiden die anderen Chips am SPI.

: Bearbeitet durch User
von Hannes (Gast)


Lesenswert?

Einen SAMD21J18A

von Walter T. (nicolas)


Lesenswert?

Matthias S. schrieb:
> [...] Es ist nur klar, das die
> Geschwindigkeit des SPI sich nach der langsamen Peripherie richten muss [...]

...wenn sie zur Laufzeit nicht umgeschaltet werden soll.

Bei allen MCU, die ich kenne, stellt man den SPI-Takt mit irgendeinem 
Teiler ein.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Walter T. schrieb:
> ...wenn sie zur Laufzeit nicht umgeschaltet werden soll.

Deswegen schrieb ich:

Matthias S. schrieb:
> Ist diese nicht selektiert, kanns auch
> schneller sein, das entscheiden die anderen Chips am SPI.

Hannes schrieb:
> Einen SAMD21J18A

Schön. Dann schau dir nun sein Datenblatt an und suche die SPI 
Peripherie.

: Bearbeitet durch User
von Hannes (Gast)


Lesenswert?

Matthias S. schrieb:
> Schön. Dann schau dir nun sein Datenblatt an und suche die SPI
> Peripherie

Ich habe folgende Formel im Datenblatt gefunden:

BAUD = fref/2*fBaud-1

Wenn ich das jetzt richtig verstehe ist
- BAUD das was ich ins Baudraten-Register schreiben muss und
- fref die o.g. 24MHz

Meine Frage ist jetzt wie ich fBaud festlege... Dazu habe ich im 
Datenblatt nichts gefunden.

von Hannes (Gast)


Lesenswert?

Hannes schrieb:
> Dazu habe ich im
> Datenblatt nichts gefunden.

Abgesehen von fBaud <= fref/2. Aber diese Bedingung ist ja ohnehin 
erfüllt, wenn meine max. mögliche Baudrate bedingt durch die anderen 
Sensoren 840kHz ist.

von Falk B. (falk)


Lesenswert?

Hannes schrieb:
> Meine Frage ist jetzt wie ich fBaud festlege... Dazu habe ich im
> Datenblatt nichts gefunden.

Das ist deine gewünschte Taktfrequenz!! OMG!

von Stefan S. (chiefeinherjar)


Lesenswert?

Hannes schrieb:
> Wie entscheide ich jetzt welche Baudrate ich wähle?
> Gibt es irgendwas, was ich beachten muss?

Kurze Antwort: So schnell wie nötig, so langsam wie möglich.

Lange Antwort:
Einen Temperatursensor mit 24 MHz SPI-Takt auslesen zu wollen (gesetzt 
dem Falle, er unterstützt diese Geschwindigkeit) wird wohl kaum einen 
Vorteil bringen - dafür aber höhere Anforderungen an das Layout.
Andererseits ein 12-Bit ADC, der mit einer Samplerate von 1MSPS arbeiten 
soll, wird wohl mit einer SPI-Taktrate von 1kHz etwas unterversorgt 
sein.

Du musst doch wissen:
- was an Sensoren ausgelesen werden soll
- wie schnell das ganze geschehen soll (oder ggf. muss)
- wie hoch die Datenrate dazu sein muss, damit die Verarbeitung der 
Daten im gewünschten Zeitrahmen stattfinden kann

von Falk B. (falk)


Lesenswert?

Hannes schrieb:
> Die maximale SPI-Frequenz Anforderung des
> "schwächsten" Sensors sind laut Datenblatt 840kHz.

Wenn es unkritisch ist, stellt man einmal diese recht langsame Baudrate 
ein und gut. Wenn man die anderen Sensoren schneller ansprechen will, 
muss man vor jedem Zugriff die Baudrate umstellen.

von Hannes (Gast)


Lesenswert?

Stefan S. schrieb:
> Kurze Antwort: So schnell wie nötig, so langsam wie möglich.
>
> Lange Antwort:
> Einen Temperatursensor mit 24 MHz SPI-Takt auslesen zu wollen (gesetzt
> dem Falle, er unterstützt diese Geschwindigkeit) wird wohl kaum einen
> Vorteil bringen - dafür aber höhere Anforderungen an das Layout.
> Andererseits ein 12-Bit ADC, der mit einer Samplerate von 1MSPS arbeiten
> soll, wird wohl mit einer SPI-Taktrate von 1kHz etwas unterversorgt
> sein.
>
> Du musst doch wissen:
> - was an Sensoren ausgelesen werden soll
> - wie schnell das ganze geschehen soll (oder ggf. muss)
> - wie hoch die Datenrate dazu sein muss, damit die Verarbeitung der
> Daten im gewünschten Zeitrahmen stattfinden kann

ok, vielen Dank!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hannes schrieb:
> Wie entscheide ich jetzt welche Baudrate ich wähle?
So hoch wie nötig, so niedrig wie möglich.

Hannes schrieb:
> wenn meine max. mögliche Baudrate bedingt durch die anderen Sensoren
> 840kHz ist.
Du musst den Bus nicht nach "dem schwächsten" oder besser "dem 
langsamsten" Teilnehmer auslegen. Du kannst den Bus "zwischendurch" auch 
mit 12MHz fahren, nur darfst du dabei nicht den langsamen 
840kHz-SPI-Slave per SS# aktivieren.

EDIT: Hoppla, Tab vergessen, zu spät gesendet... ;-)

von PittyJ (Gast)


Lesenswert?

Ich wechsel auch im Betrieb die Clock-Frequenz. Das sollte natürlich 
vorher passieren, bevor der Chip-Select der entsprechenden Chips 
herunter gezogen wird und die Kommunikation beginnt.

von Falk B. (falk)


Lesenswert?

PittyJ schrieb:
> Ich wechsel auch im Betrieb die Clock-Frequenz.

Soso, "Clock-Frequenz".

https://www.stupidedia.org/stupi/Denglisch

von PittyJ (Gast)


Lesenswert?

Aus
https://de.wikipedia.org/wiki/Serial_Peripheral_Interface

    Die drei gemeinsamen Leitungen, an denen jeder Teilnehmer 
angeschlossen ist, sind:

            SCLK (englisch Serial Clock) auch SCK, wird vom Master zur 
Synchronisation ausgegeben
            MOSI oder SIMO (englisch Master Output, Slave Input)
            MISO oder SOMI (englisch Master Input, Slave Output)

Deshalb Clock Frequenz.

von Falk B. (falk)


Lesenswert?

PittyJ schrieb:
> Deshalb Clock Frequenz.

Quark! Wenn schon, dann Taktfrequenz!

von Wolfgang (Gast)


Lesenswert?

Falk B. schrieb:
> PittyJ schrieb:
>> Deshalb Clock Frequenz.
>
> Quark! Wenn schon, dann Taktfrequenz!

Falk B. schrieb:
> PittyJ schrieb:
>> Ich wechsel auch im Betrieb die Clock-Frequenz.
>
> Soso, "Clock-Frequenz".

Wie sagte Dieter Nuhr so schön? ...

Clock ist die Kurzform von Clock Signal, auf gut deutsch Taktsignal.
Und natürlich muss das Ding auch eine Frequenz haben.

von Axel S. (a-za-z0-9)


Lesenswert?

Hannes schrieb:

> ich habe eine vielleicht dumme Frage bzgl. der Baudrate für eine SPI
> Schnittstelle

In der Tat sehr dumm. SPI hat nämlich gar keine Baudrate. Aber das SCK 
Signal hat eine Taktfrequenz.

> Mein uC (Master) wird mit einer 24MHz Frequenz getaktet. Im Bus hängen
> ein paar Sensoren. Die maximale SPI-Frequenz Anforderung des
> "schwächsten" Sensors sind laut Datenblatt 840kHz.
>
> Wie entscheide ich jetzt welche Baudrate ich wähle?

Na offensichtlich darf die Taktfrequenz an SCK nicht höher sein als die 
besagten 840kHz. Die meisten µC stellen die Taktfrequenz für SPI als 
einen gewissen Bruchteil einer Referenzfrequenz ein [1]. Da hast du nur 
eine gewisse Anzahl diskreter Frequenzen zur Auswahl. Alles oberhalb 
840kHz scheidet aus. Alles unterhalb 840kHz geht im Prinzip. Aber 
irgendwann wird es dann halt auch zu langsam für deine Anwendung. Du 
willst deine Sensoren ja wohl innerhalb eines gewissen Zeitintervalls 
immmer einmal alle auslesen. Das setzt dir eine untere Grenze.

Im Prinzip kannst du natürlich auch für jeden Sensor den SPI-Takt 
umschalten. Aber das fügt dem Ganzen zusätzliche Komplexität hinzu, die 
man vielleicht vermeiden wollen würde. Und 840kHz ist ja nun auch nicht 
direkt langsam. Das liegt im Mittelwellen-Bereich. Wenn du das nicht 
kennst, frag deine Eltern. Die haben da noch Radio drüber gehört.


[1] Ohne jetzt dem SAMD genau zu kennen: das Taktmanagement der Cortex-M 
sieht meist so aus, daß man einen Master-Takt (HSE, HSI) von typisch 
8MHz hat. Den kann man teilen und/oder vervielfachen (per PLL) zu einem 
IO-Takt. Und von jenem IO-Takt kann man ganzzahlige Teile dann als Takt 
für IO-Einheiten (Timer, UART und eben SPI) verwenden.

von M. K. (sylaina)


Lesenswert?

Axel S. schrieb:
> In der Tat sehr dumm. SPI hat nämlich gar keine Baudrate.

Diese Aussage ist in der Tat sehr dumm. Auch wenn es bei SPI nicht 
üblich ist hat auch SPI eine Baudrate wie sie jede digitale 
Signalübertragung hat. Und wie bei z.B. dem UART oder RS232 entspricht 
die Baudrate der Taktfrequenz, das ist aber nicht zwingend, es gibt auch 
Übertragungsarten, da wird pro Taktfrequenz mehr als ein Zeichen 
übertragen ;)

von GuruGuru (Gast)


Lesenswert?

Also zum SAMD21:
- Der hat etliche Taktgeneratoren, bei denen man die 
Oszillatorfrequenz schon herunter teilen kann. Oder man nimmt den 
ClockGen, der schon auf eine bestimmte Frequenz eingestellt ist.
- Die SPI (u.a.) bekommt ihren Takt von einem dieser ClockGen. Das 
geschieht über die Einstellung des Peripheral Mux
- Die ClockGen-Frequenz muss mindestens das doppelte des gewünschten 
SPI-Taktes sein...

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.