Forum: Mikrocontroller und Digitale Elektronik usb serial Win7 64bit welches INF-file nehmen


von Matthias W. (matt007)


Lesenswert?

es geht um die Inbetriebnahme eines 32u4-Boards unter Win7 64bit. Auf 
dem Board läuft usb_serial.c von Paul Stoffregen. Im Gerätemanager 
taucht ein USB-Gerät auf mit gelbem Rufzeichen. Es fehlt der passende 
Treiber.

Frage: Welchen Treiber soll ich passend zu Win7 64bit nehmen? Hat jemand 
einen Link zu einem passenden INF-file?

von c-hater (Gast)


Lesenswert?

Matthias W. schrieb:

> es geht um die Inbetriebnahme eines 32u4-Boards unter Win7 64bit. Auf
> dem Board läuft usb_serial.c von Paul Stoffregen. Im Gerätemanager
> taucht ein USB-Gerät auf mit gelbem Rufzeichen. Es fehlt der passende
> Treiber.
>
> Frage: Welchen Treiber soll ich passend zu Win7 64bit nehmen? Hat jemand
> einen Link zu einem passenden INF-file?

Blöde Frage. Zeigt, dass du eigentlich keine Ahnung von der Sache hast 
und somit eigentlich nicht ermächtigt wärst, überhaupt irgendwas mit USB 
zu machen.

Also: Windows7 erwartet ein *.inf-File, in dem eine passende HardwareID 
als unterstützt angeboten wird. Sprich: du musst einfach nur 
rauskriegen, mit welcher HW-ID sich das Gerät bei Windows meldet (das 
macht man, indem man den Gerätemenager benutzt) und die dann in 
irgendein *.inf-File schreiben, welches letztlich nur den generischen 
Treiber für serielle USB-Geräte lädt. Dafür kannst du unzählige Vorlagen 
finden. Z.B. all das, was als Treiber für Programmieradapter mit 
STK500v2-kompatibler Schnittstelle agiert. Aber auch viele andere Geräte 
haben nur genau sowas. Die Auswahl an geeigneten Vorlagen ist also 
riesengroß.

von Frank K. (fchk)


Lesenswert?

http://ww1.microchip.com/downloads/en/DeviceDoc/MCP2221%20Windows%20Driver%202014-10-09.zip

Dann suchst Du Dir eine VID/PID-Kombination aus dem .inf und packst die 
in Deinen AVR-Sourcecode, compilierst und flashst neu.

Du änderst auf gar keinen Fall die .inf. Dann wird nämlich das 
zugehörige Microsoft-Zertifikat im zugehörigen .cat ungültig, und dann 
lädt Windows den Treiber nicht mehr ohne Verrenkungen.

fchk

von c-hater (Gast)


Lesenswert?

Frank K. schrieb:

> Du änderst auf gar keinen Fall die .inf. Dann wird nämlich das
> zugehörige Microsoft-Zertifikat im zugehörigen .cat ungültig, und dann
> lädt Windows den Treiber nicht mehr ohne Verrenkungen.

Das gilt nicht für Windows7. Da ist das noch kein Problem. Und Windows10 
will eh' niemand, der noch alle Latten am Zaun hat.

von Thomas Z. (usbman)


Lesenswert?

Matthias W. schrieb:
> usb_serial.c von Paul Stoffregen
kenn ich nicht

Matthias W. schrieb:
> Im Gerätemanager taucht ein USB-Gerät auf mit gelbem Rufzeichen.
dafür kann es verschiedene Ursachen geben. Enumeriert das Device? Prüf 
das mit UsbView. W7 sollte ein Std konformes CDC Device von alleine 
finden.

Ansonsten hilft Zadig.

Thomas

von Rudolph R. (rudolph)


Lesenswert?

Das ist also ein Teensy 2.0 - warum fragst Du nicht mal bei PJRC nach?

von c-hater (Gast)


