Hallo Zusammen, ich habe min. 2 FT232R über ein USB-HUB an den Rechner angeschlossen. Alles tuts... Allerdings nervt es mich, dass im Gerätemanager immer der Eintrag USB Serial Port xxx steht und man dem Gerät nicht einen eindeutigen Namen geben kann. Gibt es eine Möglichkeit, diese Namen individuell im Chip einzustellen? Mit Mprog bin ich am Gange, aber irgendwie bringt mir die Bezeichnung nix, wenn die nur bei der Installation einmal aufpoppt und im Gerätemanager steht nicht genau dieser Eintrag, sondern USB Serial Port xxx... Welche .ini oder .inf ist dafür verantwortlich? Ich verwende den orginal Kombitreiber von ftdi. Ist es möglich, einen abgewandelten Treiber zu schreiben, der im Gerätemanager, je nach Seriennummer des FTDI´s einen eigenen DeviceString anzeigt? Kennt jemand Links zu dieser Problematik? danke und gruß Spice
Hallo, Du musst die inf Dateien der Treiber ändern. Der Treiber ist dann allerdings nicht mehr zertifiziert. Genaueres gibts als PDF bei FTDI. Stefan
Das ginge schon, wenn du den Qualifier im inf für jede Seriennummer einzeln beschreibst. Ist aber unsauber und sowas macht man nicht. Und wie schon geschrieben, ist die Signierung dann hinüber.
>> und sowas macht man nicht Na, ja laut FTDI schon : snip ----------------------------------------------------------------- Hello, We have allocated 8 PIDs to you from XXXX to XXXX (hex). The PIDs must be used with VID 0403. To reprogram the EEPROM use FT_PROG. http://www.ftdichip.com/Resources/Utilities/FT_Prog.zip http://www.ftdichip.com/Resources/Utilities/FT_PROG_README.TXT NOTE 1: Editing the driver for your new identity will invalidate any current driver certification. NOTE 2: It will be necessary for you to maintain your own edited driver release for distribution to your customers. snip ----------------------------------------------------------------- Die PIDs kann man sich ausdenken zur Sicheheit kann man auch noch die VID ändern damit man nicht mit anderen FTDI Geräten in Konflikt kommt, es geht hier ja wohl um ein paar einzelne Geräte für privat! Stefan
Spice schrieb: > Allerdings nervt es mich, dass im Gerätemanager immer der > Eintrag USB Serial Port xxx steht und man dem Gerät nicht einen > eindeutigen Namen geben kann. Hallo, da hat sich einfach nichts geändert, die Schnittstellen hiessen früher COM1 bis COMn, und das ist immer noch so - du musst dir ja nur die Nr. der COM-Schnittstelle merken, das war noch nie anders, und eigentlich sollten ja auch alle solchen Schnittstellen gleichwertig sein. In Linux kannst du meines Wissens für Schnittstellen auch Aliasnamen vergeben wie "GPS-Interface" usw., aber bei Windows wird das nicht gehen und wenn findet die Software womöglich keine Schnittstellen mehr. Gruss Reinhard
Stefan schrieb: > Die PIDs kann man sich ausdenken zur Sicheheit kann man auch noch die > VID ändern damit man nicht mit anderen FTDI Geräten in Konflikt kommt, > es geht hier ja wohl um ein paar einzelne Geräte für privat! Naja, bei max. 8 Geräten mag das gehen, aber der Fragesteller hat nach der Seriennummer gefragt. Das ginge auch, aber die COM-Namen heißen dann trotzdem COM 1 bis COM x. Außerdem ist auch die Signatur futsch, wenn man die PID ändert. Normalerweise identifiziert man die über die Software. Meine Software für die FTDI basierten Serial-Wandler lokalisiert den passenden virtuellen COM Port über die Registry anhand der eindeutigen Seriennummer. Das ist sehr leicht zu programmieren.
Wenn man sich auf diese Treiberfummelei nicht einlassen will, kann man in die Firmware seines Zielgerätes eine "Whats-your-serial-number"-Funktion implementieren, meinetwegen auch Verschlüsselt. Die Software am Rechner klappert nacheinander alle Com-Ports ab und fragt die Geräte danach. Wo nicht das richtige kommt, ist wohl nicht "dein" Gerät. mfg mf
Hallo, Sicher heißen die Ports dann noch COMX währe ja sonst auch blöd. Aber im Gerätemanager steht dann <mein neuer Name (COMX)> Damit kannst Du dann auch mehre Geräte auf den gleichen COM legen und siehst dann welches angesteckt ist. Dazu muss man weder PID noch VID im FTDI ändern, kann aber. Man braucht aber nicht für jedes Gerät eine registrierte PID! Die Strings die im Gerätemanager auftauchen in der inf suchen und ändern. Dann den Treiber überinstallieren. Next device - same procedure. Es ging nur darum ob man sowas so macht und da schließt sich FTDI meiner Meinung an ;-) Wenns darum geht Geräte aus einer eigenen Software zu identifizieren würde ich auf jeden Fall die D2XX Schnitstelle benutzen dann brauchts keinen COM. Stefan
Mini Float schrieb: > Die Software am Rechner klappert nacheinander alle > Com-Ports ab und fragt die Geräte danach. Hallo, das ist viel zu riskant. Du kannst niemals wissen wie ein fremdes Gerät auf deine Abfragesequenz reagiert. Die Erkenntnis, das das so nicht geht, ist schon so alt wie die serielle Schnittstelle, da war selbst Microsoft trotz der eingebildeten Weltherrschaft genötigt, bei Bedarf das Suchen nach einer Maus an allen Anschlüssen zu unterbinden. U.a. wurde dadurch manchmal die Notstromversorgung abgehängt, oder ein Modem wählte Neuseeland an. Gruss Reinhard
Hallo Reinhard, kann man Windows das suchen und erkennen einer seriellen Maus generell oder ab einem bestimmtem Port verbieten? Wenn ich neues USB Gerät egal ob anstecke und der Controller ist gerade in Plauderlaune dreht mein Windows durch und denk es ist eine Maus. Im Gerätemanager wird dann eine seielle Maus angezeigt. Ein zwei mal ist's ja lustig aber auf Dauer. Stefan
Hallo Zusammen, vielen Dank für die zahlreichen Antworten. Nachdem ich nun ein wenig rumprobiert habe, werden die FTDI´s mit den neuen PIDs wieder erkannt :-) Ich beschreibe mein Problem mal ausführlicher... Ich habe an einem USB Hub 2 FT232´s hängen, welche mit verschiedenen PIDs versehen sind. Kurzzeitig konnte ich mit den Treibern, die bereits installiert waren nicht mehr auf die FTDIs zugreifen und Mprog auch nicht, aber nachdem ich die .inf editiert habe (ich glaube die FTD2xx.inf), werden die nun auch wieder "erkannt". Mein Problem ist nun, dass wenn ein dritter FT232 mit standartwerten im EEPROM angeschlossen wird, dieser zwar richtig erkannt wird und der VCP Treiber geladen wird, wobei bei den anderen beiden, die über den HUB angeschlossen sind und eine andere PID haben, der FTD2xx treiber geladen wird und ich keine COM-Schnittstelle sehe. Bevor ich im EEPROM rumprobiert habe, konnte ich im GeräteManager beiden USB-Geräten auswählen, dass "VCP aktiviert" werden soll, dann lief alles und die COM Schnittstellen wurden erkannt, jedoch haben sich die FTDI´s untereinander leicht verhaspelt und darum würde ich im GeräteManager gerne verschiedene Namen für diese beiden Geräte vergeben, welche ich in die Treiber.inf eintrage... Meine Frage ist nun, wie bekomme ich es hin, dass die beiden FTDI´s wieder den VCP Treiber laden und ein COM-Port zur Verfügung stellen und welche Dateien muss ich wo editieren, dass die neuen PIDs auch wieder erkannt werden und der VCP Treiber geladen wird? Ich habe im EEPROM der FTDI´s die Seriennummer abgeschaltet gehabt. Es geht quasi darum, dass sich die beiden FTDI´s am HUB wie zwei COM-Ports verhalten, im GeräteManager allerdings für diese beiden Geräte nicht USb Serial Converter COM xx steht, sondern zum Beispiel DebugSerielle COM xx und RS232 COM xx, damit ich diese beiden Geräte untereinander und von dem anderen COM-Port geraffel unterscheiden kann. Besten Dank nochmal an alle Gruß Spice
Ich verwende die Microchip MCP2200 USB-Seriell-Chips, weil diese keine proprietären Binärtreiber brauchen, sondern die Standard USB CDC Klasse implementieren, und den Treiber hat jedes Betriebssystem einfach so eingebaut. Windows will nur noch ein .inf haben. Mit dem Standard-Inf steht da zwar immer noch "USB Serial Port" (das läßt sich im Inf ändern), aber unter Eigenschaften finde ich den String, den ich mit dem Konfigurationstool in den Chip hineingeschrieben habe. Funktioniert das bei Dir nicht? Programmtechnisch kannst Du diesen String mit der Setup API abfragen. Ansonsten schwenke auf echte USB-Controller um, die Du z.B. per HID ansteuerst. Dann hast Du zumindest das Problem nicht mehr. fchk
hier nochmal ein Bilchen um das Problem zu verdeutlichen...
Zeig mal die Eigenschaftsseite des Devices. fchk
Soweit ich weiß, ist das eine Konfigurationsoption im EEPROM, welcher Treiber geladen wird, mit FT_Prog einstellbar. Übrigens: Wenn man die FTDI-Bibliothek (DLL) benutzt, kann man die Ports auch mit Namen oder Seriennummern ansprechen.
Hi, ich programmiere den ID-String des FT232 wie im folgenden c# Code gezeigt, um und kann dann mit
1 | if (ftdi.OpenByDescription (Description) == FTDI.FT_STATUS.FT_OK) |
2 | {
|
3 | |
4 | ...
|
5 | |
6 | ftdi.Close (); |
7 | }
|
auf den passenden Chip zugreifen.
1 | using System.IO; // File.<xyz> |
2 | using System.Reflection; // Assembly |
3 | using System.Diagnostics; // FileVersionInfo |
4 | using System.Threading; // Thread.Sleep |
5 | |
6 | using FTD2XX_NET; // Copy FTD2XX_NET.dll & .XML to project and add via "Add Reference". |
7 | |
8 | |
9 | namespace Production_Tool |
10 | {
|
11 | public partial class frmMain: Form |
12 | {
|
13 | |
14 | ...
|
15 | |
16 | /// <summary> Enumeration to indicate the different connection states of the FT232 chip. </summary>
|
17 | public enum eFTstate |
18 | {
|
19 | DISCONNECTED = 0, // No connection available |
20 | UNPROGRAMMED, // Connected to an unprogrammed FT232 |
21 | UNKNOWN, // Connected to a programmed FT232 with unknown signature |
22 | CONNECTED // Connected to xxyyzz board |
23 | };
|
24 | |
25 | ...
|
26 | |
27 | // Different ID-strings of unprogrammed and programmed FT232 chips.
|
28 | public const string IDStringXYZ = "XYZ "; |
29 | public const string IDStringOrg = "FT232R USB UART"; |
30 | public string IDStringLast = ""; |
31 | |
32 | ...
|
33 | |
34 | public eFTstate USBState = eFTstate.DISCONNECTED; |
35 | |
36 | private FTDI ftdi = new FTDI (); |
37 | |
38 | ...
|
39 | |
40 | /// <summary>
|
41 | /// Check the programming of the first available FT232 chip.
|
42 | /// </summary>
|
43 | private void USBCheckConnection () |
44 | {
|
45 | FTDI.FT232R_EEPROM_STRUCTURE EEPROM = new FTDI.FT232R_EEPROM_STRUCTURE (); |
46 | |
47 | USBState = eFTstate.DISCONNECTED; |
48 | if (ftdi.OpenByIndex (0) == FTDI.FT_STATUS.FT_OK) |
49 | {
|
50 | if (ftdi.ReadFT232REEPROM (EEPROM) == FTDI.FT_STATUS.FT_OK) |
51 | {
|
52 | IDStringLast = EEPROM.Description; |
53 | |
54 | // Check for an xxyyzz board with a non matching serial number and ask whether this serial number
|
55 | // should be taken instead.
|
56 | if ((IDStringLast.Length == 16) && (Startup == false)) |
57 | {
|
58 | if ((IDStringLast.Substring (0, 4).CompareTo ("XYZ ") == 0) && |
59 | (IDStringLast.Substring (4, 12).CompareTo (this.txtSerialNumber.Text) != 0)) |
60 | {
|
61 | if (MessageBox.Show ("Shall I switch to the serial number of the\n" + |
62 | "detected board?", Application.ProductName, |
63 | MessageBoxButtons.YesNo, MessageBoxIcon.Question) == |
64 | System.Windows.Forms.DialogResult.Yes) |
65 | this.txtSerialNumber.Text = IDStringLast.Substring (4, 12); |
66 | }
|
67 | }
|
68 | |
69 | if (EEPROM.Description.CompareTo (IDStringOrg) == 0) |
70 | // Genuine FT232 description
|
71 | USBState = eFTstate.UNPROGRAMMED; |
72 | else if (EEPROM.Description.CompareTo (IDStringXYZ + this.txtSerialNumber.Text) == 0) |
73 | // Correct xxyyzz Board description
|
74 | USBState = eFTstate.CONNECTED; |
75 | else
|
76 | // Unknown description
|
77 | USBState = eFTstate.UNKNOWN; |
78 | }
|
79 | ftdi.Close (); |
80 | }
|
81 | }
|
82 | |
83 | |
84 | /// <summary>
|
85 | /// Print status in clear type.
|
86 | /// </summary>
|
87 | /// <returns></returns>
|
88 | private string USBStatus () |
89 | {
|
90 | switch (USBState) |
91 | {
|
92 | case eFTstate.DISCONNECTED: |
93 | return ("Disconnected"); |
94 | case eFTstate.UNPROGRAMMED: |
95 | return ("Connected, but unprogrammed"); |
96 | case eFTstate.CONNECTED: |
97 | return ("Successful programmed."); |
98 | case eFTstate.UNKNOWN: |
99 | return ("Connected, but programmed with \"" + IDStringLast + "\""); |
100 | default:
|
101 | return ("Illegal FT232 state! Check programming!"); |
102 | }
|
103 | }
|
104 | |
105 | |
106 | /// <summary>Program the FT232 with an individual signature containing the boards serial number.</summary>
|
107 | private void btnS1ProgFT232_Click (object sender, EventArgs e) |
108 | {
|
109 | FTDI.FT232R_EEPROM_STRUCTURE EEPROM = new FTDI.FT232R_EEPROM_STRUCTURE (); |
110 | string Description = IDStringXYZ + this.txtSerialNumber.Text; |
111 | this.Cursor = Cursors.WaitCursor; |
112 | this.Update (); |
113 | |
114 | USBCheckConnection (); |
115 | if (USBState != eFTstate.DISCONNECTED) |
116 | {
|
117 | // Found a FT232, do program it.
|
118 | if (USBState == eFTstate.UNKNOWN) |
119 | {
|
120 | if (MessageBox.Show ("Override the old\nFT232 programming?", |
121 | Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Warning, |
122 | MessageBoxDefaultButton.Button2) == DialogResult.No) |
123 | {
|
124 | // No ironing. Keep the name!
|
125 | this.lblS1ResultFT232.Text = "Result: Programming aborted!"; |
126 | this.lblStatus.Text = "Programming of USB chip aborted!"; |
127 | Report ("\r\nProgramming of USB chip aborted!\r\n", ReportType.Error); |
128 | this.Cursor = Cursors.Default; |
129 | return; |
130 | }
|
131 | }
|
132 | |
133 | // Finally program the new ID.
|
134 | if (ftdi.OpenByIndex (0) == FTDI.FT_STATUS.FT_OK) |
135 | {
|
136 | // Override original setting.
|
137 | ftdi.ReadFT232REEPROM (EEPROM); |
138 | EEPROM.Description = Description; |
139 | // Avoids assigning a new com port to every FT232 device connected to PC
|
140 | // Set HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\UsbFlags
|
141 | // REG_BINARY entry "IgnoreHW-SerNum04036001" to "01" to do the same with
|
142 | // unprogrammed devices!
|
143 | EEPROM.SerNumEnable = false; |
144 | ftdi.WriteFT232REEPROM (EEPROM); |
145 | ftdi.ResetDevice (); |
146 | ftdi.Rescan (); |
147 | ftdi.CyclePort (); |
148 | }
|
149 | do
|
150 | {
|
151 | USBCheckConnection (); |
152 | } while (USBState != eFTstate.CONNECTED); |
153 | }
|
154 | else
|
155 | {
|
156 | // Did not found any FT232. There is nothing to program!
|
157 | MessageBox.Show ("Found no FT232 chip to configure!", Application.ProductName, |
158 | MessageBoxButtons.OK, MessageBoxIcon.Error); |
159 | }
|
160 | this.Cursor = Cursors.Default; |
161 | }
|
162 | |
163 | ...
|
164 | }
|
165 | }
|
Gruß Carsten
Danke für die Antworten, ich habe kein WindowsTool, es soll quasi ausschliesslich mit einem TerminalProgramm laufen, daher kein WinCode... Die Eigenschaften von dem Device zeigen, dass die Registerkarte "Erweitert" fehlt, wo man "VCP laden" anklicken kann.
Noch etwas, was mir gerade auffällt... Sobald ich die EEPROMs wieder auf die Defaultwerte VID/PID 0403/6001 zurücksetze funktioniert auch das laden der COM-Ports... Bei VID/PID 0403/6011 wird kein VCP geladen, woran liegt das? Wo liegen die inf-files für den VCP-Treiber? Welche muss ich editieren? Ich habe bestimmt 30 von den Files auf dem Rechner vergraben von irgendwelchen FTDI-projekten mit angepassten treibern... Wie geht man da am besten vor? Ich vermute, dass ich auch in die VCP-Treiber inf´s die VID und PIDs hinzufügen muss, damit auch die PID 6011 erkannt wird und der Com-Port geladen wird? Danke nochmal und Gruß Spice
Bei meinen Boards habe ich eigene VIDs und UIDs in FTDIbus.inf und FTDIport.inf zugefügt. Hab' da keine Probleme. Sie tauchen dann im Gerätemanager unter USB und Ports mit den gewählten Name auf.
Danke Einhart, aber in welchem verzeichnis befinden sich die Dateien, die relevant sind?
Kann mir jemand den Unterschied der beiden Zeilen erklären? Was bewirkt das "&MI_xx" %USB\VID_0403&PID_6011.DeviceDesc%=FTD2XX, USB\VID_0403&PID_6011 %USB\VID_0403&PID_6010&MI_00.DeviceDesc%=FTD2XX, USB\VID_0403&PID_6010&MI_00
Hallo Spice, XXXX ist deine PID die Du im EPROM des Geräts hast YYYY ein beliebiger String der unter Anschlüsse bzw. USB-Controller angezeigt wird. ------------------------------------------------------------------ ftdiport.inf : %VID_0403&PID_XXXX.DeviceDesc%=FtdiPort232.NT,FTDIBUS\COMPORT&VID_0403&P ID_XXXX [FtdiHw.NTamd64] %VID_0403&PID_XXXX.DeviceDesc%=FtdiPort232.NTamd64,FTDIBUS\COMPORT&VID_0 403&PID_XXXX [Strings] FTDI="YYYY Name" DESC="YYYY Driver Package" DriversDisk="YYYY Drivers Disk" PortsClassName = "Ports (COM & LPT)" VID_0403&PID_XXXX.DeviceDesc="YYYY Serial Port" -------------------------------------------------------------------- ftdibus.inf [FtdiHw] %USB\VID_0403&PID_XXXX.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_XXXX [FtdiHw.NTamd64] %USB\VID_0403&PID_XXXX.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_XXXX [Strings] Ftdi="YYYY Name" DESC="YYYY Driver Package" DriversDisk="YYYY USB Drivers Disk" USB\VID_0403&PID_XXXX.DeviceDesc="YYYY Device" SvcDesc="USB Serial Converter Driver" ClassName="USB" -------------------------------------------------------------------- Wichtig ist das Du jeweils eine zum EPROM passende inf Datei hast da sonst Windows den Treiber nicht installiert. Wenn beide Dateien passen kann man auchden COM-Port für eine beliebige PID installieren. Die Dateien befinden sich im Verzeichnis des Treiber. Wie gesagt sollte es bei FTDI (jedenfalls vor einem Jahr) ein PDF zum Thema geben. Stefan
Hey Stefan, vielen Dank für die Beschreibung, sowas habe ich vermutlich gesucht, ich teste das gleich mal. Ich habe mich gerade ein wenig bei google verirrt, als ich danach suchte, wie man im Gerätemanager unter Anschlüsse den Namen der einzelnen COM-Ports ändern kann (nicht die Nummer) aber nix gefunden. Vermutlich ists genau deine Beschreibung, wie das funktioniert, ich teste das mal... Gruß Spice
Funktioniert soweit, danke nochmal an alle...
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.