mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USB CDC Device - maximale FIFO-Größe?


Autor: Harstad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

meine Frage steht im Zusammenhang mit diesem Posting hier: 
Beitrag "COM-Port Probleme mit Windows 10"

Ich bin auf der Suche nach möglichen Implementierungsfehlern im 
USB-Stack meines Controllers. In dem Zusammenhang habe ich einen etwas 
dubiosen Kommentar bei den vordefinierten FIFO-Größen gefunden.

Deswegen meine Frage: wie groß dürfen Sende- und Empfangs-FIFO bei 
CDC-Devices laut Spezifikation maximal sein?

Danke!

Autor: Jim M. (turboj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harstad schrieb:
> Deswegen meine Frage: wie groß dürfen Sende- und Empfangs-FIFO bei
> CDC-Devices laut Spezifikation maximal sein?

Da ist nix spezifiziert. Die kannste so groß machen wie Du möchtest.

Man kann sich aber schön in den Fuß schiessen, wenn man Transaktionen 
mit ganzzahligen Vielfachen von maxPacketSize (Full Speed = 64 Byte) 
anstößt. Die müssen nämlich mit einem Zero Packet abgeschlossen werden, 
sonst "hängt" die Transaktion im Host.

Mit anderen Worten: Die CDC Daten werden genau dann an die Anwendung 
durchgereicht, wenn ein USB Paket < 64 Byte übertragen wurde.

Die Ausname (Anwendung fragt genau 64*x Bytes an) spielt bei CDC keine 
Rolle, da IMHO usbser.sys einen eigenen kleinen FIFO aufmacht - deren 
Größe man nicht beeinflussen kann.

Diese Signalisierung "Ende der Transaktion" via Zero Packet fehlt bei 
den meisten CDC Implementierungen völlig, da bei "echtem" UART Input 
schon die 64 Bytes nicht am Stück anfallen würden.

Autor: Harstad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK...in meinem Fall sind 512 Bytes FIFO-Größe angegeben (die ja auch per 
USB-Deskriptor an den Host übertragen werden).

Bringt es überhaupt was, mehr als 64 Bytes FIFO zu verwenden? Von der 
Geschwindigkeit her ja sicher nicht, wenn Pakete sich immer an dieser 
Größe orientieren - und der Host eh' sein eigenes Süppchen kocht...

Autor: Jim M. (turboj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harstad schrieb:
> OK...in meinem Fall sind 512 Bytes FIFO-Größe angegeben (die ja auch per
> USB-Deskriptor an den Host übertragen werden).

Ist das ein USB2.0 High Speed Gerät? Bei Full Speed sind nur 64 Byte 
MaxPacketSize erlaubt.

Das ist aber nur die Größe eines USB Daten-Pakets. Bei Bulk Transfers 
werden mehrere Pakete maximaler Größe zu einer Transaktion zusammen 
gefasst.

Harstad schrieb:
> Bringt es überhaupt was, mehr als 64 Bytes FIFO zu verwenden?

Mehrere 64-Byte (oder 512? Byte bei High Speed) Pakete hintereinander 
als eine Transaktion zusammengefasst ist um Größenordnungen schneller 
als auf <64 Byte aufgeteilte Daten. Das hängt auch mit dem Scheduling 
von USB Transaktionen auf dem Host zusammen - er kann neue Daten erst im 
nächsten (Micro-)Frame schedulen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.