Usb-Gerät Seriennummer im Gerätemanager anzeigen

Gast #2187491
Lesenswert?

Hallo zusammen,

ich habe folgendes Problem:

Ich benutze einen FX2LP USB Controller von Cypress (genauer: cy7c6813A), 
an dem ein externer EEPROM am I2C-Bus hängt.

Jetzt habe ich ein Programm geschrieben (Visual Studio 2010, C++), mit 
dem man seine eigene Vendor ID (VID) und Product ID (PID) eingeben kann 
und die in den EEPROM übernommen werden. Diese werden dann mit dem C0 
Load auch übernommen und nach anpassen der inf-datei werden VID und PID 
auch im Gerätemanager angezeigt. Ich benutze Windows XP.

Jetzt soll auch noch eine Seriennummer angezeigt werden, die zuvor 
eingegeben wurde. Eingeben und in den EEPROM schreiben funktioniert, 
aber ich habe keine Ahnung, wie ich die Seriennummer im Gerätemanager 
angezeigt bekomme. Deshalb meine Frage(n):

1: Ist das Überhaupt mit vertretbarem Aufwand möglich?
2: Wenn ja, wie geht´s, ich bin so langsam am Verzweifeln?

Vielen Dank schon mal im Vorraus
Gast #2187583
Lesenswert?

Richtig,

und ich soll \0000167C... aus dem EEPROM lesen und dann dahin schreiben.

Jetzt kenn ich mich zwar mit C/C++ einigermaßen aus, aber sobald es dann 
an
einen PC geht, bekomme ich Schwierigkeiten.

Ich habe auch versucht den sog. Device Descriptor zu manipulieren aber 
das hat auch nicht funkitoniert.
Gast #2187588
Lesenswert?

wastl schrieb:
> Jetzt soll auch noch eine Seriennummer angezeigt werden, die zuvor
> eingegeben wurde. Eingeben und in den EEPROM schreiben funktioniert,
> aber ich habe keine Ahnung, wie ich die Seriennummer im Gerätemanager
> angezeigt bekomme.

Wo Du die im Gerätemanager sehen kannst, weiß ich nicht. Du könntest 
aber z.B. mit USBDeview schauen, ob sie überhaupt übertragen wird. Dort 
wird sie dir auf jeden Fall angezeigt.
http://www.nirsoft.net/utils/usb_devices_view.html
Persönliche Seite #2187598
Lesenswert?

wastl schrieb:
> aber ich habe keine Ahnung, wie ich die Seriennummer im Gerätemanager
> angezeigt bekomme.

Wenn Dein USB-Device die Seriennummer als Seriennummer mitteilt, dann 
zeigt der Gerätemanager die Nummer an, so, wie ich das beschrieben habe.


> und ich soll \0000167C... aus dem EEPROM lesen und dann dahin schreiben.

Was meinst Du damit, "dahin schreiben"?
Gast #2187604
Lesenswert?

Sie wird nicht übertragen, was durchaus logisch ist, da beim C0 load nur 
die ersten 6 Byte (+Config Byte) übertragen werden.

Ich habe versucht, verschiedene Register des Controllers zu beschreiben 
aber das funktioniert nicht.
Ich verwende die USB2Dll von braintechnology. Daraus nehme ich die 
Funktionen
UsbEEpWriteByte() und
UsbEEpREadByte()

die den internen Speicher beschreiben (sollen). Ist das überhaupt 
richtig?
#2188061
Lesenswert?

Die Seriennummer im Gerätemanager wird bei der Initialisierung vom Host 
ausgelesen, und zwar über GetStringDescriptor. Das ist bei jedem USB 
Gerät so. Die muss also zum Zeitpunkt der Enumerarion im FX2 an der 
passenden Stelle stehen und die Deskriptoren müssen passen. Zur Laufzeit 
kann man die dann nicht mehr ändern oder wo anders her auslesen, es sei 
denn, man ändert den String Deskriptor und löst ein Renum aus. Wenn die 
von Windows nicht angezeigt wird, steht sie nicht an der richtigen 
Stelle, und/oder der Deskriptor passt nicht. Soweit ich das in 
Erinnerung habe, kann der einfache C0 Load keine SN mit übergeben. Wir 
laden die komplette Firmware aus dem EEPROM, das geht das, da kommt die 
Seriennummer mit in die desc.asm Datei rein. Wenn du nur den C0 Load 
machst und dann per USB Treiber die Firmware nachlädst, muss in der 
nachgeladenen Firmware die Seriennummer drin stehen, damit die beim 
Renum dann vom Host gelesen werden kann.
Gast #2188785
Lesenswert?

Die Seriennummer anzuzeigen wär nur ein nettes Feature gewesen.
Wichtig ist, dass, wenn mehrere Geräte mit dem FX2 Controller (inkl. 
EEPROM) diese per Programm unterscheidbar sind.

Werde jetzt also ein Programm schreiben, das die Anzahl der 
angeschlossenen Geräte erkennt und dann die jeweilige Seriennummer aus 
dem EEPROM liest (steht immer an der selben Addresse)
#2188965
Lesenswert?

