Hallo Konrad,
Am 10.12.19 um 16:01 schrieb Konrad Rosenbaum:
On Monday, 9 December 2019 18:17:55 CET jm.2009@web.de wrote:
Das könnte unbeabsichtigt an der verwendeten Hardware liegen: Bei mir hängen die Receiver von WLAN-Tastatur und -Maus an einem USB-Hub.
Du meinst sicherlich Wireless-Tastatur/-Maus. Meines Wissens gibt es keine Eingabegeräte die direkt über LAN oder WLAN kommunizieren. ;-)
Da hast Du gewiß recht. Ich meinte "Funktastatur" und "Funkmaus" ... und (auch auf die Gefahr, mich zu blamieren) funken die nicht auch auf 2.4 GHz?
Hängt an diesem USB-Hub zusätzlich ein USB-Stick, reagiert die Kiste sehr langsam auf Eingaben. Warum das so ist? Keine Ahnung.
Ganz einfach: der Stick hat höhere Prio und mehr Daten zu transportieren.
Das klingt logisch. Allerdings reagiert die Kiste auch dann sehr langsam auf Eingaben per Funktastatur und -maus, wenn der USB-Stick einfach nur am USB-Hub hängt und keinerlei Daten von bzw. zu ihm transferiert werden – selbst dann, wenn der Stick schon länger ohne Datentransfers dort hängt. (Siehe auch unten bei meiner nächsten Frage.)
Auf USB (1.x und 2.x) gibt es ein paar unterschiedliche Transfertypen - "control", "interrupt", "bulk", "isochronous".
Control benutzt USB um einfache Kommandos und Kurzinfos zu transportieren - z.B. "Identifiziere alle Geräte", "Führe Reset durch", "Gib mir Deine Typbeschreibung", ...
Interrupt wird für sehr kleine Datenmengen (wenige Bytes) benutzt, z.B. von Tastaturen und Mäusen um ihre Eingaben zu übermitteln.
Control und Interrupt werden auf dem Gerät in einen Puffer geladen und müssen dann warten bis der Host vorbeikommt und die Daten abholt. (Ja, der Name Interrupt is irreführend.) Die Transferrate ist unterirdisch, aber für einfache Geräte genug.
Bulk wird von Massenspeichern und anderen Geräten benutzt, die große Datenmengen ohne Verluste transportieren müssen. Dafür wird per Interrupt eine Zeitscheibe auf dem Bus angefordert, der Host gibt den Transfer frei und dann kann das Gerät eine Zeit lang den Bus blockieren.
Das klingt, also ob "Bulk" auch ohne Datentransfer, also prophylaktisch angefordert wird. Ist das so?
Isochronous wird von Multimediageräten (Kamera, Microfon) benutzt. Es funktioniert wie Bulk, aber wenn der Host nicht genug Kapazität zur Verfügung stellt werden die Daten einfach verworfen weil sie sowieso zu alt sind.
Dein Massenspeicher fordert also exzessive Bulk-Transfers an und blockiert damit effektiv den Bus, während Deine Tastatur nicht rechtzeitig an ihre Interrupt-Transfers kommt.
Alternativ stört der Stick den Bus auf elektrischem Niveau oder der Hub bricht regelmäßig zusammen weil er nicht genug Strom für alle Geräte hat.
Maßnahmen:
Hub mit eigener Spannung versorgen (falls er ein Netzteil hat).
Tastatur und Stick tauschen - falls der Hub schlecht programmiert ist behandelt er bestimmte Ports mit höherer Prio als andere.
Tastatur nicht an den Hub, sondern in einen anderen (weit entfernten) Port direkt am Rechner stecken. Die USB-Chips im Rechner arbeiten unabhängig voneinander, aber jeder USB-Bus kann immer nur ein Gerät gleichzeitig bedienen. Meistens bedient ein Chip 1-4 Ports die direkt nebeneinander liegen, sind Ports physisch weit voneinander angelötet, dann sind sie vermutlich auch an unterschiedliche Chips angeschlossen und blockieren sich damit nicht gegenseitig. Umgekehrt sind Ports physisch am Rechner dicht beisammen (und vom selben Typ(*)) dann werden sie vermutlich auch vom selben Chip auf dem selben Bus bedient.
(*) USB 2.x Ports sind meistens schwarz, USB 3 Ports sind blau oder haben USB- C Stecker. Das sind in (fast) jedem Fall unterschiedliche Chips und unterschiedliche Busse.
viel Glück! Konrad
PS: versuch nicht die USB-Spec zu lesen! Die Schmerzen sind kaum zu ertragen... ;-)
Vielen Dank für Deine detaillierten Hinweise! Jakob