Fehlerkennenung bei SPI - Mulit-Master-Protokoll

Gast #2277899
Lesenswert?

Hallo zusammen,

ich schreib gerade meine Abschlussarbeit, unter anderem behandel ich den 
SPI-Bus im Grundlagenkapitel.

Ich habe gelesen, dass beispielsweise der MC68HC11 von Motorola eine 
hardwaremäßige Fehlererkennung besitzt, die mit dem CRC-Prüfverfahren 
realisiert ist.

Ich habe auch gelesen, dass für das SPI ein Multimaster-Protokoll 
existiert.

Wie wird denn ein Fehler erkannt, wenn z. B. zwei Busteilnehmer 
gleichzeit Master sein möchten? Gibt es da eine Fehlererkennung? Und was 
passiert wenn beide gleichzeitig auf den Bus zugreifen möchten?
Gast #2277930
Lesenswert?

Ein SPI mit hardwaregernerierte CRC? Hast Du den Link zum Datenblatt. 
Das habe ich noch nicht gesehen.

SPI-Multimaster Protokoll? Vermutlich wird das aber wohl über Slave 
Select bzw. Chip Select gesteuert.


Und zu deiner Frage. Nein. Du kannst höchstens selber auf den 
Bus-Leitungen lauschen...
#2277934
Lesenswert?

coder schrieb:

> Ein SPI mit hardwaregernerierte CRC? Hast Du den Link zum Datenblatt.
> Das habe ich noch nicht gesehen.

Gibts beispielsweise bei STM32.

> SPI-Multimaster Protokoll? Vermutlich wird das aber wohl über Slave
> Select bzw. Chip Select gesteuert.

Yep. Wenn ein Slave als Master und als Slave agieren kann und der 
SS-Input aktiv wird während der Controller selber als Master aktiv 
werden will, dann gab es eine Kollision.
#2277938
Lesenswert?

A. K. schrieb:

> Yep. Wenn ein Slave als Master und als Slave agieren kann und der
> SS-Input aktiv wird während der Controller selber als Master aktiv
> werden will, dann gab es eine Kollision.

Nächster Versuch: ;-)

Wenn ein Controller als Master und als Slave arbeiten kann und der 
SS-Input aktiv wird während der Controller selber als Master agiert, 
dann wird eine Kollision erkannt.
Gast #2277948
Lesenswert?

A. K. schrieb:
> Wenn ein Controller als Master und als Slave agieren kann und der
> SS-Input aktiv wird während der Controller selber als Master aktiv
> werden will, dann wird eine Kollision erkannt.

Und wie wird diese Kollision erkannt? Mittels CRC?
Gast #2277956
Lesenswert?

Daniel schrieb:
> Wie wird denn ein Fehler erkannt, wenn z. B. zwei Busteilnehmer
> gleichzeit Master sein möchten? Gibt es da eine Fehlererkennung? Und was
> passiert wenn beide gleichzeitig auf den Bus zugreifen möchten?

Also zwei Master möchten gleichzeig auf einen z.B. Dritten 
SPI-Teilnehmer, welcher als Slave arbeitet,  zugreifen. Interpretiere 
ich das richtig?
#2278001
Lesenswert?

Lothar Miller schrieb:

> Aber genau das wäre interessant: 1 Speicher-IC und 2 uC, die darauf
> zugreifen können.

Controller-1 SS-raus => Controller-2 SS-rein.
Controller-2 SS-raus => Controller-1 SS-rein.

Beide SS-raus gehen zusätzlich entkoppelt an SS vom Speicher. SO vom 
Speicher geht an die SIs beider Controller.

Zum prinzipiellen Verfahren siehe verlinken Thread grad eben. Die 
Controller kriegen natürlich den Traffic zwischen dem Kollegen und dem 
Speicher ebenfalls mit, weil selber grad Slave, zum wegwerfen.

Ist mittel Diodengattern (AND-Funktion) auf beliebig viele Masters und 
Slaves ausbaufähig.
Gast #2278010
Lesenswert?

A. K. schrieb:
> Controller-1 SS-raus => Controller-2 SS-rein.
> Controller-2 SS-raus => Controller-1 SS-rein.
> ....

