PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I²C und SPI Bus anklemmen



Andy1988
11.06.2006, 02:48
Hallo!

Ich bin grade dabei für meinen Roboter ein Mainboard zu planen. Das soll relativ leivht erweiterbar sein, deswegen möchte ich den I²C und SPI Bus auf jeweils eine externe Klemme führen, damit ich später leicht neue Elemente bauen und anschließen kann.
Allerdings hab ich auf der Suche nach einem Anschlussplan beider Bussysteme immer nur Erklärungen oder Beispiele zum Ansteuern per Software gefunden. Nie irgendwie einen Schaltplan, der mir zeigt, wie man das überhaupt anklemmt.
Evtl. braucht man noch sowas wie Endwiderstände oder so. Ich hab mit solchen Systemen noch nie gearbeitet.

Kann mir da jemand helfen?

shaun
11.06.2006, 10:02
Hallöle,
bei I2C brauchst Du am Master oder am Busende oder sonstwo Pullups, je nach Länge und Geschwindigkeit höher oder niedriger. 4,7k sind üblich, es gibt bei Philips aber irgendwo eine Application Note, in der das beschrieben ist. Ausserdem kannst Du bei längerem Bus noch eine Serienterminierung vornehmen, also Widerstände von etwa dem Kabel-Wellenwiderstand in Reihe an jedem Knoten, der am Bus angeschlossen ist. Aber aufpassen, dass Du die Pullups nicht so klein machst, dass es durch die Serienwiderstände nicht mehr zu einem sicheren low reicht! Wenn Du den Bus lang machst (1m oder mehr) und/oder viele Bausteine dran hast, kommen recht hohe Kapazitäten zusammen, die zusammen mit den Pullups die maximal mögliche Geschwindigkeit beschränken. 400kHz Takt ist mit Kabelverbindungen eingermaßen utopisch, 100kHz kann klappen, muss aber nicht. Das ist IMHO auch in besagter Appnote enthalten, Name/Link ist mir gerade nicht geläufig, aber da kann bestimmt mal jemand einspringen :)

SPI ist nicht so wirklich für meterlange Verbindungen gedacht, funktionieren tut's auch, Pullups braucht man prinzipiell erstmal keine. Bei längeren Strippen könnte eine Serienterminierung was bringen, kann aber auch ohne funktionieren. Schnelle digitale Busse, die zur Verwendung auf Leiterplatten und mit während der Designphase mehr oder weniger feststehenden Chiptypen und -Anzahlen gedacht sind, können immer Probleme machen, wenn man damit externe Bussysteme bastelt, man kann es eigentlich nur ausprobieren und bei Problemen den Grund suchen, Kabellängen, dadurch Kapazitäten, Reflexionen, zu schnelle Übertragungsraten - das spielt alles mit rein. Du hast nun nicht erwähnt, wie lang Deine Busse werden sollen, wenn es nur darum geht, mit etwas Kabel einen Sensor o.ä. anzuschliessen, würde ich mir erstmal nicht so viele Gedanken machen und die Geschwindigkeit im Rahmen halten.
Wenn es wirklich lange Leitungen werden sollen, bist Du mit RS422 oder RS485 sicher besser bedient.

x-ryder
11.06.2006, 10:07
http://de.wikipedia.org/wiki/I2C - da steht was zur i2c-verschaltung
http://www.mct.de/faq/spi.html - und das hier iss fürn spi...

i²c braucht immer diese beiden widerstände rp, weil das glaubich low-aktiv iss, und spi braucht eigentlich keine weitere verschaltung...

Martin

Andy1988
11.06.2006, 20:45
Nein, es sind nur kurze Verbindungen.
Ich habe zum Beispiel einen Prozessor, der berechnet, wie welcher Motor zum fahren geschaltet werden muss und dieses an die H-Brücken weitergibt.
Oder halt eine Sensor- oder UI-Platine mit Display und einigen Tastern.

Diese ganzen Einheiten sollen jetzt verbunden werden. Was ist da besser? I²C oder SPI?
Weil ich eigentlich nur Prozessoren vernetze, die ich auch selber programmiere. Ich liebäugel mit SPI, weil man da ja, soweit ich das verstanden habe, alles einfach nur parallel schaltet und gut is das.

x-ryder
11.06.2006, 20:48
das macht man beim i²c und 1-wire auch ^^

1-wire iss mein liebling, weils nur eine leitung benötigt undn interessantes protokoll hat ^^

also du kannst dafür eigentlich alles von den dreien benutzen... ^^

Martin

Andy1988
11.06.2006, 21:05
Naja ich muss auch ne entsprechende Geschwindigkeit haben.
Wenn ich die Sensoren regelmäßig polle, ein UART interpretieren und Daten aufbereiten, dann die Motoren nachregeln und noch n bischen was aufm Display darstellen muss wird das schon n bischen knapp find ich ^^

Also bei I²C reichen einfach nur (angenommen bei einem einfachen Bus System) an einer Stelle Pull-Up Widerstände.
Bei SPI brauch ich nirgendwo Widerstände, es wird alles einfach nur parallel geschaltet.
Das wars?

shaun
11.06.2006, 21:09
Im Grossen und Ganzen: ja. Bei SPI hast Du einen Master und ein oder mehrere Slaves, über MOSI wandern die Daten zu den Slaves, über MISO empfängt der Master Daten und mit SCK wird getaktet. Es wird immer gleichzeitig gesendet und empfangen, d.h. um explizit zu empfangen muss man auch was senden, da die Endpunkte jeweils nur aus einem Schieberegister bestehen, aus dem gleichzeitig die Daten heraus- und hereingetaktet werden. Multi-Mastering ist auch möglich, muss ja aber nicht sein ;)

Andy1988
11.06.2006, 21:26
Ich werd I²C nutzen ^^

Find ich am einfachsten. Da setz ich ne Adresse und lese oder schreibe...
Vor allem muss ich nicht gucken, dass das mit dem ISP nicht in Konflikt kommt ;)