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


von gerhard (Gast)


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

von Thomas P. (pototschnig)


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 :-)

von gerhard (Gast)


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

von Thomas Pototschnig @ work (Gast)


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

von Thomas Pototschnig @ work (Gast)


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

von gerhard (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.