Forum: Mikrocontroller und Digitale Elektronik SPI - allgemeine Hardwareanforderungen


von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

Hallo zusammen,

ich nehme gerade meine selbst erstelle Leiterplatten-Konstruktion in 
Betrieb und frage mich jetzt im Nachhinein ob ich den SPI-Aufbau besser 
anders gestaltet hätte. Konkret geht es um die Kommunikation eines Tiva 
TM4C mit einem Busumsetzer und einem Sensor auf einer anderen Platine, 
Leitungslängen ca. 50 cm. In meinem vorwiegenden Softwarebewußtsein habe 
ich einfach die offensichtlichen Leitungen miteinander verbunden. Es 
funktioniert, aber nur aus Interesse und zu meinem Verständis habe ich 
nach den Details gegooglet:

1) Thema Leitungslänge: diese ist scheinbar nicht pauschal anzugeben, 
was auch sinnig erscheint. Hier 
(http://electronics.stackexchange.com/questions/203072/spi-bus-length) 
gibt es eine nette Rechnung, die auf das kapazitive Verhalten der 
Leitungen als Hauptursache von Störungen angibt. Teilt ihr diese 
Beobachtungen?

2) Thema Leiterplattendesign. Hier 
(http://hackaday.com/2014/11/25/better-spi-bus-design/) sind Hinweise zu 
alternativen Designmöglichkeiten gegeben. Den Vorschlag mit der 
CS-Leitung teile ich noch, das mit der MISO-Leitung habe ich so noch 
nicht gesehen, ist das generell sinnvoll?

Besten Gruß,
J.

von ui (Gast)


Lesenswert?

J. F. schrieb:
> 2) Thema Leiterplattendesign. Hier
> (http://hackaday.com/2014/11/25/better-spi-bus-design/) sind Hinweise zu
> alternativen Designmöglichkeiten gegeben. Den Vorschlag mit der
> CS-Leitung teile ich noch, das mit der MISO-Leitung habe ich so noch
> nicht gesehen, ist das generell sinnvoll?

Was meinst du mit "das mit der MISO Leitung"? Den "Bus Guardian"?

von olaf (Gast)


Lesenswert?

> nicht gesehen, ist das generell sinnvoll?

DAs ist alles Bastlerbullshit. SPI ist kein Bus sondern einfach eine 
syncrone serielle Uebertragung in unterschiedlichsten Standards die 
jeder Hersteller etwas anders auslegt. Man schaue sich nur mal die vier 
Modis an. Und je nach Baustein hat man auch andere Geschwindigkeiten, 
Stromtreiber und kommt mit anderen kapzitiven Lasten klar.

Olaf

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


Lesenswert?

J. F. schrieb:
> Den Vorschlag mit der CS-Leitung teile ich noch
Ich nicht, denn das mit dem CS ist eigentlich nur während des Reset ein 
Thema, während die CS-Pins am uC floaten (aber genau während dieser Zeit 
wird ja auch kein Takt ausgegeben...). Im späteren Betrieb werden dann 
die CS-Pins immer einen definierten Pegel haben (ausser bei 
Programmierfehlern.)

> das mit der MISO-Leitung habe ich so noch nicht gesehen
Was mit der MISO-Leitung? Dass dort Tristate-Buffer eingesetzt sind, 
wenn ein "Nicht-SPI" Device an einen SPI-Bus angeflanscht werden soll?
Ein "übliches" SPI-Device macht selber seinen MISO-Pin hochohmig, wenn 
es deselektiert wird. Eigentlich wundert mich, dass keiner vorschlägt, 
in die MISO-Leitung einen Pullup einzusetzen, damit man definierte Pegel 
hat, wenn alle Slaves deselektiert sind...

von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

olaf schrieb:
> DAs ist alles Bastlerbullshit. [...]

Das mag ja sein, trotzdem gibt es eben genug Elemente die ausnahmslos 
darüber angesteuert werden.


Lothar M. schrieb:
> Im späteren Betrieb werden dann
> die CS-Pins immer einen definierten Pegel haben (ausser bei
> Programmierfehlern.)

Was mir hier eingefallen ist wäre ein IC der mit floatendem CS an 
eigenem Slave-CS Probleme hat. Ich denke da an Logik die intern damit 
verknüpft ist und u.a. ebenfalls auf diesem Wege angetriggert - gestoppt 
- wird.

>> das mit der MISO-Leitung habe ich so noch nicht gesehen
> Was mit der MISO-Leitung? Dass dort Tristate-Buffer eingesetzt sind,
> wenn ein "Nicht-SPI" Device an einen SPI-Bus angeflanscht werden soll?

Was hat das mit einem "Nicht-SPI"-Device zu tun?

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


Lesenswert?

J. F. schrieb:
> Lothar M. schrieb:
>> Im späteren Betrieb werden dann die CS-Pins immer einen definierten
>> Pegel haben (ausser bei Programmierfehlern.)
> Was mir hier eingefallen ist wäre ein IC der mit floatendem CS an
> eigenem Slave-CS Probleme hat. Ich denke da an Logik die intern damit
> verknüpft ist und u.a. ebenfalls auf diesem Wege angetriggert - gestoppt
> - wird.
Kennst du so einen Chip namentlich?
Nachdem dann der CS ein einziges mal definiert inaktiv war, muss er 
eigentlich von vorn anfangen: ein Deselektieren bewirkt den Abschluss 
des vorigen Kommandos. Und weil da dank fehlendem Takt nichts kam, gibts 
nichts zu tun. Wenn ein SPI-Device sich anders verhält, dann ist es 
schlecht designt und muss für sich so einen Pullup bekommen, aber 
generell wäre das rausgeworfenes Geld und Platz.

> Was hat das mit einem "Nicht-SPI"-Device zu tun?
Nimm mal so ein "Multi-Protokoll-Device", das "auch" SPI kann, z.B. das 
93c46, das zwar mit SPI-Hardware angesprochen werden kann, sich aber auf 
Bitebene komplett anders verhält.

von olaf (Gast)


Lesenswert?

> Das mag ja sein, trotzdem gibt es eben genug Elemente die ausnahmslos
> darüber angesteuert werden.

Du hast mich nicht verstanden. SPI ist kein Standard wie I2C oder RS232 
wo man sich halt an den Standard haelt und danach ist alles gut. Bei SPI 
macht es jeder ein bisschen anders und wenn du dann ein neues System mit 
unterschiedlichen Devices zusammenstellst musst du jedesmal genau dafuer 
schauen das es genau mit dem System gut laeuft.

Olaf

von Peter D. (peda)


Lesenswert?

Lothar M. schrieb:
> Ich nicht, denn das mit dem CS ist eigentlich nur während des Reset ein
> Thema, während die CS-Pins am uC floaten (aber genau während dieser Zeit
> wird ja auch kein Takt ausgegeben...).

Da können sich einfach 50Hz einkoppeln und schon hast Du einen Takt.
Ein Pullup am /CS ist eigentlich immer zu empfehlen. Und sei es nur, 
damit ein MAX7219-Display während des Programmierens nicht wild vor sich 
hin flackert oder die LEDs überlastet werden.

von Noch einer (Gast)


Lesenswert?

Ausserdem, bei SPI kann man selbst entscheiden, wie viel Zeit man 
zwischen MOSI und SCLK lässt.

Wenn bei 50cm die Reflexionen das Signal zerstören, wartest du einfach 
mit SCLK bis die Spannungen stabil anliegen.

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


Lesenswert?

Noch einer schrieb:
> Wenn bei 50cm die Reflexionen das Signal zerstören, wartest du einfach
> mit SCLK bis die Spannungen stabil anliegen.
Wenn du aber die Reflexionen auf dem Takt hast, dann hilft auch abwarten 
nichts. Denn so ein Überschwinger kann dir einen "Doppeltakt" 
vorgaukeln, wenn er bis unter die Schaltschwelle des Takteingangs 
heruntergeht...

von Clemens L. (c_l)


Lesenswert?

Lothar M. schrieb:
> Eigentlich wundert mich, dass keiner vorschlägt, in die MISO-Leitung
> einen Pullup einzusetzen, damit man definierte Pegel hat, wenn alle
> Slaves deselektiert sind...

Das wird in der Tat öfters vorgeschlagen: 
https://www.google.de/search?q=miso+pullup

Aber ohne Pullup/-down fängt sich nur der Master einen undefinierten 
Pegel ein; in den Slave-Datenblättern wird das normalerweise nicht 
erwähnt. (Aber dann schaue ich sicherheitshalber nach, und das des 
CS4245 sagt: "During writes, the CDOUT output stays in the Hi-Z state. 
It may be externally pulled high or low with a 47 kΩ resistor, if 
desired.")

Lothar M. schrieb:
> Nachdem dann der CS ein einziges mal definiert inaktiv war, muss er
> eigentlich von vorn anfangen: ein Deselektieren bewirkt den Abschluss
> des vorigen Kommandos. Und weil da dank fehlendem Takt nichts kam, gibts
> nichts zu tun.

Die einfachste Implementation eines SPI-Slaves ist ein Schieberegister, 
und das Ausführen der Aktion bei einer steigenden Flanke auf CS. Wenn 
vorher nichts hereingetaktet wurde, steht in dem Register halt Müll ...

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


Lesenswert?

Clemens L. schrieb:
> Aber ohne Pullup/-down fängt sich nur der Master einen undefinierten
> Pegel ein
Schlimmer: dadurch, dass an diesem CMOS-Eingang nichts anliegt, 
verschiebt sich das Potential genau so, dass letztlich beide 
Eingangstreiber-FET leiten und ein unnötiger Querstrom fließt (eben 
genau so wie bei jedem anderen offenen CMOS-Eingang auch).

> Die einfachste Implementation eines SPI-Slaves ist ein Schieberegister,
> und das Ausführen der Aktion bei einer steigenden Flanke auf CS. Wenn
> vorher nichts hereingetaktet wurde, steht in dem Register halt Müll ...
Richtig. Allerdings kommt bei komplexeren Bausteinen danach dann eine 
"sinnvolle" Initialisierung (Kanalauswahl, Schreibschutz, Power-Modi und 
Pipapo).

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