Forum: Mikrocontroller und Digitale Elektronik Fehlerkennenung bei SPI - Mulit-Master-Protokoll


von Daniel (Gast)


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?

von coder (Gast)


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...

von Daniel (Gast)


Lesenswert?

Hi coder,

Danke für die Antwort!

Aber der ARM CORTEX M3 von STM besitzt ein CRC-Prüfverfahren.

Siehe Datenblatt:

http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf

von (prx) A. K. (prx)


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.

von Coder (Gast)


Lesenswert?

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

Vom Cortex hast Du nicht geschrieben.

von (prx) A. K. (prx)


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.

von Daniel (Gast)


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?

von (prx) A. K. (prx)


Lesenswert?

Hab ich ja eben geschrieben. Ob er grad Master oder Slave sein will 
steht im Steuerregister. Die Hardware kann also Krach schlagen, wenn im 
Master Modus SS aktiv wird. Wer jemals versucht hat, die Mysterien des 
SS-Signals vom STM32 zu verstehen, der sollte ebendies im Auge behalten.

von Coder (Gast)


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?

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


Lesenswert?

SPI ist kein Multimaster-Bus!
Und wenn man einen Slave an mehrere Master anschliessen will, dann 
muß man sich sich schon mal was für die Zuteilung der 
Slave-Select-Leitung ausdenken.

von (prx) A. K. (prx)


Lesenswert?

Lothar Miller schrieb:

> SPI ist kein Multimaster-Bus!

Geht: Beitrag "Re: Methoden um 2 Atmegas miteinander zu verbinden"
Wie sich das bei mehr als 2 Devices darstellt habe ich grad nicht parat.

von Coder (Gast)


Lesenswert?

Vielleicht erbarmt sich der Threadersteller und formuliert ein konkretes 
Beispiel zu seiner Frage. Wie viele Busteilnehmer und wie sie verbunden 
sind. So ratet man nur.

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


Lesenswert?

A. K. schrieb:
>> SPI ist kein Multimaster-Bus!
> Geht:
Klar geht das. Nur hat das mit SPI an sich nicht mehr viel zu tun...

> Wie sich das bei mehr als 2 Devices darstellt habe ich grad nicht parat.
Aber genau das wäre interessant: 1 Speicher-IC und 2 uC, die darauf 
zugreifen können.

von (prx) A. K. (prx)


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.

von Klaus (Gast)


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

von (prx) A. K. (prx)


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.

von Klaus (Gast)


Lesenswert?

A. K. schrieb:
> SPI ist kein echter Standard.

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

MfG Klaus

von (prx) A. K. (prx)


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.

von Daniel (Gast)


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)?

von Coder (Gast)


Lesenswert?

Soweit ich weiss ist die MISO-Leitung nur Output.

von (prx) A. K. (prx)


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.

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


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.

von Daniel (Gast)


Lesenswert?

Daniel schrieb:
> 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.

von MCUA (Gast)


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.

von holger (Gast)


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;)

von MCUA (Gast)


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.

von holger (Gast)


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.

von MCUA (Gast)


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.

von holger (Gast)


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;)

von (prx) A. K. (prx)


Lesenswert?

Nimm I2C. Spart Pins.

von holger (Gast)


Lesenswert?

>Nimm I2C. Spart Pins.

Und ist scheisse langsam und veraltet;)

von (prx) A. K. (prx)


Lesenswert?

holger schrieb:

> Und ist scheisse langsam und veraltet;)

SPI ist moderner? Schon der 6522 hatte einen Vorläufer davon an Bord.

von MCUA (Gast)


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.

von holger (Gast)


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.

von MCUA (Gast)


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.

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.