Hallo,
ich beschäftige mich grade mit einer USB-Bootloader-Implementierung für
den F303CC.
HID läuft soweit und kann auch per python angesprochen werden. Dabei ist
die Latenz aber recht hoch (~2s zwischen write und update im read bei
Echo Implementierung) und die Datenrate eher gering.
Da ich den USB-Code evtl. auch für andere Projektte nutzen will, habe
ich über das USB-Tutorial [[USB-Tutorial mit STM32]] WinUSB entdeckt.
Die Implementierung war soweit nicht schwierig. EP1 ist als
Bulk-Endpoint konfiguriert und spiegelt die empfangenen Daten 1:1
zurück. Windows erkennt das Gerät und wählt auch den richtigen Treiber
aus. Konfigurations-ID ist: winusb.inf:USB\MS_COMP_WINUSB,WINUSB.NT
Aber wenn ich alle winusb-Geräte mir auflisten lasse, wird der F303
nicht angezeigt.
(Zum Anzeigen nehme ich die Lib Device.Net, Code entspricht dem hier
gezeigten:
https://github.com/MelbourneDeveloper/Device.Net/wiki/Enumerating-Connected-Devices)
Der ST-Link wird erkannt und aufgelistet. Nur mein Gerät nicht.
Unter Zadig wird das Gerät erkannt und als Treiber WINUSB v10.0.19041.1
angezeigt (siehe Screenshot). Für den ST-Link WinUSB V2.1.0.0.
Hat die Groß/Kleinschreibung eine Bedeutung oder ist der Treiber
identisch (mit neuerer Version).
Muss ich auf der PC-Seite noch was machen, damit ich auf das Gerät
zugreifen kann? Oder brauche ich auch bei WinUSB noch eine
Treiberdefinition auf Windowsseite?
Gruß
Kevin
Kevin schrieb:> Unter Zadig wird das Gerät erkannt und als Treiber WINUSB v10.0.19041.1> angezeigt (siehe Screenshot). Für den ST-Link WinUSB V2.1.0.0.
Ich gehe davon aus dass du W10 benutzt.
Hast du dein WinUsb Device zufällig mit Zadig zugewiesen? Mach das
wieder rückgängig und implementieren die OS aware Deskriptoren damit
Windows das Gerät automatisch erkennt. Damit wird dein Device
automatisch der WinUsb Class zugeordnet.
Ist dann so ähnlich wie ein HID Class Device oder jedes andere Device
was von einem Classtreiber unterstützt wird.
Allerdings kann WinUsb nur auf Device Ebene und nicht auf Interface
Ebene benutzt werden das geht nur mit richtigen class Treibern.
Der Treiber den Zadig anzeigt ist der Original WinUsb Treiber der mit
Windows kommt. Der Stlink Treiber vermutlich ein Treiber der ST kommt.
Ansonsten vermute ich den Bug eher in deiner Bibliothek zum Listen der
Devices.
Thomas Z. schrieb:> Ansonsten vermute ich den Bug eher in deiner Bibliothek zum Listen der> Devices.
Das vermute ich auch. Zadig braucht man eigentlich überhaupt nicht. Bei
korrekt implementiertem WinUSB-Gerät erscheint das Gerät sofort im
Geräte-Manager und ist einsatzbereit.
Versuche es mal über libusb oder direkt das WinUSB-API. Dort sollte das
Gerät erscheinen. Es ist dann natürlich kein HID-Gerät mehr und
erscheint auch so nicht mehr.
Hi,
das hätte ich eventuell dazuschreiben sollen:
Ich habe mit Zadiag keine Treiber zugewiesen. Nur zum Anzeigen der
Treiber.
die Deskriptoren sehen bei mir so aus:
Servus,
kurze Rückmeldung von mir:
Das Problem lag wohl nicht an der uC-Implementierung, sondern in der C#
Bibliothek.
Ich nutze jetzt LibUsbDotNet mit der libusb-1.0.dll. Damit kann ich
problemlos auf das Gerät zugreifen und Lesen/Schreiben.
Falls es wen interessiert:
Geschwindigkeit Out (PC --> uC RAM): ~ 280kB/s (Ausbaufähig, jedes 64
byte Paket wird 2x kopiert)
Geschwindigkeit In (uC RAM --> PC): ~ 660kB/s
Das ganze ohne HAL/MBed etc.
Gruß
Kevin