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?
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...
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
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.
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.
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.
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?
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.
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?
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.
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.
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.
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.
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.
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
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.
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
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.
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)?
Soweit ich weiss ist die MISO-Leitung nur Output.
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.
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.
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.
>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.
>> 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;)
>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.
>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.
>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.
>>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;)
>Nimm I2C. Spart Pins.
Und ist scheisse langsam und veraltet;)
holger schrieb: > Und ist scheisse langsam und veraltet;) SPI ist moderner? Schon der 6522 hatte einen Vorläufer davon an Bord.
>>>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.
>>>>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.