Lesenswert?

Thomas Z. schrieb:

> W7 sollte ein Std konformes CDC Device von alleine
> finden.

Nein. Windows7 hat keinen class driver für USB-ACM. Oder vielmehr: hat 
ihn schon, benutzt ihn aber nicht in diesem Sinne. Nö, das will schön 
exakt die kompatiblen Hardware-IDs in irgendeiner *.inf sehen. Für jedes 
verschissene Device extra.

von Matthias W. (matt007)


Lesenswert?

c-hater schrieb:
> Windows7 erwartet ein *.inf-File, in dem eine passende HardwareID
> als unterstützt angeboten wird. Sprich: du musst einfach nur
> rauskriegen, mit welcher HW-ID sich das Gerät bei Windows meldet

das kann ich auslesen, kein Problem !

von Matthias W. (matt007)


Lesenswert?

Frank K. schrieb:
> Dann suchst Du Dir eine VID/PID-Kombination aus dem .inf und packst die
> in Deinen AVR-Sourcecode, compilierst und flashst neu.

Danke für den Hinweis Frank !

von Matthias W. (matt007)


Lesenswert?

Thomas Z. schrieb:
> Ansonsten hilft Zadig.

Danke !

Zadig hatte ich mal verwendet. War etwas seltsam im Verhalten weil es 
lange dauerte und nicht sauber beendete - ging dann aber doch. Danke für 
den Hinweis. Ich hatte das Tool schlicht mittlerweile vergessen !

von Matthias W. (matt007)


Lesenswert?

Rudolph R. schrieb:
> Das ist also ein Teensy 2.0 - warum fragst Du nicht mal bei PJRC nach?

jein. Es ist ein ProMicro-Board für 3.5€ aus China. Auf der Seite von 
PJRC fand ich auf die Schnelle einfach kein INF.

ich habe ein zip von der Seite wo die c-Dateien drin sind und die Header 
- aber das INF eben nicht.

bei LUFA ist ein INF im Verzeichnis dabei - nur weiß ich nicht ob ich 
das nehmen soll.

von Stefan F. (Gast)


Lesenswert?

Matthias W. schrieb:
> bei LUFA ist ein INF im Verzeichnis dabei - nur weiß ich nicht ob ich
> das nehmen soll.

Probiere es doch einfach aus.

von Matthias W. (matt007)


Lesenswert?

Stefanus F. schrieb:
> Probiere es doch einfach aus.

ok. Ich probier es morgen !

von Matthias W. (matt007)


Lesenswert?

c-hater schrieb:
> du musst einfach nur
> rauskriegen, mit welcher HW-ID sich das Gerät bei Windows meldet

bei Eigenschaften von USB Serial steht:
USB\VID_16C0&PID_047A&REV_0100

die Datei LUFA USBtoSerial.inf alleine hilft nicht:

im Fenster Treibersoftware aktualisieren - USB Serial steht dann:
USB Serial konnte nicht installiert werden
Die Treibersoftware für das Gerät wurde nicht gefunden.
Wenn Sie den Hersteller...

viele werden das wohl in der Arduino-Umgebung probieren. Da wird ein 
Treiber wohl gefunden werden. Ich nehme jedoch WinAVR.

: Bearbeitet durch User
von Matthias W. (matt007)


Lesenswert?

ich habe es endlich wieder im Netz gefunden:
die von mir genutzten Dateien usb_serial.c und usb_serial.h aus USB 
Serial, Version 1.7 sind in www.pjrc.com/teensy/usb_serial.html

dabei steht: WARNING: obsolete, use Teensyduino for new projects.

ich habe den C-Code in mein Projekt mittels Makefile eingebunden.

als Windows-Treiber kann man dies herunterladen: Windows Driver 
Installer. Dahinter liegt eine Datei serial_install.exe.

das werde ich erst mal versuchen.

von Matthias W. (matt007)


Lesenswert?

