mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Unterschied USB-Enpoint0 ob mit 32 oder 64Byte FIFO


Autor: Zwille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mir ist klar, daß der Endpunkt0 bei einem USB für die Enummeration 
verwendet wird.

Für welche Anwendung macht es einen Unterschied, ob der Endpunkt0 nun 
z.B. 32- oder 64Bytes FIFO hat?


Vielen Dank!

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir in einer AT90USB1287-Implementierung, die ich mal
geschrieben habe (im Rahmen des µracoli-Projekts) folgenden
Kommentar gemacht:
#define CTRL_EP_SIZE 64         /* this is *not* easily customizable */

Den genauen Grund habe ich vergessen, aber das wird wohl ein
Henne-und-Ei-Problem sein: den EP 0 brauchst du zum Übertragen der
Konfigurationsdaten, und erst in den Konfigurationsdaten steht dann
drin, wie groß die jeweiligen Endpunkte sind.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Für welche Anwendung macht es einen Unterschied, ob der Endpunkt0 nun
>z.B. 32- oder 64Bytes FIFO hat?
für gar keine die EP0 Fifo wird ja nur für Controll Transfers benutzt.

>Den genauen Grund habe ich vergessen, aber das wird wohl ein
>Henne-und-Ei-Problem sein: den EP 0 brauchst du zum Übertragen der
>Konfigurationsdaten, und erst in den Konfigurationsdaten steht dann
>drin, wie groß die jeweiligen Endpunkte sind.

Nein es hat nichts damit zu tun, da der erste Request bei 
ernstzunehmenden OS eh nur 8 byte groß ist. Es einfach so dass bei einem 
kleinen EP mehr Daten stages notwendig sind die korrekt implementiert 
werden müssen.
Ich selbst habe auch schon mit 8 Byte Fifo gearbeitet. In meinem Fall 
hat das Speicherplatz gespart den in anderweilig verwenden konnte 
(TUSBXXXX)

Thomas

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Es einfach so dass bei einem
> kleinen EP mehr Daten stages notwendig sind die korrekt implementiert
> werden müssen.

Ja, so allmählich dämmert es wieder.  Ich glaube, man hätte einfach
in der Firmware mehr Aufwand treiben müssen, daher der Kommentar.

Zumindest für den AT90USB1287 hätte sich daraus ohnehin kaum ein
praktischer Vorteil ergeben, da der so viel DPRAM besitzt, dass
man trotzdem noch genügend Puffer für die Datenendpunkte hat.  Bei
kleineren Controllern könnte das natürlich anders sein.

Autor: Zwille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, also für das was ich mit dem USB eigentlich übertragen möchte ist es 
egal, ob nun 32 oder 64Bytes. Das hatte ich mir schon gedacht.

Aber in welchem Fall fällt mir dieser Unterschied beim Programmieren 
auf, ob nun der 0EP kleiner oder größer ist?

Ich denke doch, daß die Übertragung der Enumerationsdaten noch eine 
Schicht tiefer liegt, als das Eintragen der Daten um ein Gerät zu 
kennzeichnen usw.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwille schrieb:
> Aber in welchem Fall fällt mir dieser Unterschied beim Programmieren
> auf, ob nun der 0EP kleiner oder größer ist?

Ich müsste jetzt auch nachsehen, aus dem Hut weiß ich nicht mehr,
warum ich den Kommentar damals gemacht habe.  Der configuration
descriptor eines CDC devices ist jedenfalls auch so schon größer
als 64 Bytes, sodass man das leidige ZLP handling (zero-length
packet) ohnehin benötigt.

Noch eine Fundstelle:

http://www.beyondlogic.org/usbnutshell/usb4.htm

The packet length of control transfers in low speed devices must be 8 
bytes, high speed devices allow a packet size of 8, 16, 32 or 64 bytes 
and full speed devices must have a packet size of 64 bytes.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch schrieb:
> Ich müsste jetzt auch nachsehen, aus dem Hut weiß ich nicht mehr,
> warum ich den Kommentar damals gemacht habe.

Vielleicht wollte ich damit nur ausdrücken, dass es nicht genügt,
dieses #define zu ändern, sondern dass man auch den entsprechenden
Wert im UECFG1X noch ändern müsste.

Initial hatte ich mich darum herum gemogelt, das ZLP handling für
den control endpoint überhaupt zu implementieren, dadurch war die
EP-Größe von 64 erstmal notwendig, um die Daten überhaupt übertragen
zu bekommen.  Allerdings hatte ich dann nach diversen Versuchen mit
verschiedenen Betriebssystemen sowie nach Studium der USB spec für
die CDC devices feststellen müssen, dass es eine Reihe von Dingen
gibt, die man formal implementieren muss, obwohl man sie gar nicht
braucht (allerlei Krempel, der eigentlich nur für ein Modem von
Interesse wäre, das eine Verbindung wählen können soll).  Wenn man
das nicht macht, akzeptiert das eine oder andere OS dieses Gerät
einfach mal nicht in seinem generischen Treiber.  Nachdem ich dann
aber alles drin hatte, war der configuration descriptor halt ohnehin
auf 67 Byte angewachsen, und das ZLP handling auch für EP 0 notwendig
geworden.  Damit wiederum müsste man den aber in der Tat auch auf
32 Byte beschränken können.

Autor: Potter S. (potter68)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zwille,

man kann über den EP0 auch Datenpakete versenden. Je nachdem wieviele 
Bytes Du übertragen willst bietet es sich an, den Buffer größer oder 
kleiner zu machen.

Außerdem kann man in einigen Controllern den verbliebenen USB-RAM als 
ganz gewöhnlichen RAM nutzen. Bei wenig RAM hilft es durchaus den EP0 
klein zu machen.

Gruß Ralf

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.