Hallo, Ich möchte gerne den STM32F417 mit 2 USB Verbindungen nutzen. Es sollte einmal eine Datenverbindung per CDC laufen, die mit meiner Software betrieben wird, zum zweiten soll auch ein virtueller COM Port bereit gestellt werden, über den fremde Programme Zugriff auf mein Board haben. Ich habe das noch nie gemacht, aber wenn ich die Doku von usb.org richtig verstehe sollte man im USB Descriptor mehrere Interfaces definieren können (Bei FTDI geht das auch, z.B. Olimex ARM-USB-OCD). Ich suche immer wieder im Internet danach aber ich habe noch nichts passendes gefunden. Für einen CDC habe ich mit LibUSB eine Kommunikation hin bekommen, und für den VCP über die Demo von ST. Aber wie kann ich nun beides vereinen? Am liebsten würde ich alles mit LibUSB (weil auch OpenSource) machen, aber ich habe nirgends gefunden wie ich dem LibUSB bei bringen kann dass er im Gerätemanager eine neue serielle Schnittstelle anlegt. Weiß jemand Rat? Oder gibt es einen anderen freien Gerätetreiber, den ich nutzen kann? Grüße Markus
Such mal nach CDC und IAD (Interface Association Deskriptor). Den brauchst Du, weil dein Gerät jetzt 2 Interfaces braucht - einmal CDC für VCP und einmal für LibUSB.
"IAD" - Das war der Tipp, Vielen Dank! Hier die Infos die ich dazu gefunden habe: http://webcache.googleusercontent.com/search?q=cache:IgUTdx7uRIQJ:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/AllItems.aspx%3FRootFolder%3D%252Fpublic%252FSTe2ecommunities%252Fmcu%252FLists%252Fcortex_mx_stm32%252FMultiple%2520USB%2520CDC%2520%28USB%2520IAD%29.%2520How+&cd=1&hl=de&ct=clnk&client=firefox-a http://akb77.com/g/stm32/stm32f103-cdc/ Jetzt habe ich erst mal zu tun...
Ich Analysiere nun die Descriptoren für USB, aber ich komme mit den Codes nicht ganz klar. In der USB Spec V2 war der Descriptor Typ "IAD" nicht drin, aber ich habe den in der Spec V3 gefunden. Erst mal den Code dann die Frage:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
Beim Descriptor "0x0B, // bDescriptorType: IAD": Wo kann man nachlesen, was die Codes "bFunctionClass" und "bFunctionSubClass" usw. bedeuten? Genauso auch beim Descriptor "0x24, /* bDescriptorType: CS_INTERFACE */" Das hat ja nichts mit der USB Spec zu tun, sondern ist Applikations abhängig, in dem Fall wahrscheinlich wie das bei einem VCP eingestellt werden muss. Weiß jemand wo ich da nachlesen könnte?
Nun habe ich den STM32 soweit programmiert und im Gerätemanager werden die zwei Devices gezeigt. Aber ich habe mit der INF Datei noch ein Problem: Ich wollte gerne die ganze Installation der Gerätetreiber in einer Datei drin haben. Aber die ClassGuid vom VCP ist eine andere als wie von LibUSB: ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} ClassGuid={EB781AAF-9C70-4523-A5DF-642A87ECA567} Wie kann ich jetzt die ClassGuid abhängig vom Device in der INF Datei umschalten? [Version] Signature = "$Windows NT$" Class = Ports ClassGuid = {4D36E978-E325-11CE-BFC1-08002BE10318} Class = "libusb devices" ClassGuid = {EB781AAF-9C70-4523-A5DF-642A87ECA567} Gleiche Namen in der Sektion sind ja nicht erlaubt.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.