Forum: Mikrocontroller und Digitale Elektronik SPI an 9 ICs - geht das?


von Mark O. (maolimu77)


Lesenswert?

Hallo,

kann man eine SPI Schnittstelle bedenkenlos verwenden um 9 ICs 
anzusprechen?

Mein uC hätte noch einen zweiten SPI Ausgang, empfiehlt es sich die ICs 
auf beide Schnittstellen zu verteilen?

Danke für jede Hilfe.
Mark

: Verschoben durch Admin
von Albert .. (albert-k)


Lesenswert?

Die Frage ist ob due die 9 IC's als Daisy-Chain schaltest oder jeden 
über sein eigenes Chip-Select ansprichst.
Bei ersterer Variante ist das überhaupt kein problem. Bei zweiter 
Variante musst du schauen ob deine SPI Leitungen (MISO, MOSI, SCK) genug 
Strom treiben können damit die Flanken noch steil genug sind.

von Mark O. (maolimu77)


Lesenswert?

Ich habe mir die Datenblätter der ICs angeschaut. Es ist nichts von der 
Möglichkeit einer daisy-chain Schaltung erwähnt. Vermute dies bedeutet 
das es nicht geht.

Ich verstehe allerdings nicht wieso die "normale" SPI Konfiguration mehr 
Strom benötigt. Ich dachte dass bei Allen nicht angesprochenen ICs die 
CLK, MISO und MOSI Pins kein Strom verbrauchen.

von Mark O. (maolimu77)


Lesenswert?

Es stehen zwei uC zu Auswahl:

ARM7 NXP LPC2387, laut Datenblatt sind "HIGH-level output current" und 
"LOW-level output current" jeweils 4mA. Bei "LOW-level input current" 
und "HIGH-level input current" sind es 3uA.

ARM9 Freescale i.MXL: ebenfalls 4mA output.


Bei den ICs finde ich den Strom nirgends Angaben zum Strom der input 
Pins.

von (prx) A. K. (prx)


Lesenswert?

Bei CMOS ICs ist der Eingangsstrom weitgehend irrelevant, das sind 
kapazitive Lasten. Wenn man zu viele Eingänge an einen Ausgang hängt, 
dann leidet die Flankensteilheit und damit die maximale Taktfrequenz vom 
SPI.

Es ist einfacher, wenn beide Seiten wissen worüber man sich unterhält. 
Wenn du also das Geheimnis um die mysteriösen 9 ICs lüften würdest. Und 
verrätst, an welchen SPI Takt du gedacht hattest.

Von solchen Details abgesehen: Ja, im Prinzip kann man das machen. Der 
Einzelfall verdient jedoch nähere Betrachtung, es muss nicht in jedem 
Fall funktionieren.

von Mark O. (maolimu77)


Lesenswert?

Danke A.K. und Albert.

In einem ersten Entwurf (immerhin soll es mein erstes PCB werden) sind 
eigentlich nur 3 ICs geplant. Gelingt dies, würde ich das Design 
erweitern auf besagten 9 ICs.

Hier die Details:
1x LSI LS7366R 32-Bit Quadrature Clock Counter with Serial Interface 
http://www.lsicsi.com/pdfs/Data_Sheets/LS7366R.pdf

1x Trinamic TMC429 - Stepper Motor Controller (Profil Generator) für 3 
Stepper Motoren
http://www.trinamic.com/tmc/render.php?sess_pid=480

1x ADC IC - Modell noch nicht ausgesucht