SPI ist nicht sehr genau standardisiert, von 3 bis 4 oder 5 Leitungen, 
von 8 Bit bis 32 und mehr Bit, von durchlaufender Clock auch bei 
inaktivem Select gibts fast alles. Ich kenne auch Bausteine, von denen 
mehrere mit einem Select adressiert werden können.

Es ist eigentlich nur eine synchrone serielle Übertragung, und jedem 
steht natürlich frei, da noch etwas dazu zu erfinden. Ob man das dann 
noch SPI nennt ???

MfG Klaus
#2278015
Lesenswert?

Klaus schrieb:

> Es ist eigentlich nur eine synchrone serielle Übertragung, und jedem
> steht natürlich frei, da noch etwas dazu zu erfinden. Ob man das dann
> noch SPI nennt ???

Nein. Dann kommt die Spi-PolizeI und nimmt dich fest. ;-)

SPI ist kein echter Standard. Mach damit was du willst, nenn es wie du 
willst und sei glücklich wenn es funktioniert. Vermutlich ist nicht 
einmal der Name geschützt.
#2278026
Lesenswert?

Klaus schrieb:

> Es hilft nur manchmal bei der Kommunikation, wenn beide Seiten (Menschen
> wie Maschienen) unter den gleichen Begriffen das selbe verstehen.

Tun sie meistens auch. Immerhin ist mir der Kern des beschriebenen 
Verfahrens schon bei diversen Controllernfamilien in ähnlicher Form über 
den Weg gelaufen, bisher allerdings ohne dass ich mir darüber viel 
Gedanken machte: nämlich der Erkennung von aktivem SS-rein bei aktivem 
Master-Modus als Buskollision.

Das ist also kein Missbrauch von SPI für seltsame Umgebungen, sondern in 
solcher oder ähnlicher Form offenbar tatsächlich vorgesehen. Daraus 
erklärt sich auch der Bug früher LPC2000 beim SS im Master-Modus und die 
arg verwirrende Konfigurationsmimik der STM32 beim NSS-Pin.
Gast #2283851
Lesenswert?

Okay, gehen wir mal weg vom Muli-Master.

Folgendes Szenario:

SPI-Bus mit einem Master und 3 Slaves, kaskadiert, also alle Slaves 
werden über eine CS-Leitung gesteuert.

Master schickt Anfrage, alle 3 Slaves empfangen die Botschaft, führen 
eine Aktion durch und alle 3 geben gleichzeitig eine Antwort auf den Bus 
raus (MISO).

Was passiert?

Besitzt der Bus Wired-AND Funktionalität, so dass die Slaves ihre 
sendende Daten gleichzeit abhören und sich zurückziehen, wenn ihre Daten 
überschrieben wurden (Prinzip wie beim I2C)?
#2283892
Lesenswert?

Daniel schrieb:

> SPI-Bus mit einem Master und 3 Slaves, kaskadiert, also alle Slaves
> werden über eine CS-Leitung gesteuert.

Wenn du Slaves kaskadierst, dann kaskadierst du sowohl MOSI als auch 
MISO, d.h. MISO vom ersten Slave geht an MOSI vom zweiten. Und nur das 
MISO vom dritten geht an den Master. Solche kaskadierten Slaves sind im 
SPI Sinn ein einziger Slave mit dreifacher Tiefe.

Wenn du mehrere Slaves parallel anschliesst und gleichzeitig aktivierst, 
aber die nicht alle nur lesend operieren, sondern ein MISO besitzen, 
dann hast du SPI missverstanden.
Moderator (Firma: Titel) Persönliche Seite #2283903
Lesenswert?

Daniel schrieb:
> Master schickt Anfrage, alle 3 Slaves empfangen die Botschaft, führen
> eine Aktion durch und alle 3 geben gleichzeitig eine Antwort auf den Bus
> raus (MISO).
Die Denkweise ist falsch. Slaves "geben" da nichts "raus". SPI sind 
gekoppelte Schieberegister. Mit jedem Takt wird ein Bit vom und zum 
Master übertragen.

Als Tipp: sieh dir mal Queued SPI (QSPI) an. Da werden die Slaves 
/hintereinander geschaltet, die Daten durch jeden durchgetaktet und dann 
mit steigenden SS übernommen.
Gast #2284017
Lesenswert?

