Ich sehe das Hauptproblem auch eben in dieser DLL von Topfield. Die ist offensichtlich unfähig, eine abgebrochene Verbindung wieder aufzunehmen. Ob das an einer unzureichenden Unterstützung von Win9x liegt, oder auch mit XP auftritt, weiß ich nicht, da ich nur WinME habe.
Ansonsten ist das mit den Datenraten schon so eine Sache. Der Topf verwendet eine USB2.0-Schnittstelle. Das heißt sie ist von den ganzen elektrischen Parametern auf USB2.0 ausgelegt. Zwar ist USB2.0 rein theoretisch kompatibel zu USB1.1, aber das ist nicht so ganz unproblematisch. Darum vielleicht mal ein bisschen Hintergrund für die technisch Interessierten.
Bei USB gibt es drei verschiedene Grundgeschwindigkeiten:
- Low-Speed (1.2 MBit/s) seit USB1.0, üblicherweise für Geräte wie Mäuse, Tastaturen
- Full-Speed (15 MBit/s) seit USB1.1, üblicherweise für Geräte wie Scanner, Drucker
- High-Speed (480 MBit/s) seit USB2.0, üblicherweise für Geräte wie Festplatten, Videokameras
In den PC ist schon ein USB-Hub eingebaut. Das ist der sogenannte Root-Hub. Darum hat der PC mehrere Ports. Unter Umständen gibt es sogar mehrere USB-Hubs schon im PC. Das hat dann eine Auswirkung darauf, wieviele externe Hubs man noch in Reihe hängen kann, also welche maximale Entfernung man per USB überbrücken kann.
Was viele nicht wissen: ein aktives "Verlängerungskabel" ist ebenfalls ein USB-Hub. Die Seite zum Host ist fest mit dem Kabel verbunden und die Seite zum Device ist die Buchse. Es ist also logisch gesehen kein Unterschied, ob man eine aktive Verlängerung nimmt, oder einen extra Hub dazwischen setzt. Beidesmal ist ein weiterer Hub hinzugekommen.
Eine USB-Verbindung ist eine Punkt-zu-Punkt-Verbindung, jeweils von einem Host zu einem Device. Steckt man also einen Hub mit einem Gerät daran in die USB-Buchse des PC, dann hat man zwei Teilstrecken. Vom PC zum Hub, wobei auf dieser Strecke der PC der Host und der Hub das Device ist, und vom Hub zum Gerät, wobei hier der Hub der Host und das Gerät das Device ist.
Somit wird zuerst die Verbindung PC-Hub aufgebaut. Dabei befragt der PC den Hub, was er für Geschwindigkeiten unterstützt. Diese Befragung passiert *immer* mit USB1.0-Geschwindigkeit, also Low-Speed. Erst wenn sich beide auf eine höhere Geschwindigkeit verstehen, wird auf diese umgeschaltet. Dabei spielt nicht nur die Fähigkeit der beiden Gegenstellen eine Rolle, sondern auch das Kabel. Je nach Version hat dieses nämlich andere elektrische Werte (Abschlusswiderstand, Kapazität). Eine entsprechende Messung erfolgt im Root-Hub bei der Auswertung der Signale. Kommen die Signale aufgrund ungünstiger physikalischer Eigenschaften des Kabels zu unpräzise an (keine ordentlichen Rechtecke mehr), wird die Geschwindigkeit auf Full-Speed begrenzt. Eine High-Speed-Übertragung ist dann auch bei eigentlich USB2.0-fähigen Geräten nicht mehr möglich.
Aufgrund der Datenraten und ebenfalls der elektrischen Fähigkeiten der Kabel ist eine gewisse Maximalentfernung zwischen zwei Geräten vorgegeben, die 5m beträgt. Mit bis zu vier Hubs kann die Entfernung auf bis zu 25m verlängert werden. Dann ist Schluss, denn dann funktioniert das Protokoll nicht mehr, das von gewissen Antwortzeiten und Reaktionszeiten beim Einstecken von neuen Geräten ausgeht. Diese 5m sind erst seit USB2.0 fest vorgeschrieben. Darum können evtl. auch längere Entfernungen funktionieren, aber es hängt dann stark von der Toleranz der entsprechenden Geräte ab. Eine Funktionsgarantie für diese Entfernungen ohne Hub gibt es dann nicht mehr. Es kann gehen, muss aber nicht. Und wenn es geht, dann allerhöchstens nur mit Full-Speed, nicht mit High-Speed.
Außer der Geschwindigkeit wird beim Verbindungsaufbau auch der Strombedarf ermittelt. Jedes Gerät muss melden, welchen Strombedarf es im Vollbetrieb benötigt. Dazu wird in einer Art USB-Stromeinheit gerechnet. Jedes Gerät darf beim Einstecken, also während der Aushandlung der Parameter, nur maximal eine USB-Stromeinheit verbrauchen, ich glaube das sind 100mA. Also auch ein Hub mit 5 Ports, wo je ein Gerät drinsteckt, darf zu Beginn diese Ports nicht durchschalten, sondern darf nur seinen eigenen Strom, also genau eine Einheit verbrauchen. Später, im eigentlichen Betrieb kann er durchaus dann 5 oder noch mehr Einheiten benötigen.
Nachdem der PC also weiß, wieviel Strom das Gerät im Normalbetrieb verbraucht, kann er entscheiden, ob er diesen Strom über die USB-Buchse liefern kann oder nicht. Wenn ja, aktiviert er den Hauptstrom zum Gerät, wenn nein wird das Gerät wieder komplett deaktiviert und folglich funktioniert dieses nun nicht.
In unserem Beispiel mit USB2.0-PC, USB2.0-fähigem Kabl und USB2.0-Hub wird also nun die Geschwindigkeit auf High-Speed umgeschaltet und der Strom aktiviert. Nun aktiviert der Hub seine eigenen Ports und meldet dem PC, dass er an einem Port ein angeschlossenes Gerät gefunden hat. Jetzt kann der PC den Hub sinngemäß auf den entsprechenden Port durchschalten und sozusagen direkt mit dem Gerät reden. Hierbei erfolgt nun eine ähnliche Aushandlung der Geschwindigkeit und des Strombedarfs. Dabei filtert der Hub die Informationen in beide Richtungen. Ist es beispielsweise ein aktiver Hub, dann übernimmt er selbst die Stromversorgung des Geräts und meldet dem PC einen geringeren Strombedarf weiter.
Wie gehabt erlaubt der PC nun die Aktivierung des Geräts, oder das Gerät bleibt inaktiv, wenn die Stromanforderungen nicht erfüllt werden können. Dabei addieren sich die Ströme natürlich. Das heißt der PC muss nun nicht nur den Strom für den Hub, sondern auch den Strom für alle angeschlossenen Geräte liefern. Kommt der Root-Hub an seinen Grenze, werden alle weiteren Geräte nicht mehr aktiviert.
Beispiel:
- Hub meldet 5 UE (USB-Einheiten)
- Gerät 1 meldet 3 UE
- Gerät 2 meldet 3 UE
- Gerät 3 meldet 1 UE
- Der Root-Hub kann 10 UE liefern
Nun passiert folgendes:
- Der Hub meldet für sich selbst 5 Einheiten. Der PC sagt OK und aktiviert den Strom
- Der Hub meldet Gerät 1. Der PC addiert die 3 UE der Geräts und die 5 UE des Hubs und stellt fest, dass er das schafft. Also darf der Hub Gerät 1 aktivieren. Der Verbrauch beträgt nun 8 UE.
- Der Hub meldet Gerät 2. Der PC addiert die 3 UE des Geräts und die 8 UE von bisher und stellt fest, dass seine 10 UE überschritten würden. Gerät 2 kann also nicht in Betrieb genommen werden und wird komplett abgeschaltet.
- Der Hub meldet Gerät 3. Der PC addiert die 1 UE des Geräts und die bisherigen 8 UE. Das ist noch weniger als 10, also kann das Gerät 3 aktiviert werden.
Am Ende hat man also Gerät 1 und Gerät 3 aktiv, auf das Gerät 2 kann jedoch nicht zugegriffen werden.
In unserem Fall ist eines der angeschlossenen Geräte natürlich der Topf. Ich weiß nicht, welchen Strombedarf der Topf meldet, aber möglicherweise sind damit einige Root-Hubs im PC überfordert, speziell wenn dort noch andere Geräte eingesteckt sind. Darum klappt es mit dem Topf manchmal nicht direkt am PC. Baut man jedoch einen aktiven Hub dazwischen, sollte es eigentlich klappen, selbst bei den so gefürchteten USB-Ports von VIA. Denn dann übernimmt der Hub die Stromversorgung des Topfes (erstes Problem weg) und kommuniziert problemlos mit dem Topf (zweites Problem weg), wobei er seinerseits mit der kritischen VIA-Schnittstelle des PCs redet (drittes Problem weg).
Was nun noch weiter passiert ist, dass die Hubs den jeweiligen Stromverbrauch auch tatsächlich überwachen. Überschreitet ein Gerät die Menge, die es in der Parameteraushandlung angefordert hat, wird es ebenfalls deaktiviert. Bei mir passiert das ab und zu, wenn ich die USB-Festplatte einschalte. Da meldet der USB-Port dann hin und wieder, dass das USB-Gerät zu viel Strom zieht. Daraufhin wird der Port deaktiviert und die Platte ist nicht nutzbar. Ein Aus- und Einschalten der Platte hilft dann meist.
So, wir sehen also, dass viele viele Parameter für die USB-Übertragung zuständig sind. Wenn es nicht klappt, dann muss man suchen, wo das Problem liegt. Oft hilft das Dazwischenschalten eines aktiven USB-Hubs. Solche Geräte mit 4 Ports kosten heute unter 10 EUR, ein 1m-USB-Kabel, wenn nicht sowieso am Hub schon dran, kostet weniger als 1 EUR (z.B. bei
Reichelt). Das sollte also für jeden erschwinglich sein. Dabei darauf achten, dass sowohl Kabel als auch Hub USB2.0-fähig sind, sonst klappt es wieder nicht mit der High-Speed-Übertragung.
Wenn der Topf also korrekt eine USB2.0-Verbindung zum PC aufgebaut hat, fließen die Pakete tatsächlich mit High-Speed zum PC. Das Problem ist nur, dass der Topf nicht schnell genug Daten bereitstellen kann. Es kommt also ein Paket mit 480 MBit/s, dann kommt wieder eine lange Pause, dann das nächste Paket. Damit kommt man auf eine mittlere Übertragungsgeschwindigkeit von ca. 20 bis 25 MBit/s. Also max. 1GB in 7min.
Das ist was völlig anderes, als wenn in Full-Speed, also mit "USB1.1-Geschwindigekeit" übertragen wird. Dort sind die Pausen kürzer oder sogar komplett weg, es laufen fortwährend Daten, aber eben nur mit 15 MBit/s. Hier dauert 1GB darum etwa 11 Minuten zur Übertragung.
Noch ein Wort zu den Datenraten: 480MBit/s sind schnell, wahnsinnig schnell. Ein solches Kabel muss sehr sehr gute elektrische Fähigkeiten haben, mit ganz präzise abgestimmten Werten. Auch die Stecker sind Hochpräzisionsstecker. Geben die nicht ordentlich Kontakt, ist es vorbei mit der Geschwindigkeit. Das alles ist ein ungeheuer geniales aufeinander abgestimmtes Spiel. Da erscheint es fast wie ein Wunder, wie unproblematisch man im Prinzip damit umgehen kann und wie gut die ganze Sache funktioniert. Aber wenn die Verbindung mal steht, dann steht sie. Dazu spielt auch die Software eine gewisse Rolle. Das Übertragungs-Protokoll sieht eben auch Übertragungsfehler vor, und kann einfache Fehler durch Prüfsummen korrigieren und schwerere Fehler durch Wiederholung der Datenpakete.
Insofern ist es eben *nicht* normal, dass die Verbindung zum Topf durch Einschalten eines externen Geräts abbricht. Solche Störungen sind normal. Wenn also nicht der USB-Root-Hub aufgrund einer Stromspitze den Port komplett abschaltet (siehe oben Stromüberwachung), was aber eher unwahrscheinlich ist, dann ist der Betrieb weiterhin gewährleistet und es liegt nur rein an der Software, wenn die (logische) Verbindung abbricht.
Irgendjemand hat hier also schlampig programmiert. Entweder Microsoft mit dem USB-Grundtreiber, Topfield mit der Topf-DLL, oder der USB-Kartenhersteller mit dem hardwarespezifischen USB-Treiber. Da alle anderen Geräte bei mir funktionieren, nie den Kontakt verlieren, auch beim Einschalten anderer Geräte, und somit nur beim Topf solche Probleme bestehen, tippe ich auf die Programmierer der Topf-DLL. Wenn man sich Altair und seine vielen Macken anschaut und die Firmware des Topf selbst, die ja auch den einen oder anderen, oft recht offensichtlichen Fehler enthält, wird dieser Eindruck noch verstärkt.
Gruß,
Hagge