Hallöchen zusammen, ich möchte gerne die bisherigen FTDI Chips ersetzen, bzw. umgehen da der dahintergeschaltete Prozessor (Xmega32A4U) sowieso USB hat. Jetzt die Frage, wie das sauber geht, denn durchblicken, auch durch das ASF tue ich gerade noch überhaupt nicht. Was ich brauche: 1. CDC virt. COM für einzelne Bytes die übertragen werden 2. ISR Steuerung, da die Loop nicht geblockt werden darf 3. Die PC Software von mir (VB geschrieben) sucht im WMI alle USB Geräte von "FTDI" und mit Prefix "PR" der Seriennummer, dann weiß er, dass es das Gerät ist und verbindet sich mit dem COM. Geht das jetzt auch? Wie kann ich eine Seriennummerprefix setzen? Hersteller ist dann ATMEL vermute ich. Gibt es da ein Beispielcode vll?
Noppi schrieb: > 1. CDC virt. COM für einzelne Bytes die übertragen werden > 2. ISR Steuerung, da die Loop nicht geblockt werden darf > 3. Die PC Software von mir (VB geschrieben) sucht im WMI alle USB Geräte > von "FTDI" und mit Prefix "PR" der Seriennummer, dann weiß er, dass es > das Gerät ist und verbindet sich mit dem COM. Geht das jetzt auch? Wie > kann ich eine Seriennummerprefix setzen? Hersteller ist dann ATMEL > vermute ich. Das alles musst du selbst im entsprechenden Descriptor in deiner µC-Software machen. Der ist von Hause aus nicht dafür eingestellt irgendeine Serielle Schnittstelle zu simulieren. Das musst du dem erst alles "beibringen". - https://www.beyondlogic.org/usbnutshell/usb5.shtml Und für die "Gegenstelle" einen passenden Trieber bereitzustellen der dein Gerät bedient ist noch mal eine andere Baustelle. Der FTDI-Treiber wird dein Gerät eventuell nicht so einfach akzeptieren und dir einen virtuellen COM-Port erzeugen. Du musst hier erheblich mehr selber "zu Fuß" machen als wenn du den FTDI verwendest.
Irgend W. schrieb: > Das alles musst du selbst im entsprechenden Descriptor in deiner > µC-Software machen. Der ist von Hause aus nicht dafür eingestellt > irgendeine Serielle Schnittstelle zu simulieren. Das musst du dem erst > alles "beibringen". Das weiß ich. Das Problem was ich habe ist die Umsetzung. Das Manuel finde ich dazu nicht aufschlüssig genug, mit anderen Schnittstellen (TWI, UART etc) war das nie ein Problem, aber USB ist zu umfangreich. Ich habe daher mal das ASF eingebunden, aber das ist so verwirrend zusammengebaut, das man da kaum durchsteigt. > Und für die "Gegenstelle" einen passenden Trieber bereitzustellen der > dein Gerät bedient ist noch mal eine andere Baustelle. Der FTDI-Treiber > wird dein Gerät eventuell nicht so einfach akzeptieren und dir einen > virtuellen COM-Port erzeugen. Du musst hier erheblich mehr selber "zu > Fuß" machen als wenn du den FTDI verwendest. => Nein, den will ich auch nicht nehmen, das klappt so. Wenn ich das ASF lade findet er direkt unter COM26 den USB to Serial Converter. Passt.
Noppi schrieb: > aber das ist so verwirrend zusammengebaut, das man da kaum durchsteigt. Sicher braucht "man" da mehr als eine Tasse Kaffee... Aber eigentlich ist es ganz logisch strukturiert und kann dann auch Multi-HID/Composite/CDC parallel... Dein Frage nochmal in Kurzform: Du willst das angeschlossene Gerät (ATxxx) nach Emumerierung anhand einer Seriennummer identifizieren? Schau Dir mal die udc.c an. Da ist das schon vorgedacht und muss a.) aktiviert werden: "USB_DEVICE_SERIAL_NAME" | "USB_DEVICE_GET_SERIAL_NAME_POINTER" und b.) an Deine Bedürfnisse angepasst werden. So sieht das bei uns aus (ASF 3.50.0.108)
1 | //xxxxx,xx: DYNAMIC serialNumber callback
|
2 | #if defined USB_DEVICE_SERIAL_NAME || defined USB_DEVICE_GET_SERIAL_NAME_POINTER
|
3 | #pragma message("UDC:DYNAMIC serialNumber callback")
|
4 | case 3: |
5 | str_length = udc_callback_get_serialnumberLen(); |
6 | str = udc_get_string_serial_name(); |
7 | break; |
8 | #endif
|
udc_callback_get_serialnumberLen() (falls benötigt) und udc_get_string_serial_name() müssen natürlich ausimplementiert werden... Deklaration in conf_usb.h. Implementierung an geeigneter Stelle in Deinem Code. Die "Seriennummer" taucht dann im DeviceDesciptor als "iSerialNumber" auf...
Stephan schrieb: > Die "Seriennummer" taucht dann im DeviceDesciptor als "iSerialNumber" > auf... aber nur dann wenn im Device Descriptor für ISerial auch was eingetragen ist (0x03 in deinem Beispiel)
Hört endlich auf Datenverbindungen zum PC drahtgebunden zu entwickeln. USB ist von gestern.
Ich musste dafür extra einen USB-Treiber schreiben. Hat mich ne ganze Woche gekostet, da ich mich dazu auch erstmal in die technischen Details von USB einarbeiten musste. Naja, dafür habe ich jetzt meinen eigenen USB-Treiber in Assembler.
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.