In der endgültigen Ausbaustufe würde noch ein zweiter Trinamic TMC429 
dazukommen, und 5 Stepper Motor Treiber, Trinamic TMC 
261(http://www.trinamic.com/tmc/render.php?sess_pid=485)


Angepeilte SPI CLK Taktung ist 1 oder 2 MHz.


Grüsse, Mark

von asd (Gast)


Lesenswert?

1 bis 2 MHz ist schon einigermaßen schnell, und die kapazative Last von 
9 ICs-Eingängen ist auch ein wenig was, aber normalerweise sollte das 
funktionieren. Was du machen kannst: Die SPI-Leitungen (Data und Clock) 
nicht Sternförmig verlegen, sondern als eine Leitung an der nacheinander 
die ICs hängen ohne große Abzweigungen und direkt an den SPI-Ausgang 
einen Serienwiderstand vorsehen. Den Widerstand (ca. 15..50 Ohm) dann so 
wählen dass man am Oszi die Reflexionen minimiert. Möglicherweise dann 
noch am Ende der Leitungen (d.h. am letzten IC) eine Serienschaltung 
Widerstand und 100nF gegen GND (wieder mit Oszi den Widerstand auf 
minimale Reflexionen wählen). Kommt drauf an wie lang deine SPI Leitung 
ist. Unter 30cm braucht es das eher nicht, bei über 100cm aber auf jeden 
Fall.
Dann möglicherweise noch einen Bustreiber-IC passend zu deiner 
Betriebsspannung aussuchen (sowas wie 74AHC1G125GW oder SN74LVC1G125), 
die können einiges an kapazativer Last treiben, aber das ist bei "nur" 9 
ICs vermutlich sogar übertrieben.

HTH

von Mark O. (maolimu77)


Lesenswert?

Danke asd!

Bustreiber-IC - wieder was dazu gelernt. Der Einsatz klingt vernünftig. 
Die ICs kosten mich weniger als es ohne zu testen und festzustellen dass 
es doch nicht klappt...

Ich denke die 30cm sollten reichen, werde es also erstmal ohne 
Widerstände zur Minimierung der Reflexionen versuchen.

Grüsse

von asd (Gast)


Lesenswert?

An sich hätte ich das bei 30cm Leitung anders rum empfohlen: Dann lieber 
keine Bustreiber. Dadurch dass diese schön knackig steile Flanken 
produzieren wird das Thema Reflexionen/Überschwinger erst richtig 
aktuell und die Widerstände zum Dämpfen der Reflexionen am Anfang und 
Ende der Leitung werden wichtiger. Bei 30cm und 9 Inputs sollten die 
normalen Port-Ausgänge auch reichen.

von Busfahrer (Gast)


Lesenswert?

Mark O. schrieb:
> Bustreiber-IC - wieder was dazu gelernt. Der Einsatz klingt vernünftig.

Wenn alle ICs auch senden, dann braucht jedes IC seinen Bustreiber. 
Jedes sendende IC muß den Bus treiben können.

von hase (Gast)


Lesenswert?

Um das kurz zu ergänzen.
Ein sehr schöner Versuch ist der mit dem Rechteckgenerator, dem 
50m-50Ohm-Koaxkabel und dem 2-Kanal-Oszi einmal vorn, einmal hinten am 
Kabel.
Wenn man das passend einstellt (duty cycle 25% und passende Frequenz, 
Generatorimpedanz 50 Ohm), dann sieht man vorne am Generator ein 
50%-duty cycle Rechtecksignal und am hinteren Ende "fehlt" jeder zweite 
Puls.
so hat mein Prof uns damals klar gemacht, was mit "Reflexionen" gemeint 
ist.

Wenn man dann an das hintere Kabelende Widerstände anklemmt (1k, 220R, 
100R, 50R, 25R und 0 Ohm/Kurzschluss) und jeweils dsa Bild beobachtet, 
dann wird einem schlagartig einiges klar.

Hintergrund ist, dass jedes (elektrische) Signal energie enthält. Diese 
kann bekanntlich nicht vernichtet werden.
Wenn die also ein Kabel entlangläuft und an einem offenen Kabelende 
ankommt, dann kann die nirgendwo hin, sie läuft einfach zurück: eine 
Reflexion.

Daher muss eine Leitung terminiert sein. Die Terminierung setzt die 
einlaufende Energie in Wärme um (Umwandeln geht ja). Genau das macht der 
Widerstand am Ende.
Der ohmsche Wert muss dabei der Kabelimpedanz entsprechen, was aus 
Leistungsanpassung folgt und was wir hier mal eben weglassen; also: 
nicht die Tatsache (steht ja da) nur die Herleitung und Begründung .-)

