Hallo Ich bin gerade ein bisschen am 'evaluieren' eines geeigneten Bussystems für ein Projekt. Ich bin zurzeit in 'loser Folge' am austüfteln von ein paar Komponenten, die ich später evtl. mal zu einem Roboter oder etwas anderem zusammensetzen möchte. Zurzeit arbeite ich daran, eine Gameboy-Kamera auszulesen. Im Zuge dieses Projekts benötige ich externen Speicher, den ich zurzeit über 8 Daten + 5 Steuerports an den AVR angeschlossen habe. Irgendwie kam ich dann auf die Idee, einen Bus zu definieren, an dem der Speicher sowie eventuell andere Geräte hängen. Schnell merkte ich aber, dass mein Speicherchip zwangsläufig noch einen Mikrocontroller braucht, der ihn an den Bus anbindet. Und zwar einger mit ganz mächtig vielen Pins, da ja sowohl der Bus (für eine anständige Bandbreite) als auch der Speicherchip doch einiges an Pins - oder 'Pinerweiterungen' wie Latches oder Schieberegister benötigen. Da kamen mir natürlich auch die eingebauten Busse (TWI/SPI) in den Sinn. TWI ist zu langsam, bei SPI finde ich in den Datenblättern keine Geschwindigkeitsangabe (?!?). Nun zwei Fragen: 1. Wie schnell ist SPI in der Praxis auf einem Atmega32? 2. Hat jemand vielleicht Erfahrung mit einem noch schnelleren (selbst entwickelten) Bus, um beispielsweise einen Speicher (mit oder ohne eigenem Controller) an ein uC-System anzubinden? Gruss Michael PS: Vielleicht scheint euch mein Beitrag etwas konfus - 'Was willst du wissen?' Nunja, es geht mir halt insbesondere darum, mal ein bisschen Möglichkeiten / Erfahrungen abzuchecken ;-)
Hallo Michael,
Ein Serieller-Bus (USART,TWI,SPI usw) ist immer langsamer als ein
Parallel-Bus.
Dafür benötigt der serielle weniger Pins.
>1. Wie schnell ist SPI in der Praxis auf einem Atmega32?
Ganz grob geschätzt, ca. 10x langsamer als die Parallelvariante.
Bernhard
Hallo > Ein Serieller-Bus (USART,TWI,SPI usw) ist immer langsamer als ein > Parallel-Bus. > Dafür benötigt der serielle weniger Pins. Jep, das ist klar. Deswegen auch die Gedanken wegen dem parallelen. > > 1. Wie schnell ist SPI in der Praxis auf einem Atmega32? > Ganz grob geschätzt, ca. 10x langsamer als die Parallelvariante. In absoluten Werten würde das dann heissen? ;-) Wieviel denkst du kriegt man parallel bei hin? Schafft man alle - sagen wir - 20 Takte (inklusive Abholen aus dem internen Buffer, aber ohne allfällige Weiterverarbeitung) die Übergabe einer vollen Portbreite (= 1 Byte)? Bei 10 MHz wären das dann 500 Kilobytes pro Sekunde. (Doppelt so schnell wie ich hier am Internet hänge...) Gruss Michael
>In absoluten Werten würde das dann heissen?
An der Stelle bin ich etwas zurückhaltend, da es hier Hardware-Probleme
(Reflexionen usw) geben kann.
> An der Stelle bin ich etwas zurückhaltend, da es hier > Hardware-Probleme(Reflexionen usw) geben kann. Ja, könnte sein. Wobei ich hier sehr optimistisch bin, schliesslich handelt es sich ja nur um Frequenzen im KHz-Bereich. Der I2C Bus arbeitet ja bis 400 kbit/s, folglich mindestens 400 KHz. 2 - 4 Takte für Adressoperationen 1 Takt fürs Daten holen 1 Takt fürs Daten ausgeben einige Takte warten => Sollte locker unter 20 Takten gehen
Zum Takt der SPI: Aus Figure 65 lässt sich erkennen, dass der SPI-Takt aus dem XTAL durch teilen durch 2, 4, 8, 16, 32, 64 oder sogar 128 zustande kommt. Demnach kann SPI IMHO mit bis zu 8MHz betrieben werden (Masterbetrieb). Table 58 sollte auch noch Auskunbft geben können. Die Seite 289 sollte auch noch interessant sein. (Eigentlich ist das ganze Datenblatt höchst interessant...)
"Ein Serieller-Bus (USART,TWI,SPI usw) ist immer langsamer als ein Parallel-Bus." Wobei die Industrie längst zwecks Steigerung der Geschwindigkeit von parallelem SCSI auf serielles umsteigt. Von parallelem PCI/PCI-X auf serielles PCI-Express, usw. Das stimmt so nicht mehr, bei hohen Taktfrequenzen ist es eher umgekehrt. SPI mit 8Mbps ist schneller als mancher Parallel-Bus. Und vor allem ist SPI wesentlich einfacher über mehr als ein paar Zentimeter zu ziehen als ein Parallelbus, nicht nur der Kabelei wegen sondern auch der Signale wegen.
Auf dem i²c bus kann bei 400kbit/s die erste harmonische nur 200khz annehmen. weil ja die swchnellste frequenz eine 010101 folge ist. allerdings können oberschwingunge auftretten. die aber nicht problematisch werden sollten, wenn die leitungsführung sauber gelöst ist.
Wenn man Lust hat, kann man das auch mit LVDS-Technik machen. Da liegen die Werte irgendwo bei 200MHz (und drüber)... Das sollte mit SPI problemlos gehen, da es sich dabei ja um eine Vollduplex-Kommunikation handelt.
Ich habe als "Bus"-Anschluß auf meiner Platine einen IC-Sockel für 32k-Ram, da liegen Adress- und Datenbus , /Rd /Wr und Vcc/GND auf. Je nach Bedarf kann man RAM oder Erweiterungen "memory mapped" einbauen.
> Wobei die Industrie längst zwecks Steigerung der Geschwindigkeit von > parallelem SCSI auf serielles umsteigt. Von parallelem PCI/PCI-X auf > serielles PCI-Express, usw. Das stimmt so nicht mehr, bei hohen > Taktfrequenzen ist es eher umgekehrt. Hmm...verstehe ich jetzt nicht. Wenn man mehrere Leitungen hat, kann man doch immer auch mehr übetragen, vorausgesetzt die Leitungen sind von der Übertragungsqualität her gleich gut. Und die Parallelität sollte die Übertragungsqualität einer einzelnen Leitung ja nicht beeinträchtigen. Einzig das Verlegen wird möglicherweise etwas komplizierter.
Es ist zwar elektrisch anspruchsvoll, auf einer Leitung beispielsweise 5Gbps zu übertragen. Es ist allerdings ebenfalls schwierig, auf 50 Leitungen parallel je 100Mbps so zu übertragen, dass beim Empfänger alle 40 Leitungen noch synchron zum gemeinsamen Takt sind. Wer genauer auf PC-Mainboards schaut, konnte schon bei Pentium-90-Boards erkennen, wie Leitungen teilweise regelrechte Mäander ziehen um Längendifferenzen auszugleichen. Es ist wird steigender Taktfrequenz immer schwieriger, saubere Multidrop-Busse zu implementieren, also Busse die nicht nur genau 2 sauber abgeschlossene Enden haben, sondern auch Teilnehmer zwischendrin. Erst recht, wenn die Signale auf dem Bus in verschiedene Richtungen laufen (z.B. Takt in die eine, Daten in die andere Richtung), aber an jeder Stelle die gleichen Zeitbedingungen einhalten müssen. Und je höher die Frequenz, umso kürzer ist daher bei ähnlicher Technik die mögliche Distanz. Beispiel SCSI: von 6m bei 5MHz über 3m bei 10Mhz zu 1,5m bei 20MHz - danach war Schluss mit SE-SCSI und die Übertragungstechnik wurde geändert (LVD). Beispiel PCI: Sind bei 33MHz PCI noch 4-5 Slots drin, sind es bei 100MHz PCI-X nur noch 2, bei 133MHz nur noch einer. Hat also ein Server 3 133MHz-fähige PCI-X Slots, sind alle 3 getrennt angeschlossen, mit entsprechend hohem Leitungs- und Pin-Aufwand. Aus solchen Gründen besteht ein klarer Trend hin zu schmalen aber sehr hochfrequenten Punkt-zu-Punkt Verbindungen (SATA, serielles SCSI, PCI-Express, Hypertransport) als Ablösung von breiten langsamer getakteten parallelen Multidrop-Bussen (IDE, SCSI, PCI-X, Intel-Prozessorbus). Eine Ausnahme von diesem Trend stellen Speicherbusse dar. Hier gab es diesen Ansatz zwar auch, in Form von RAMBUS, der ist allerdings eher aus politischen Gründen abgesoffen als aus technischen.
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.