2017-05-03 4 views
0

Ich stelle diese Frage, weil die USB-HID-Dokumentation nicht sehr explizit darüber ist. Meine Frage bezieht sich auf Full-Speed-USB-HID-Geräte und ihre jeweiligen Berichtsdeskriptoren. Ich habe ein Gerät mit einer Bericht-ID von 2. Die Berichtsanzahl im Berichtdeskriptor ist auf 64 eingestellt. Nach meinem derzeitigen Verständnis ist der Berichtsanzahl beim Übertragen eines USB-Pakets die Berichts-ID vorangestellt. Das heißt, die Größe des USB-Pakets entspricht der Größe, die in der Berichtsanzahl angegeben ist, plus einem Byte für die Berichts-ID. Dies entspricht einer Gesamtgröße von 65 Byte für die gesamte Übertragung. Ich habe es versucht und es funktioniert.USB-Paket Länge mit Bericht-ID

Meine Frage hier ist, ist dies ein korrektes Verständnis der USB-Spezifikation, oder bin ich etwas zu nutzen, die von Windows-Updates oder Mac-Updates später gepatcht werden könnte, etc ...?

Gemäß der USB-HID-Spezifikation ist eine USB-Transaktion auf 64 Byte für Hochgeschwindigkeitsgeräte begrenzt. Dies ist jedoch eine veraltete Information, da Hochgeschwindigkeitsgeräte 1024 Bytes pro Übertragung erreichen können. Full-Speed-Geräte sind jetzt so spezifiziert, dass sie maximal 64 Bytes pro Übertragung haben. Es gibt außerdem an, dass die Berichtsanzahl sich auf die Menge der Datenfelder in einer Berichtübertragung bezieht. Es heißt nicht USB Transaktion, nur Bericht Übertragung.

Für Berichts-IDs lautet die USB-HID-Spezifikation "Bericht-ID-Elemente werden verwendet, um anzugeben, welche Datenfelder in jeder Berichtsstruktur dargestellt werden. Ein Bericht-ID-Element-Tag weist jeder Berichtsübertragung ein 1-Byte-Identifikationspräfix zu. "

Das führt mich zu der Annahme, dass, obwohl es besagt, dass Full-Speed-Geräte auf 64 Bytes pro USB-Transaktion beschränkt sind, dieses Limit Report IDs nicht berücksichtigt. Ist das richtig?

Antwort

0

Nein, die Report-ID gilt als Daten. Mit der Report-ID dürfen die restlichen Reportdaten nicht länger als 63 Byte sein.

Beachten Sie, dass dieses Limit nur von der Hardware in voller Geschwindigkeit Modus erzwungen wird. Hohe Geschwindigkeit Interrupt-Endpunkte können bis zu 1024 Bytes pro Übertragung betragen.

Die aktuelle HID-Spezifikation Version 1.11 ist ab 2001 und damit ein wenig recht USB 2.0 High Speed ​​früher. Interrupt Übertragungen, die länger als 64 Byte sind, sind nicht verfügbar.

Sie können das Verhalten Ihres Gerätes zu überprüfen, sobald es zu einem alten USB 1.1 (Full Speed) Hub angeschlossen ist.

+0

Entschuldigung, ich war in meiner ursprünglichen Frage falsch. Ich zähle als Full-Speed-Gerät, nicht mit hoher Geschwindigkeit. Full-Speed-Geräte sollen also pro Transfer maximal 64 Byte haben, aber ich kann 65 erfolgreich senden, solange das erste Byte die Report-ID ist. Wenn ich zum Beispiel 66 Bytes sende, bricht es und funktioniert nicht richtig. Dies ist ein weiterer Hinweis darauf, dass die Report ID nicht zum Datenfeld zählt. Haben Sie Unterlagen oder irgendetwas, auf das Sie mich hinweisen können, um Ihrer Aussage zu entsprechen, dass es Teil des Datenfeldes ist? –

+0

Ich habe meine ursprüngliche Frage geändert, um mein Missverständnis von voller/hoher Geschwindigkeit zu korrigieren. –

+0

Danke für Ihre Hilfe. Du hattest Recht. Ich hatte den Eindruck, dass ich in der Lage sein würde, 64 Byte Daten und ein zusätzliches Byte für die Berichts-ID zu senden, und es schien, als ob es funktionierte. Bei näherer Betrachtung wurden tatsächlich zwei separate Pakete gesendet. Ein 64 Bytes und ein weiteres 1 Byte lang. Vielen Dank! –