mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT91SAM7,frage zu USB => Serial


Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
auf www.at91.com findet sich ein beispiel-projekt für einen rs232<=>usb
umsetzer (AT91SAM7S-BasicUSART_USB).
der at91sam7s arbeitet hier als rs232<=>USB umsetzer.
das projekt ließ sich ohne probleme erzeugen. auf der pc-seite wird der
cdc-treiber (usbser.sys) eingesetzt. mittels der dem projekt beiligenden
.inf-datei ließ der treiber auch ohne probleme installieren.
nur beim betrieb dieses umsetzers fiel mir auf, daß die
übertragungsgeschwindigkeit sehr bescheiden ist. grund dafür ist
wiederum, daß auf der rs232-seite empfangene messages, die größer als
64 bytes sind, in mehrere pakete zerlegt werden. dies ist in ordnung da
der zum einsatz kommende transfer type (bulk) nur maximal 64 datenbytes
zuläßt. problematisch ist allerdings, das die zeit zwischen 2 paketen
zwischen 30 und 60ms beträgt was dann zu der geringen
übertragungsgeschwindigkeit führt.
ich habe nun keine ahnung, warum die zeit zwischen 2 paketen so lange
ist. aufgrund des protokoll-mitschnitts ist erkennbar, daß der host die
pakete nicht schneler abholt.
hat jemand von euch damit schon erfahung oder ähnliche probleme?

besten dank im voraus
gerhard

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin gerade damit beschäftigt durch das USB-Chaos durchzusteigen und
kämpfe mich durch die Descriptoren der cdc_enumerate.h. Dabei ist mir
aufgefallen, dass Interface 1 konfiguriert ist:
EP1 = Interrupted mit Interval 255 - IN
EP2 = Bulk - OUT

Versuch doch mal das Interval zu verkleinern - dann müsste der Host
schneller pollen.

Zur Orientierung, so siehts bei mir aus:
/* Endpoint 1 descriptor */
0x07,   // bLength
0x05,   // bDescriptorType
0x83,   // bEndpointAddress, Endpoint 03 - IN
0x03,   // bmAttributes      INT
0x08,   // wMaxPacketSize
0x00,
0xFF,   // bInterval

Hoffe das hilft dir weiter. Wenn nicht, dann: Keine Ahnung :-)

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo thomas,
also beim o.a. beispiel-projekt sieht der descriptor für interface 1
folgendermaßen aus:
/* First alternate setting */
  /* Endpoint 1 descriptor */
  0x07,   // bLength
  0x05,   // bDescriptorType
  0x01,   // bEndpointAddress, Endpoint 01 - OUT
  0x02,   // bmAttributes      BULK
  AT91C_EP_OUT_SIZE,   // wMaxPacketSize
  0x00,
  0x00,   // bInterval

  /* Endpoint 2 descriptor */
  0x07,   // bLength
  0x05,   // bDescriptorType
  0x82,   // bEndpointAddress, Endpoint 02 - IN
  0x02,   // bmAttributes      BULK
  AT91C_EP_IN_SIZE,   // wMaxPacketSize
  0x00,
  0x00    // bInterval

d.h. beide endpoints des interface 1 (und das ist doch das interface
über welches die rs232 "getunnelt" wird) sind vom transfer typ bulk
und die packetgröße ist 64 bytes groß. diese packetgröße konnte ich
beim protokoll-mitschnitt auch feststellen.

hat sonst noch jemand eine idee?

gruss
gerhard

Autor: Thomas Pototschnig @ work (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht ist das Problem der BULK Transfer alleine schon.

Hier[1] heißt es zum Beispiel:

> Bulk transfers will use spare un-allocated bandwidth on the bus
> after all other transactions have been allocated. If the bus is busy
> with isochronous and/or interrupt then bulk data may slowly trickle
> over the bus. As a result Bulk transfers should only be used for
> time insensitive communication as there is no guarantee of latency.

Ich hab dummerweise da noch überhaupt keine Erfahrungswerte, wie sich
das auswirken kann und ob der Datentransfer auch verlangsamt wird,
selbst wenn die Bandbreite zur Verfügung stehen würde. Eventuell
wirklich mal einen anderen Mode ausprobieren?

[1]: http://www.beyondlogic.org/usbnutshell/usb4.htm#Bulk h

Autor: Thomas Pototschnig @ work (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochwas ... du hast die "Alternate Settings" in dein Posting kopiert.
Sind die Alternate Settings auch wirklich aktiviert worden? Ansonsten
werden die Endpoint-Descriptoren weiter oben verwendet und da ist EP1
dann ein Interrupted (siehe mein Codeschnippsel) Endpoint

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo thomas,
vorerst mal danke für deine bemühungen!

deinen hinweis mit der Bandbreite habe ich auch schon gelesen. das
entfernen aller usb devices hat aber nichts gebracht.

zu den alternate settings:
ich habe zwar keine ahnung wie die alternate settings aktiviviert
werden (macht meiern meinung nach usbser.sys) aber der rs232-stream muß
darüber abgewickelt werden, denn das interface 1 hat die entsprechende
interface class (nämlich 0x0a => data class interface).

aber beschwören kann ich das auch alles nicht und bin daher für jeden
hinweis dankbar.

gerhard

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.