Hallo,
wir müssen für ein Hardware-Projekt kurzfristig ein Angebot abgeben.
Das zu entwickelnde Gerät kommuniziert über eine USB-Schnittstelle mit
einem Windows-PC. Wir haben zwar die Ressourcen, uns in die Problematik
einzuarbeiten, momentan fehlt uns aber schlicht der Überblick, mit
welchem USB-Device-Controller wir für ca. die nächsten 5 Jahre
einigermaßen zukunftsfest sind.
Der Controller muss Interrupt-Transfer mit Hi-Speed-Übertragung
beherrschen. Vom Hersteller, und das ist der eigentliche Knackpunkt,
sollte ein nach neuen MS-Richtlinien zertifizierter Windows-10-Treiber
mitgeliefert werden. Es müssen allerdings auch Treiber für Windows 7 und
8 verfügbar sein.
Gibt es dazu Erfahrungen im Forum?
Vielen Dank,
Lutz
Lutz schrieb:> Vom Hersteller, und das ist der eigentliche Knackpunkt,> sollte ein nach neuen MS-Richtlinien zertifizierter Windows-10-Treiber> mitgeliefert werden. Es müssen allerdings auch Treiber für Windows 7 und> 8 verfügbar sein.
Da kommt es doch sehr darauf an, was das zu entwickelnde Gerät
eigentlich für Daten übertragen soll.
Wenn es in eine Geräte-Klasse passt, die von Windows sowieso schon
unterstützt wird, benötigt man überhaupt keinen zusätzlichen Treiber.
Ins Gerät werden in Quasi-'Echtzeit' Datensätze geschrieben. Maximal
müssen pro ms ca. 2kB (20 Sätze zu 100 Bytes) übertragen werden. Die
Verarbeitung der Datensätze wird vom Gerät bestätigt, d.h Rückmeldung
an PC. Hinzu kommen asynchron vom Gerät generierte Events, die an den PC
zurückgemeldet werden.
Ich weiß nicht, ob die allgemeine Beschreibung schon ausreicht.
Lutz
Das sind eine ganze Menge Daten, und da wird man um einen eigenen
Treiber nicht herumkommen.
Evtl. mal mit einem Treiberspezialisten in Kontakt treten (z.B. Fa.
Thesycon).
Controller gibt's für solche Aufgaben jedenfalls wie Sand am Meer.
In Zeiten von WinUSB und LibUSB ist der Bedarf an
Kerneltreiberprogrammierung heutzutage gering.
Ich würde auch eher versuchen, eine Standard-USB Geräteklasse zu
verwenden und dewegen genau KEINE extra USB Bridge von FTDI, SiLabs usw
verwenden. Mit Standard-USB-Geräteklassen brauchst Du nämliche keine
extra Treiber mehr, weil die schon beim Betriebssystem dabei sind.
fchk
Frank K. schrieb:> Viele Microcontroller
... können nur Full Speed.
Lutz schrieb:> Vom Hersteller, und das ist der eigentliche Knackpunkt, sollte ein> nach neuen MS-Richtlinien zertifizierter Windows-10-Treiber> mitgeliefert werden. Es müssen allerdings auch Treiber für Windows 7> und 8 verfügbar sein.
Da ist die einfachste Lösung ein Treiber, den Microsoft schon
mitliefert, also WinUSB
(https://msdn.microsoft.com/en-us/library/windows/hardware/ff540196.aspx).
Alternativ irgendein separater USB/seriell-Konverter-Chip, z.B. FT232H
(macht die Hardware teurer, aber spart die USB-Firmware-Entwicklung).
Frank K. schrieb:> Mit Standard-USB-Geräteklassen brauchst Du nämliche keine> extra Treiber mehr, weil die schon beim Betriebssystem dabei sind.
Da kommst du halt an Grenzen.
Die Controlpipe kann max. 64 bytes pro ms, mit HID gehen glaube ich bis
zu 1023 bytes pro ms.
TO benötigt aber schon das Doppelte davon...
Sind die Datensätze voneinander abhängig d.h. gibt es folgenden Ablauf:
Anfrage1 (PC->Device)
Antwort1 (Device->PC)
Anfrage2 (PC->Device)
Antwort2 (Device->PC)
...
wobei Anfrage2 erst (oder überhaupt nur) ausgeführt wird,
wenn Antwort1 vom PC empfangen wurde?
Echtzeitanforderungen im EInstelligen ms Bereich oder gar im usec
Bereich vertragen sich nicht so toll mit USB, nocht nicht mal mit
USB-HS.
Schon mal ueber die Moeglichkeit nachgedacht die gesammelten Daten vor
Ort mit einer MCU teilweise zu bearbeiten und dann mit niedrigen
Echtzeianforderungen stressfrei den USB zu nutzen? Nur so ein Gedanke.
Die schnelleren M4 Derivate von ST, NXP, Atmel und neuerdings auch
Renesas bieten USB-HS
Robert
Ich kann auch nur dringend empfehlen auf WinUSB oder LibUSB zu gehen.
Wenn nur Windows das Ziel sein soll dann eher Winusb. Der ist in jedem
Windows seit XP dabei und wird von MS gepflegt. Da kannst du jeden
beliebigen Device Controller dran machen. Wir setzen den ohne Probleme
mit dem FX2 und auch dem FX3 von Cypress ein.
Vielen Dank erst einmal für die Antworten.
Ich werde mich nochmal mit WinUSB beschäftigen, vielleicht können wir
mit den Standardtreibern doch das Problem schon lösen.
@A. Horn
Die Bestätigung benötigen wir eigentlich nur, um die Laufzeit zu messen.
D.h. jeder Datensatz erhält eine lfd. Nummer, die Datensätze werden
nacheinander übertragen. Anhand der Antwort, die wieder die jeweilige
laufende Nummer enthält, können wir die Lauf- + Verarbeitungszeit
messen.
So haben wir es jedenfalls beim Vorgänger des neu zu entwickelnden
Gerätes gemacht. Der dort verwendete USB-Controller ist abgekündigt, und
der dazu gehörende Treiber ist nicht Windows10-konform.
Lutz