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!
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.
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.
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.
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.
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.
Hannes schrieb:> Meine Frage ist jetzt wie ich fBaud festlege... Dazu habe ich im> Datenblatt nichts gefunden.
Das ist deine gewünschte Taktfrequenz!! OMG!
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
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.
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!
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... ;-)
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.
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.
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.
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.
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 ;)
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...