in der Datei usb_serial.c steht:
#define VENDOR_ID          0x16C0
#define PRODUCT_ID         0x047A

von Thomas Z. (usbman)


Lesenswert?

Matthias W. schrieb:
> als Windows-Treiber kann man dies herunterladen: Windows Driver
> Installer. Dahinter liegt eine Datei serial_install.exe.

Du machst es genau richtig... Damit holst du dir mit Sicherheit 
unerwünschte Programme auf den Rechner. Ich glaube c-hater hatte Recht. 
Du solltest die Finger von USB lassen solange du nicht weißt was du 
tust.

Ich versteh immer noch nicht was dir an zadig nicht gefällt.

Thomas

von Matthias W. (matt007)


Lesenswert?

Thomas Z. schrieb:
> Damit holst du dir mit Sicherheit
> unerwünschte Programme auf den Rechner.

das sehe ich nicht so Thomas.

das ist doch genau der Mann der dieses Programm zu dem ich den passenden 
Treiber suche ins Netz gestellt hat. Warum soll ausgerechnet er ein 
unerwünschtes Programm auf seiner Seite posten? Das macht doch gar 
keinen Sinn !

Sein Geschäftsmodell ist es doch Platinen zu entwickeln und zu verkaufen 
- in Verbindung mit dazu passender Software die keinen Ärger macht - 
denn sonst zerstört er sein eigenes Geschäftsmodell. Das will er mit 
Sicherheit nicht.

von Matthias W. (matt007)


Lesenswert?

Thomas Z. schrieb:
> was dir an zadig nicht gefällt.

das habe ich oben geschrieben. Natürlich kann ich es ein weiteres Mal 
probieren.

von pumuggl (Gast)


Lesenswert?

Was macht man eigentlich mit HID-Geräten die eigentlich ja
keinen besonderen Treiber brauchen, aber die Seriennummer
im USB-Deskriptor einkodiert haben?

Ich habe einfach die Seriennummer in die inf-Datei gemogelt
und dann im Testsigningmodus installiert.
Weil natürlich das Zertifikat nicht mehr passte.

von Thomas Z. (usbman)


Lesenswert?

pumuggl schrieb:
> Was macht man eigentlich mit HID-Geräten die eigentlich ja
> keinen besonderen Treiber brauchen, aber die Seriennummer
> im USB-Deskriptor einkodiert haben?
>
> Ich habe einfach die Seriennummer in die inf-Datei gemogelt
> und dann im Testsigningmodus installiert.
> Weil natürlich das Zertifikat nicht mehr passte.

Die Seriennummer ignorieren. HID ist ein Classdriver die brauchen keine 
SN.
Die SN dient unter win dann nur dazu damit win erkennen kann, dass die 
Treiber schon mal (für einen anderen USB Port) installiert wurden. Win 
startet dann den Treiber Dialog nicht mehr. Das das leider das etwas 
seltsame Verhalten unter win bei USB Treiberinstallationen.
Meins Wissens ist die SN zwingend nur bei Memory Devices vorgeschrieben.
Bei CDC kann man mit der SN erreichen, dass immer der gleiche Com Port 
benutzt wird egal an welchem USB Port das Device hängt.

Thomas

von pumuggl (Gast)


Lesenswert?

> Die Seriennummer ignorieren.

Ja, dann ignoriert W aber auch das angeschlossene Gerät
oder ist maulig das es keine passenden Treiber für das
Gerät gäbe.
Ich habe mich da auch täuschen lassen.
Es gibt doch noch ein sys-File, also einen Treiber.
Also kein HID. Tschuldigung.

Mit der SN im inf-File klappt die Installation und
das angeschlossene Gerät funktioniert auch.

Aber danke für die Auskunft.

von c-hater (Gast)


Lesenswert?

pumuggl schrieb:

> Was macht man eigentlich mit HID-Geräten die eigentlich ja
> keinen besonderen Treiber brauchen, aber die Seriennummer
> im USB-Deskriptor einkodiert haben?

Einfach nichts.

Entweder ist's ein von Windows direkt unterstütztes HID-Gerät, dann 
kümmert sich Windows selber um alles weitere (und die Seriennummer ist 
praktisch Wurscht).

Oder das ist halt nicht der Fall, dann ist es Aufgabe der Anwendung, die 
das Device über's HID-API benutzen möchte, irgendwas mit der 
Seriennummer anzufangen. Sie kann die für irgendwas benutzen, sie kann 
sie aber auch genauso weitgehend ignorierieren, wie Windows das für 
unterstützte Standardgeräte tut.

Die normale Verwendung von Windows selber ist: Hat ein Gerät eine 
Seriennummer, wird diese zur Identifikation des Exemplars genutzt. Hat 
es keine, wird statt dessen die Busadresse benutzt.

Sinnvoll ist, wenn eigene Handler das genauso halten.

Noch sehr viel sinnvoller ist: Wenn man in eigenen Devices eine 
Seriennummer verfügbar macht, dann sollte diese auch wirklich eindeutig 
sein...

von Thomas Z. (usbman)


Lesenswert?

pumuggl schrieb:
> Ja, dann ignoriert W aber auch das angeschlossene Gerät
> oder ist maulig das es keine passenden Treiber für das
> Gerät gäbe.

Das widerspricht allem was ich bisher über inf Dateien und 
Treiberinstallationen unter win gesehen habe.
USB Treiber werden über das vid/pid Combo per inf geladen. In einigen 
seltenen Fällen noch über die Revision (Device Version im Deskriptor).
Mir ist auch gar nicht bekannt wie man die SN in ein inf bekommen 
könnte.

Kannst du dazu mehr sagen? Das würde mich schon interessieren.

Thomas

von pumuggl (Gast)


Angehängte Dateien:

Lesenswert?

> wie man die SN in ein inf bekommen könnte.
Z.B. mit einem Editor.

Aus dem geänderten inf-File:
1
; Blackhawk USB560/USB560M/USB560BP JTAG Emulator
2
%bh560usb.DeviceDesc% = bh560usb.Dev, USB\VID_0B1E&PID_8007&REV_0100
3
%bh560usbm.DeviceDesc% = bh560usb.Dev, USB\VID_0B1E&PID_8007&REV_0200
4
%bh560usbml.DeviceDesc% = bh560usb.Dev, USB\VID_0B1E&PID_8007&REV_0201
5
%bh560ubp.DeviceDesc% = bh560usb.Dev, USB\VID_0B1E&PID_8007&REV_0300
6
%bh560usbm.DeviceDesc% = bh560usb.Dev, USB\VID_0B1E&PID_8007&REV_0400
7
%bh560usbm.DeviceDesc% = bh560usb.Dev, USB\VID_0B1E&PID_8007&HD1111
8
%bh560usbml.DeviceDesc% = bh560usb.Dev, USB\VID_0B1E&PID_8007&REV_0401

Die Zeile mit: USB\VID_0B1E&PID_8007&HD1111
macht den Unterschied. Sonst mag er den Treiber nicht.
Aber ich muss mich ja nicht beklagen. Alles funktioniert soweit.

von Matthias W. (matt007)


Lesenswert?

das Installieren mit serial_install.exe hat geklappt. Das gelbe 
Warnzeichen im Gerätemanager ist weg. Es meldet sich Teensy USB Serial 
(COM5).

So weit so gut. Nur leider gelingt es bisher scheinbar nicht Zeichen 
über USB auszugeben. Entweder stimmt die Baudrate nicht oder es kommt 
nichts.

Über die normale serielle Schnittstelle kann ich Ausgaben machen und mit 
hterm anzeigen lassen. Über USB geht bisher nichts.

Die Programmierung über USB per AVRDUDE geht. Dazu muss man Reset 
drücken und warten bis sich der Bootloader auf COM4 meldet und dann 
AVRDUDE starten bevor COM4 wieder verschwindet.

Wie bekomme ich nun die USB-Ausgabe zum Laufen?

von Stefan F. (Gast)


Lesenswert?

Matthias W. schrieb:
> Wie bekomme ich nun die USB-Ausgabe zum Laufen?

Erstmal einen Loop-Back Test mit Terminalprogramm machen.
Siehe 
http://stefanfrings.de/mikrocontroller_buch2/Einblick%20in%20die%20moderne%20Elektronik.pdf 
Kapitel 6

von Matthias W. (matt007)


Lesenswert?

Stefanus F. schrieb:
> Erstmal einen Loop-Back Test mit Terminalprogramm machen.

Danke für den Link Stefanus !
ich schau in die Datei mal rein.

Loop-Back verstand ich so daß man Sender und Empfänger verbindet und so 
sehen kann ob das was man gesendet hatte auch ankommt.

bei der seriellen Schnittstelle und beim FTDI-board kann ich das machen. 
Aber wie bei USB? das ist mir momentan nicht klar.

der Code von www.pjrc.com/teensy/usb_serial.html ist ja kein Hexenwerk. 
Ich nutze die beiden Dateien usb_serial.c und das .h dazu. Dazu gibt es 
noch eine out-Funktion die zur Ausgabe usb_serial_putchar(c) verwendet. 
Eben da kommt nichts. Auch usb_serial_putchar_nowait(c) klappt nicht.

da wird irgendwo ein Fehler sein. Nur eben wo. Es ist mein erster 
Versuch mit solchem USB-Kram. Auf eine eigene lange Erfolgsgeschichte 
damit kann ich nicht bauen.

von Stefan F. (Gast)


Lesenswert?

Matthias W. schrieb:
> Loop-Back verstand ich so daß man Sender und Empfänger verbindet und so
> sehen kann ob das was man gesendet hatte auch ankommt.

genau

> bei der seriellen Schnittstelle und beim FTDI-board
> kann ich das machen. Aber wie bei USB?

Ach so. Sorry, ich habe zwei Threads durcheinander geworfen. Dachte, 
dein Mikrocontroller wäre als USB-UART programmiert, also mit 
herausgeführten Rx und Tx Pins.

Wenn nicht, müsste der Loop-Back per Software implementiert werden. 
Alles was die Firmware vom USB Port empfängt, schickt sie wieder zurück.

Ich denke, dass die Baudrate in diesem Fall keine Rolle spielt.

von Erwin D. (Gast)


Lesenswert?

c-hater schrieb:
> Für jedes verschissene Device extra.

Kannst du deine grundlose Fäkalsprache bitte zu Hause lassen?

von Matthias W. (matt007)


Lesenswert?

Stefanus F. schrieb:
> Sorry, ich habe zwei Threads durcheinander geworfen.

das kann passieren - trotzdem Danke für den Willen zu helfen.

> Dachte,
> dein Mikrocontroller wäre als USB-UART programmiert, also mit
> herausgeführten Rx und Tx Pins.

nein. Ich will das USB-Interface des 32u4 zur Ausgabe nutzen - so wie es 
das Beispielprogramm von Paul Stoffregen macht.

> Wenn nicht, müsste der Loop-Back per Software implementiert werden.
> Alles was die Firmware vom USB Port empfängt, schickt sie wieder zurück.
> Ich denke, dass die Baudrate in diesem Fall keine Rolle spielt.

es sollte kein Hexenwerk sein das Beispiel zum Laufen zu bekommen. Hier 
ist nicht mehr der richtige Ort das zu diskutieren weil das INF-Thema ja 
gelöst ist. Ich mach einen neuen Thread für das USB-Thema auf.

Danke Dir und Euch für die Beiträge !

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
Noch kein Account? Hier anmelden.