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
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 :-)
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.