Hm, von hinten durch die Brust ins Auge. Welche Firmware verwendet du 
denn für die Controller? Schreibst du die selber, oder nimmst du die 
fertige von Braintechnology?
Prinzipiell würd ich dir aber dringend raten, nicht den CyUSB Treiber zu 
benutzen. Der macht immer Probleme. Am besten Firmware selber machen 
(auf Basis des BulkLoop Beispiels ganz einfach). Und dann das Ding per 
WinUSB ansprechen. Das geht sehr einfach und vor allem zuverlässig. 
Außerdem ist der WinUSB Treiber schon signiert, kann man also auch 
problemlos unter X64 verwenden, ohne den WHQL Test machen zu müssen.
Gast #2189053
Lesenswert?

Hallo Christian,

ich probier gerade den C2 Load aus. Ich bin so weit, dass alles was in 
meinem EEPROM nach C2 steht, auch in den internen Speicher geschrieben 
wird. Allerdings hab ich folgendes NICHT verstanden:

Laut TRM folgt beim C2 load zuerst C2 dann VID/PID/DID dann Config Byte.
So weit so gut. Danach allerdings folgen zwei Byte, die angeben, wie 
groß der nächste Datenblock ist und auf diese zwei Byte folgen wieder 
zwei Byte die Startaddresse des Datenblocks angeben. Jetzt versteh ich 
nicht:

Ist die Startadresse die Adresse, unter der der Datenblock dann im 
internen RAM steht (tut er bei mir nicht) oder liest der Controller dann 
an der EEPROM-Addresse, die in Startaddresse liegt.

Weißt du, wo es Beispiele zum C2 load gibt?
Was ist das BulkLoop-Beispiel? Ich hab nämlich auch schon gemerkt, dass 
der
CyUsb-Treiber Probleme macht.

Schon mal danke im Vorraus
Gast #2190073
Lesenswert?

Mal eine vielleicht dumme Frage: CyConsole = Keil?
Ich verstehe auch nicht, wie ich das Bulkloop Beispiel abändern soll und 
in ein IIC File umwandeln kann (was ist hex2bix ?)

Ich habe mir das Beispiel angeschaut, und so wie ich das verstehe wird 
doch der Device Descriptor verändert, oder?
#2190099
Lesenswert?

CyConsole ist beim Entwicklerpaket (62MB) dabei. Außerdem im CyUSBSuite 
Paket, ebenfalls auf der Cypress Homepage. Damit kann man einfachen 
Datentransfer zu den CyUSB Treibern machen. Außerdem kann man die 
EEPROMs programmieren. Der Keil Compiler ist auch dabei und der erzeugt 
hex Files. Um die ins EEPROM zu programmieren ist im Cypress Ordner ein 
Tool namens hex2bix, das macht die IIC Files, und da kannst du auch 
angeben, ob C0 Load oder C2 Load, und das Config Byte zum Umschalten auf 
400kHz I2C Takt. BulkLoop ist da auch dabei bei Examples. Das ist 
einfach eine Firmware für den FX2, die alle Daten, die über den OUT 
Endpoint kommen, wieder an den IN Endpoint zurück schickt. Die kann man 
als Ausgangspunkt nehmen.
Frage ist, was außer der Seriennummer willst du denn damit überhaupt 
machen? Die Seriennummer musst du als zuzätzlichen String in der 
dscr.a51 hinzufügen, nach dem Muster der anderen Strings da drin.
zum Beispiel so:
1
StringDscr3:   
2
      db   StringDscr3End-StringDscr3      ;; Descriptor length
3
      db   DSCR_STRING
4
      db   'S',00
5
      db   '0',00
6
      db   '9',00
7
      db   '0',00
8
      db   '0',00
9
      db   '1',00
10
StringDscr3End:

Und oben beim DeviceDescriptor den noch eintragen:
1
...
2
db   1                    ;; Manufacturer string index
3
db   2                    ;; Product string index
4
db   3                    ;; Serial number string index
5
db   1                    ;; Number of configurations
Gast #2190179
Lesenswert?

Ich nochmal,

folgendes Problem: ich habe das von dem Link oben runtergeladen und 
installiert, und besitze nun folgendes:

Keil uVersion2
EZ-USB Control Panel SX2 IE Master

Keil kann ich öffnen, wenn ich den EZ-USB Control Pane. öffnen will 
erscheint folgendes:

"No Cypress USB device connected. You may plug in or install USB 
Devices."

Und das, obwohl ich den CyUsb Treiber verwende und das Gerät im 
Gerätemanager auch erkannt wird
#2190296
Lesenswert?

Das EzControl Panel ist für den alten ezusb.sys Treiber. Lade dir mal 
das Paket runter: http://www.cypress.com/?rID=34870 da ist die CyConsole 
und der aktuelle CyUSB Treiber drin.

Und wie, außer Seriennummer willst du nix machen? Zu irgendwas muss der 
FX2 Chips ja in deiner Anwendung da sein, im Normalfall Datentransfer? 
Weil wenn du jetzt die proprietäre usb2.dll von Brain nimmst, kannst du 
die nicht ändern, die rücken ja den Quellcode nicht raus. Du müsstest 
dir dann schon eine eigene Software machen und über die CyAPI drauf 
zugreifen...
#2190762
Lesenswert?

Achso, na wie gesagt, da kommts drauf an, ob ihr die komische 
Frickel-DLL von Brain Technology nehmt, oder die CyAPI, bzw. ob ihr die 
Firmware für den Controller selbst schreibt. Aus deinen Posts hört sich 
das eher so an, als ob ihr das Brain zeug für den Datentransfer nehmt. 
Dann kannst du meines Wissens auch nachträglich keine Seriennummer 
direkt in den USB Device Descriptor einfügen, wweil du keine Quellcodes 
hast.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren