mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USB Verbundgerät


Autor: Sebastian____ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche mit einem Controller (Coldfire V1) 2 USB Geräte anzumelden, 
diese sollten dann auch soweit halbweges getrennt im Controller 
behandelt werden. Zb. eine HID Maus + Tastatur + CDC Device.
Alles jeweils allein ist ja kein Problem. Ich habe insgesamt 16Endpoints 
im Controller, daran sollte es also nicht scheitern.
Wie stellt man es an das zb 2 verschiedene Geräte mit einem Controller 
gleichzeitig angemeldet werden.

Normalerweise müsste man doch wie jedes einzelne Gerät jeweils den 
Report Descriptor haben und die entprechenden Diskriptoren dann im 
Konfig discriptor bündeln.
So richtig finde ich auch keine Dokumentation wie man so ein Gerät 
entsprechend anmeldet bzw. wie das in der Firmware aussehen muß.

MfG
Sebastian

Autor: Guido Körber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst mehrere Interface-Descriptoren.

Autor: René König (king)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guido Körber wrote:
> Du brauchst mehrere Interface-Descriptoren.

+ IAD (wegen CDC)

Autor: termite (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

cdc = wirtueller com Port?

da gabs irgend welche gemeinheiten in verbindung mit hid (Tastatur und 
maus)
ggf mal das implementers froum von usb.org durchstöbern. da stand irgend 
etwas über Hid und virtuel Comport drinen.

www.usb.org
Jan Axelson (nein sie ist eine Frau!) hat dazu irgend wann mal was 
geschrieben.

Autor: René König (king)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
termite wrote:
> cdc = wirtueller com Port?
>
> da gabs irgend welche gemeinheiten in verbindung mit hid (Tastatur und
> maus)

Bei mir funktioniert CDC in Verbindung mit HID ohne Gemeinheiten. Nach 
was muss ich da suchen?

Autor: termite (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

grr usb.org löscht ältere einträge im Forum
Ich will damit nicht sagen das es nicht geht. es gibt für das Problem 
nur mehrere Lösungen die mehr oder wenig gut funktionieren.

Die gemeinhat hat irgend etwas mit dem Discriptor zu tun, und wie dieser 
aufgebaut werden sollte. einfach nen composite mit cdc hund hid ging 
irgendwie nicht. Hing glaubich damit zusammen, das cdc selber schon 
sowas wie ein composite device ist descriptortechnisch.

Sie hat in dem beitrag auch mehrer lösungen vorgestellt.

wie gesagt ich find den eintrag nicht mehr (den link schon nur der 
beitrag is wech), ist somit alles aus den untersten schubladen meines 
gedächtnisses ausgegragen. keine garantie auf richtigkeit.

Autor: termite (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CDC und iad descriptoren vertrugen sich mal nicht
http://support.microsoft.com/kb/918365

Das währen eigentlich die links zu dem thema von Jan
https://www.usb.org/phpbb/viewtopic.php?t=13308
https://www.usb.org/phpbb/viewtopic.php?t=13610

Bei denen liefs auch nicht auf anhieb.
http://www.cygnal.org/ubb/Forum9/HTML/001227.html

Autor: René König (king)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
termite wrote:
> CDC und iad descriptoren vertrugen sich mal nicht
> http://support.microsoft.com/kb/918365

Schnee von gestern, aktuell funktioniert es.

> Das währen eigentlich die links zu dem thema von Jan
> https://www.usb.org/phpbb/viewtopic.php?t=13308
> https://www.usb.org/phpbb/viewtopic.php?t=13610

"The topic or post you requested does not exist"

> Bei denen liefs auch nicht auf anhieb.
> http://www.cygnal.org/ubb/Forum9/HTML/001227.html

Bei mir schon, da habe ich wohl noch etwas falsch gemacht. :-)

Im Ernst: Das Einzige Problem war für mich das Finden des letzten Restes 
der Dokumentation. Es ging im Speziellen um "USB IAD Device Class Code 
and Use Model", das war unter den white papers zu finden. Da bin ich 
allein nicht drauf gekommen, musste mir auch erst von Jan Axelson helfen 
lassen. Das Implemtieren ging aber blasenfrei, ganz ohne Gemeinheiten.

Autor: Sebastian____ (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe immer noch ein kleines Problem.
Ich bekomme es einfach nicht hin ein device mit 2 Interfaces zum laufen 
zu bekommen.
Die Kommunikation bricht höchst warscheinlich bei SET_CONFIGURATION ab.
Siehe Screenshot von der USB Analyse.

Die Descriptoren sehen so aus:
//--- hier könnte ein Problem sein
const hcc_u8 kbd_config_descriptor[] = {
  USB_FILL_CFG_DESC(9+3 + 9+9+7 + 9+9+7, 2, 1, 4, CFGD_ATTR_SELF_PWR, 0),
  USB_FILL_OTG_DESC(1, 1),
  
  USB_FILL_IFC_DESC(0, 0, 1, 0x03, 0x01, 0x1, 5), /* HID, boot, keyboard (3/1/1) */
  USB_FILL_HID_DESC(9, 0x0100, 0x0, 1, 0x22, sizeof(kbd_report_descriptor)),
  USB_FILL_EP_DESC(0x1, 1, 0x3, 8, 0x20),

  USB_FILL_IFC_DESC(1, 0, 1, 0x3, 0x0, 0x0, 6),  /* (HID, none, none) */
  USB_FILL_HID_DESC(9, 0x0100, 0x0, 1, 0x22, sizeof(geh_report_descriptor)),
  USB_FILL_EP_DESC(0x2, 1, 0x3, 8, 0x20),
};

hier die zugehörigen Makros:
/* This macro will evaluate to an array inicializer list with values of a
   interface descriptor. */
#define USB_FILL_IFC_DESC(ifc_id, alt_set, no_ep, iclass, isubclass, iproto, strndx) \
  (hcc_u8)0x09u, STDD_INTERFACE, (hcc_u8)(ifc_id), (hcc_u8)(alt_set), (hcc_u8)(no_ep)\
  , (hcc_u8)(iclass), (hcc_u8)(isubclass), (hcc_u8)(iproto), (hcc_u8)(strndx)

/* This macro will evaluate to an array inicializer list with values of a
   endpoint descriptor. */
#define USB_FILL_EP_DESC(addr, dir, attrib, psize, interval) \
  (hcc_u8)0x07u, STDD_ENDPOINT, (hcc_u8)((addr)&0x7f) | (((hcc_u8)(dir))<<0x7)\
  , (hcc_u8)(attrib), (hcc_u8)((psize) & 0xff), (hcc_u8)(((psize) >> 8) & 0xff)\
  , (interval)


Autor: Sebastian____ (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch mal ein log mit Snoopy.

Autor: Sebastian____ (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
und noch einer

Autor: René König (king)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich mir nun so die Screenshots ansehe, vermute ich, dass das 
irgendwie kein Verbundgerät CDC und HID ist. Auf diese Art würde ich 
jedenfalls auch nicht funktionieren.

Du brauchst mindestens 3 Interfaces, nicht 2 (1x Communication, 1x Data, 
1x HID). Desweiteren scheint mir noch der IAD zu fehlen, der das 
Communication- und das Data-Interface zusammenfasst.

Wie sieht der Device-Descriptor aus? Hast Du bekanntgegeben, dass Dein 
Gerät IAD verwendet?

Außerdem: Für CDC spricht ein Interface Class 0x02 (Communication) und 
Subclass 0x02 (ACM). Das andere Interface spricht Class 0x0A (Data) und 
Subclass 0x00 (undefined). Bei Dir sehe ich aber Class 0x00, Subclass 
0x00 und Class 0x02, Subclass 0x00. Wo bleibt da das HID?

Dazu haben beide Interfaces noch unterschiedliche Alternate Settings. 
Was bezweckst Du damit?

Autor: Sebastian____ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wollter erst mal nur eine Tastatur + Ein Generic Hid Device 
Implementieren. Wenn das von derFirmware her richtig läuft eventuell 
noch das CDC dazu.

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.