Forum: Mikrocontroller und Digitale Elektronik Bus für uC-System


von mr.chip (Gast)


Lesenswert?

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 ;-)

von Bernhard S. (bernhard)


Lesenswert?

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

von mr.chip (Gast)


Lesenswert?

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

von Bernhard S. (bernhard)


Lesenswert?

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

von mr.chip (Gast)


Lesenswert?

> 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

von Rahul (Gast)


Lesenswert?

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

von A.K. (Gast)


Lesenswert?

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

von markus (Gast)


Lesenswert?

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.

von Rahul (Gast)


Lesenswert?

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.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

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.

von mr.chip (Gast)


Lesenswert?

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

von A.K. (Gast)


Lesenswert?

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.

von Bernhard S. (bernhard)


Lesenswert?

@A.K.

Hast Du sehr gut beschrieben.

Großes Lob

Bernhard

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.