2017-06-27 1 views
0

Ich verwende libusb, um Daten in Echtzeit von einem USB-Audiogerät zu erhalten. Meine maximale Paketgröße beträgt 196 Byte. Ich weiß, dass 4 dieser Bytes für die Prüfsumme hinzugefügt werden. Ich möchte die Bytes identifizieren, die für die Prüfsumme verwendet werden, so dass ich nur die nützlichen Daten der Übertragung speichern kann, aber ich habe einige Zweifel:Wie werden die Datenbytes identifiziert, die für CRC (Prüfsumme) in einem USB ISO-Transfer verwendet werden?

1) Sind diese Bytes am Anfang oder am Ende des Pakets hinzugefügt?

2) Haben diese Bytes einen reservierten Wert?

3) Bei Verlust von Datenbytes bei der Übertragung. Welche Überlegungen sollte ich für die Bytes verwenden, die für die Prüfsumme verwendet werden?

EDIT 1

Ich habe diese Zweifel, weil mein bestimmtes Gerät eine Schnittstelle und alt-Einstellung hat, die mit einer Abtastrate von 48 kHz, 2 Kanälen, 16 Bit Tiefe und mit einer Max-Paketgröße von 196 Bytes arbeitet .

So gibt es 48 Proben * 2 von zwei Kanälen * 2 Bytes = 192 Bytes

So sollen meine Pakete von 192 Bytes sein, aber wenn ich mein Gerät mit dieser Schnittstelle und alt-Einstellung, die ich anfangen zu arbeiten um Pakete von 196 Bytes zu empfangen. Die entsprechende Schnittstelle und Alt-Einstellung für den OUT ISO-Endpunkt funktioniert mit einer Abtastrate von 48 KHz, 2 Kanälen, 16 Bit Tiefe und einer maximalen Paketgröße von 192 Byte.

4) Wenn diese Bytes nicht von der Prüfsumme stammen, warum werden diese Bytes hinzugefügt?

+0

verwenden, sollten Sie in der Lage sein, diese Informationen aus der Protokollspezifikation zu erhalten. Wenn Sie keins haben, müssen Sie es rückentwickeln. –

Antwort

1

enter image description here

Ich weiß, dass 4 dieser Bytes für die Prüfsumme hinzugefügt

Falsch. CRC ist 2 Bytes für Datenpaket und 5 Bits für Token-Paket. Auch CRC wird niemals in dem Benutzerpuffer gespeichert/weitergeleitet. Es wird vom Controller während der Überprüfung der CRC entfernt. Sie werden die CRC also überhaupt nicht sehen. Aber wenn Sie immer noch die CRC sehen wollen, schließen Sie einen USB-Paketanalysator an und schauen Sie sich die Ablaufverfolgung an.

1) Ist diese Bytes am Anfang oder am Ende des Pakets hinzugefügt?

2 Bytes werden am Ende hinzugefügt.

2) Haben diese Bytes einen reservierten Wert?

No. Die auf dem Inhalt des Datenpakets

3) Im Fall berechnet basierend auf der Übertragung einige Datenbytes zu verlieren. Welche Überlegungen sollte ich für die Bytes verwenden, die für die Prüfsumme verwendet werden?

Wenn Sie einige Bytes nach CRC verlieren bereits berechnet, werden Sie USB Transaktionsfehler (CRC Mismatch vom Host) erhalten. Die gleiche Transaktion wird vom Host wiederholt.

PS - Ich nahm Sie High-Speed-Gerät

+0

Ich weiß, dass 16 Bits für die CRC verwendet werden, aber ich denke, ich bekomme 4 Bytes, weil ich Daten für einen isochronen Stereo-Endpunkt empfange. Also sind 2 Bytes vom ersten Kanal und die anderen 2 Bytes vom zweiten Kanal. – DrCachetes

+0

Ok, Sie haben es verstanden, aber CRC wird von Ihrem Host-Controller zur Verifizierung verwendet und basierend auf dem Ergebnis wird es entscheiden, ob es als gutes oder schlechtes Paket betrachtet wird. Wenn es ein gutes Paket ist, speichert der Host die Daten im Übertragungsdeskriptor (EHCI) oder Übertragungsring (XHCI). Daher wird kein CRC in Ihrem Puffer gespeichert. – Shaibal

+0

Auch ich denke 2 Bytes von einem Kanal und 2 Bytes von anderen werden in einem Datenpaket gepackt und über den Link gesendet. CRC ist pro Paket und nicht pro Kanal. Letztendlich sendet sein einziger Endpunkt ein Paket nach dem anderen. Also ein CRC pro Datenpaket. – Shaibal

Verwandte Themen