Die Terminierung, die asd angegeben hat (selektierten Widerstand und 
100nF) sll genau das erreichen: wenn das Signal ankommt, dann wird es an 
dieser Stelle in Wärme umgesetzt und rennt nicht wieder zurück und 
bringt alle durcheinander.

Das ist in der Tat nur dann nötig, wenn der Treiber - also das Teil, was 
die Leitung und die Kapazitäten aller Eingänge und so weiter auf 
High-Pegel auflädt bzw. auf Low-Pegel entlädt - Richtig Leistung liefern 
kann.
Die Bustreiber sind genau dafür da (Leistung liefern), die können das 
also, da ist dann Terminierung besonders wichtig.
Ein Controller-Ausgang ist da idR. schwächer und da kann man dann schon 
mal ohne Terminierung auskommen, speziell wenn die Leitungen so kurz 
sind (30 cm), dass die reflexion schon durch ist bevor das nächste Bit 
angelegt wird.
30cm sind ja ziemlich genau eine Nanosekunde Laufzeit, ein Meter also 
derer drei.

Nochmal zum Aufladen/Entladen: Du hast Recht, "Strom verbrauchen" tun 
CMOS-Eingänge eigentlich nicht: der Eingangswiderstand ist so hoch, dass 
da praktisch kein Strom reinfliesst.
Dennoch muss Strom fliessen: für eine Transition low->high (z.B. 0V->5V) 
müssen die Gates der Transistoren, die die Eingänge bilden, auf diese 
Spannung aufgeladen werden. Ausserdem stellt die Leiterbahn gegenüber 
Masse einen Kondensator dar, der aufgeladen werden will.
Das sind zwar alles nur wenige pF.
Aber: Kapazität ist Ladungsmenge pro Volt. Strom ist Ladungsmenge pro 
Sekunde.
Willst Du also 1 pF in 1 ns aufladen auf 5V, dann brauchst Du 5 * 10E-12 
* 10E9 Ampere, also 5 mA.

Da sehen wir auch den Grund, warum SCSI damals den Weg von 5V zu LVD 
gegangen ist: man kann schneller auf Endspannung aufladen bei gleichem 
Strom.
Die Spannungssenkungen bei den Kernspannungen/Versorgungsspannungen 
haben teilweise den gleichen (schnellere Logik) teilweise andere 
(kleinere Strukturen bei gleicher Spannung => immens grössere 
elektrische Felder, daher muss die Spannung runter) Gründe.

Und am Schluss möchte ich den Tip mit dem Oszi von asd wiederholen und 
dringend an Dein Herz legen: nicht vermuten, messen!
Die Bustreiber kannst Du im Layout erstmal vorsehen, die 
Dämpfungswiderstände/Terminierungswiderstände aber bitte auch.
Und dann fange die Experimente an mit Bustreibern, die durch 
Drahtbrücken ersetzt sind, ohne Terminierung und gebrückten 
Dämpfungswiderständen.

Dann Signale beobachten und das "Klingeln" und die Reflexionsläufe im 
Auge behalten.
Wenn es so funktioniert: schön!
Wenn nicht, sind
a) die Flanken zu weich/flach => Treiber einfügen
b) die Flanken steil aber die Reflexionen sorgen für Überschwinger und 
Signalkuddelmuddel => Terminierung und Dämpfung einfügen

Klingt wie Rumfrickeln im sinne von "Ey! Wir entwickeln hier, wir sind 
doch keine Frickler!"
Aber merke: "Das Experiment ist eine anerkannte wissenschaftliche 
Methode zum Erkenntnisgewinn".

hase

von Mark O. (maolimu77)


Lesenswert?

Hallo hase
für die tolle Erklärung, durch die so vieles klarer geworden ist, möchte 
ich mich sehr bei Dir bedanken.

Grüsse
mark

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.