Forum: Mikrocontroller und Digitale Elektronik SPI Telegramm senden / Empfangen


von Martin (Gast)


Lesenswert?

Hallo Zusammen,
Wenn ein Telegramm über spi gesendet wird, muss das ganze Telegeram auf 
einmal gesendet werden: also die bytes nacheinander ohne Pause, oder am 
besten den Slave kurze Zeit geben, das er sicher dieses Byte empfangen 
und gespeichert hat, bevor das nächste Byte gesendet wird?

von Stephan (Gast)


Lesenswert?

das steht im Datenblatt des IC. SPI ist ja eigentlich ein 
Schieberegister. Ich wüsste nicht wozu da Pausen kommen sollten sofern 
sie nicht vom IC benötigt werden für zB. A/D Wandlung.

von Martin (Gast)


Lesenswert?

Ein Teleram besteht aus 10 Bytes. Der Master kann dann die 10 Bytes ohne 
Pausen senden, Die SPI Schnittstelle hat auch Fifo-Speicher und sie 
sendet 4 Bytes sofort. Die Spi-SChnittstelle des Slaves hat kein 
Fifo-Speicher und kann auch nicht sofort das Byte vom Spi Buffer holen 
(andere Interrupts haben höhere Priorität).

von Jim M. (turboj)


Lesenswert?

Martin schrieb:
> Wenn ein Telegramm über spi gesendet wird, muss das ganze Telegeram auf
> einmal gesendet werden: also die bytes nacheinander ohne Pause, oder am
> besten den Slave kurze Zeit geben, das er sicher dieses Byte empfangen
> und gespeichert hat, bevor das nächste Byte gesendet wird?

Kommt schwerstens auf den Slave an -> Datenblatt. Wenn die Gegenstelle 
ein selbst programmierter µC ist dann brauct man öfters eine Pause. Die 
meisten Hardware SPI Slaves eher nicht.

Gibt übrigens auch Mischformen: Der ADS1298 von TI braucht bis 4 MHz SPI 
Takt keine Pause zwischen Kommando Bytes, darüber muss man kurz warten 
(maximal verträgt er 10 MHz IIRC).

von Martin (Gast)


Lesenswert?

Die Kommunikation ist zwischen zwei pics, dann muss der Master doch 
Pausen tun.
Danke.

von Jim M. (turboj)


Lesenswert?

Martin schrieb:
> Die Spi-SChnittstelle des Slaves hat kein
> Fifo-Speicher und kann auch nicht sofort das Byte vom Spi Buffer holen
> (andere Interrupts haben höhere Priorität).

Hat der Slave denn DMA? Damit wäre man dann auch fein raus.

Ansonsten: Pause zwischen Bytes oder langsamen SPI Takt verwenden.

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


Lesenswert?

Martin schrieb:
> Die Kommunikation ist zwischen zwei pics, dann muss der Master doch
> Pausen tun.
Dafür ist SPI mit seinen gekoppelten Schieberegistern und der daraus 
resultierenden unbedingten Synchronität zwischen Master und Slave ein 
extrem ungünstig gewähltes Interface.

Ich hätte das mit einer seriellen Schnitte gemacht...

Jim M. schrieb:
> Hat der Slave denn DMA? Damit wäre man dann auch fein raus.
Auch nicht, weil der Master vermutlich so designt ist, dass er im selben 
Telegramm schon wieder eine "Antwort" erwartet.

SPI funktioniert nur dann gut und schnell, wenn der Master seine 
Anforderung "jetzt" schickt und dafür gleichzeitig die Antwort auf die 
"vorherige" Anforderung bekommt.

So wie z.B. beim AD-Wandler AD7490: dort wird im selben SPI Transfer der 
nächste zu wandelnde Kanal gesendet und die Daten der vorigen 
Anforderung empfangen.

: Bearbeitet durch Moderator
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.