USB Bundle Transfer VS HID ?



  • Hallo zusammen,

    mit meinem Microcontroller AVR 8bit, beantworte ich die vom Betriebssystem gesendeten USB Deskriptoren , und melde somit den Baustein über die A und B Ader als HID -Device an ohne Treiber an. Das funktioniert wunderbar , auf dem Baustein Atiny85 läuft ein von V-USB abgeleitetes Assembler Interrupt Programm. https://flexxvision.de/keyman.html

    Die Datenrate ist so auf rund 3Kb/Sek begrenzt , ich öffne das Device Windowsseitig (MFC) via der HID.DLL ohne Probleme und lese es über die Status Funktion aus , dito für XBox -GamePad oder Tastaturen anwendbar.

    Frage: Wie erreiche ich jedoch einen sog. Bündeltransfer mit >100MB/ Sec Transferleistung zb. mit einem Raspberry als Client um große Datenmengen zu übertragen ?
    Geht auch dies über das Human Interface Device HID zb. als WebCam https://flexxvision.de/kameras.html#a2334

    Vielen Dank für Hinweise
    Karsten aus Berlin.



  • Also erstmal glaube ich nicht dass du aus einem 8 Bit Mikrocontroller überhaupt 100 MB/s rausbekommen wirst. Und dann ist HID vermutlich auch das falsche Protokoll dafür. In HID gibt es soweit ich weiss keinen bulk Mode, und für hohe Datenraten verwendet man halt normalerweise bulk transfers.

    Geht auch dies über das Human Interface Device HID zb. als WebCam

    Also mir wäre neu dass man WebCams als HID Device umsetzen kann.



  • @hustbaer sagte in USB Bundle Transfer VS HID ?:

    Also mir wäre neu dass man WebCams als HID Device umsetzen kann.

    Jupp dafür gibt es die Video class (UVC): https://de.wikipedia.org/wiki/USB_Video_Class



  • Also das man mit ne 8bit AVR keine 100Mb senden kann ist mir auch klar , wie soll das gehen bei 20Mhz Taktung 🙂
    Interessant wäre ja wenn über HID USB-Sticks eingelegt werden könnten, die sind ja auch treiberfrei und haben beachtliche Datenraten.
    Deren Taktung kommt also vom USB Protokoll selbst, leider alles sehr schwer zu handhaben wenn man tausende Verfahren im Schilde führt.



  • @Achromat sagte in USB Bundle Transfer VS HID ?:

    Also das man mit ne 8bit AVR keine 100Mb senden kann ist mir auch klar , wie soll das gehen bei 20Mhz Taktung 🙂
    Interessant wäre ja wenn über HID USB-Sticks eingelegt werden könnten, die sind ja auch treiberfrei und haben beachtliche Datenraten.
    Deren Taktung kommt also vom USB Protokoll selbst, leider alles sehr schwer zu handhaben wenn man tausende Verfahren im Schilde führt.

    USB-Sticks werden auch nicht über HID angesprochen. Sondern über USB Mass Storage Device https://en.wikipedia.org/wiki/USB_mass_storage_device_class.

    Und keins davon ist "Treiberfrei". Aber durch die Device Classes braucht es nur einen "Treiber" pro "Device Class", welcher dann für alle USB Geräte verwendet werden kann, welche die entsprechende Device Class implementiert haben.
    Wahrscheinlicher ist eher, dass das von dir verwendete Framework für den 8Bit AVR USB HID implementiert hat.



  • @Achromat
    Hat der Mikrocontroller vielleicht eine serielle Schnittstelle die man per USB verfügbar machen kann? Oder kann er vielleicht per Software eine serielle Schnittstelle emulieren?



  • Der Controller "pollt" selber die A/B Leitung und beantwortet die Deskriptoren aus dem Yellow USB- Book , behandelt also selbst das Protokoll, der hat Baustein selber hat keinen Serial Baustein. Eigentlich die Anbindung über USB sehr undurchsichtig , und man tut gut dran möglichst TCP -Zu verwenden um große Datenmengen abzusetzen. Aber die Kontrolle über einen USB3.0 Bündeltransfer zu einem eigenen Controller herzustellen ist ziemlich Interessant. Dazu muss man selber einen Treiber herleiten, dies wiederum ist auch nicht gerade einfach wegen der Zertifizierungen. Eine USB_Video_Class ist dann schon eine sehr gute Option, um die Treiber Frickelei zu umgehen. Zb wenn man Lasersensor -Informationen senden möchte können die natürlich in einem Bild verpackt werden, und man kann den Camara Standard nutzen. Zb. für Stereo Laser Triangulationssensoren die Ihre Daten über einen ARM9 Prozessor direkt über den erwähnten Camera_Class_Driver absetzen würden.
    Die Datenerfassung auf der Controllerseite ist kein Problem, die Übertragung via TCP ist nicht gerade schnell genug.
    https://youtu.be/jfWM6e0R0mk


Anmelden zum Antworten