>SPI sind gekoppelte Schieberegister.
>Mit jedem Takt wird ein Bit vom und zum Master übertragen.
Kann sein, muss aber nicht. Es spricht nichts dagegen, sich sein eigenes 
Protokoll zu definieren. Und solange min. 1 Data u. 1 Clk-Ltg da ist 
(und Data mit Clk übernommen wird, schon dann ist es SPI), kann man da 
alles mögliche machen.

>Als Tipp: sieh dir mal Queued SPI (QSPI) an. Da werden die Slaves
>/hintereinander geschaltet, die Daten durch jeden durchgetaktet und dann
>mit steigenden SS übernommen.
QSPI wird auch von manchen CPU-Herst. benutzt, als Hinweis für 
Queued-SPI-Register (das längere Bitfolgen ein/aus-getaktet werden 
können).
Das hat dann nichts mit Hintereinander-Schaltung mehrerer uCs zu tun. 
Ausserdem ist da der Nachteil, dass, wenn Einer in der Kette ausfällt, 
Diese gestört ist.
Gast #2284019
Lesenswert?

>> SPI-Bus mit einem Master und 3 Slaves, kaskadiert, also alle Slaves
>> werden über eine CS-Leitung gesteuert.

>Mist, ich meinte damit die Sternförmige Struktur! nicht kaskadiert....
>sorry.

Also alles parallel mit einem CS? Das geht nicht. Damit
kannst du dir die MISO Pins zerschiessen. Das sind Push/Pull
Ausgänge. Der stärkere gewinnt;)
Gast #2284037
Lesenswert?

>Also alles parallel mit einem CS? Das geht nicht. Damit
>kannst du dir die MISO Pins zerschiessen. Das sind Push/Pull
>Ausgänge. Der stärkere gewinnt;)
Das geht, wenn jeder Slave, wenn adressiert, (mit zus. Gatter) die 
Verbindung MISO zum Bus enable schalten kann.
Gast #2284045
Lesenswert?

>Das geht, wenn jeder Slave, wenn adressiert, (mit zus. Gatter) die
>Verbindung MISO zum Bus enable schalten kann.

Er hat gesagt ein CS. Also keine zusätzlichen Gatter.
Es gibt SPI Chips die man über externe Pins plus interner Adresse
ähnlich wie bei I2C adressieren kann. Die kann man dann auch
komplett parallel schalten. Das ist aber eher die Ausnahme.
Gast #2284054
Lesenswert?

>Er hat gesagt ein CS. Also keine zusätzlichen Gatter.
Ja, ein CS an alle.
Das Gatter (kostet paar cent) meine ich zwischen MISO und Bus-Leitung.

>Es gibt SPI Chips die man über externe Pins plus interner Adresse
>ähnlich wie bei I2C adressieren kann.
braucht man nicht, zu speziell.
Gast #2284066
Lesenswert?

>>Er hat gesagt ein CS. Also keine zusätzlichen Gatter.
>Ja, ein CS an alle.
>Das Gatter (kostet paar cent) meine ich zwischen MISO und Bus-Leitung.

Ja, ok ein Multiplexer. Kostet aber mindestens einen Pin mehr.

>>Es gibt SPI Chips die man über externe Pins plus interner Adresse
>>ähnlich wie bei I2C adressieren kann.
>braucht man nicht, zu speziell.

Ich brauch die. Spart Pins;)
Gast #2284104
Lesenswert?

>>>>Es gibt SPI Chips die man über externe Pins plus interner Adresse
>>>>ähnlich wie bei I2C adressieren kann.
>>>braucht man nicht, zu speziell.
>>Ich brauch die. Spart Pins;)
>Viel zu ununiversell.

Und man kann mit Volldampf drauf. Die Durchlaufzeit
vom Multiplexer fällt weg.
Gast #2284205
Lesenswert?

Ja, SPI gibts schon solange es Computer gibt.

>Und man kann mit Volldampf drauf.
Mit 120 atü?
Der Skew mindert dem 'Volldampf'.
Bei der max (durch Skew limitierten) Bus-frequenz fällt die 
Durchlaufzeit fast nicht ins Gewicht. (Ausserdem hat ja auch das IC eine 
Durchlaufzeit drin.) Die man aber auch mit versch. Mitteln eleminieren 
kann.
Und bei Source-Synchr. wird Durchlaufzeit auch eleminiert.

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