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.
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"?
> 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
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...
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?
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.
> 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
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.
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.
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...
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 ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.