Announcement

Collapse
No announcement yet.

USB Hi-speed

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • USB Hi-speed

    Hallo,
    wir möchten ein USB-Device zur Steuerung einer Maschine bauen und wollen den Renesas SH7203 dazu verwenden. Die ersten Tests mit dem StarterKit und der mitgelieferten Beispiel-Firmware waren gut, aber nun wollen wir die Geschwindigkeit erhöhen und haben dabei ein Problem. Wenn man einmal 2048 B (B=Bytes) liest (aus Sicht des PC) so ist es möglich 7 MB/s zu erreichen. Wenn ich aber 10 mal schnell hintereinander 2048 B lesen will, dann ist das erste Mal schnell (0,3ms), die 9 restlichen Male gehen deutlich langsamer: 4ms.
    Ich habe verschiedenes probiert, aber nun keine Idee mehr, wo ich noch etwas verändern kann/muss, damit dass immer so schnell geht. Wenn ich 10 mal nur 1024B lese, dann ist ungefähr die Hälfte der Vorgänge schnell , die andere Hälfte ebenfalls langsam mit 4 ms, in unterscheidlicher Reihenfolge.

    Auf PC-Seite verwenden wir den LIBUSB-driver 1.12.1.0 , WinXP Pro und Delphi6 ebenfalls mit libusb. Daher meine Frage hier im Foum: Gibt es etwas bei Hi-Speed und LibUSB zu beachten? Etwas, was vielleicht bei Full-Speed nicht so bedeutend ist? Bei Hi-Speed gibt es ja z.B. diese 125 us-Frames. Muss daher etwas auf PC-Seite an diesen schnellen Takt 'angepasst' werden? Bei einem Full-speed-Prozessor habe ich z.B. die Erfahrung gemacht, dass x-maliges bulkread von 64 Bytes mindestens x ms dauert, 'weil' es da diesen 1ms-Frame gibt, und jedes bulkread dann in einen eigenen gepackt wird. Sagt man einmal bulkread mit (x*64B) löst sich das Problem. Leider funktioniert das nicht ganz so beim Hi-speed-Proz. ...
    Damit zum Schluss noch der Hinweis: Beim Testprogramm verwende ich die synchrone bulkread-Funktion; die USB-Kommunikation läuft in einem Extrathread, ähnlich wie ich es schon bei anderen Test umgesetzt habe.

    Vielen Dank für Tipps.

    Peter Se

  • #2
    Problem gelöst

    Hallo,
    nur zur Info: Das Problem wurde inzwischen gelöst. Es lag nicht an Delphi oder LibUSB, sondern an der Firmware-Programmierung. Der Beispiel-Code nutzte nicht die Möglichkeit eines DMA-Transfers. Nach einer Änderung und mit passender Konfiguration (z.B. nutzen von 2 Pipes) erreiche ich nun eine Rate von ca. 7MByte/s und habe zwischen den Bulkread-Befehlen noch 0,45 ms Pause. Diese Zeit werde ich später dann wohl für die Verarbeitung der Daten benötigen.

    Grüsse
    Peter

    Comment

    Working...
    X