OpenDCC: USB
Einleitung
- Am USB-Bus hat jeder Teilnehmer eine eindeutige VID und PID (VID: Vendor ID = Herstellerkennung,
PID: Product ID, Produktkennung).
Die hier vorgestellten Schaltungen basieren zumeist auf dem FT232RL von FTDI. Für die OpenDCC Projekte wurde mir von FTDI eine eigene PID innerhalb der für FTDI vergebenen VID zugeteilt. Im Linux-Kernel ab Version 2.6.31.2 sind diese VID und PID als bekannte Devices enthalten, damit werden diese Geräte ohne manuelle Einstellungen als serielle Schnittstelle erkannt.
VID und PID bei OpenDCC
Schaltung | VID | PID | Product Description | ept-file |
---|---|---|---|---|
Zentrale V1.x | 0x0403 | 0xBFD8 | USB-IF OpenDCC V1.2 | OpenDCC_V1.2.ept |
Schnüffel | 0x0403 | 0xBFD9 | USB-IF DCC Sniffer V1.0 | dcc_sniffer.ept |
Handregler | 0x0403 | 0xBFDA | USB-IF OpenDCC Throttle V1.0 | MFT_V1.0.ept |
Basisstation | 0x0403 | 0xBFDB | USB-IF OpenDCC Gateway V1.0 | gateway.ept |
Erstinbetriebnahme des USB
-
Nach dem Aufbau einer OpenDCC Schaltung muß die USB-Verbindung konfiguriert werden. Dies gliedert sich in zwei Teile:
- Treiber am PC installieren
- FTDI Chip konfigurieren
Konfiguration und Installation der FTDI Treiber
- FTDI bietet einen Kombitreiber an, der zwei verschiedene Modi kennt:
- Es dürfen keine VCP- bzw. D2XX- Treiber installiert sein. Sind bereits ältere Versionen vorhanden, müssen diese zuerst deinstalliert werden.
- Damit nach der korrekten Installation die OpenDCC Hardware richtig erkannt wird, muß
man dem Treiber mitteilen, dass sich hinter VID 0x403 und PID 0xBFD8 OpenDCC verbirgt.
Es müssen also die originalen Treiberinformationen um VID und PID ergänzt werden.
Was man wo eintragen muß ist nachfolgend beschrieben. Für Windows-XP kann man diesen angepassten Kombi-Treiber (ursprünglich von FTDI ) herunterladen, dort ist bereits alles eingetragen.
Treiberanpassung:- Von FTDI den Treiber für das verwendete Betriebssystem herunterladen und in ein beliebiges Verzeichnis entpacken.
- Nun müssen die VID und PID für OpenDCC in die Dateien ftdibus.inf und ftdiport.inf dieses Treibers eingetragen werden. Hierzu sind in diesen Dateien die folgenden kursiven, roten Zeilen zu ergänzen.
- ftdibus.inf
[FtdiHw]
%USB\VID_0403&PID_6001.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_6001
%USB\VID_0403&PID_BFD8.DeviceDesc%=FtdiBus,USB\VID_0403&PID_BFD8
%USB\VID_0403&PID_BFD9.DeviceDesc%=FtdiBus,USB\VID_0403&PID_BFD9
%USB\VID_0403&PID_BFDA.DeviceDesc%=FtdiBus,USB\VID_0403&PID_BFDA
%USB\VID_0403&PID_BFDB.DeviceDesc%=FtdiBus,USB\VID_0403&PID_BFDB
[FtdiHw.NTamd64]
%USB\VID_0403&PID_6001.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_6001
%USB\VID_0403&PID_BFD8.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_BFD8
%USB\VID_0403&PID_BFD9.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_BFD9
%USB\VID_0403&PID_BFDA.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_BFDA
%USB\VID_0403&PID_BFDB.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_BFDB
[Strings]
Ftdi="FTDI"
DESC="CDM Bus Driver Package (OpenDCC Mod)"
DriversDisk="FTDI USB Drivers Disk"
USB\VID_0403&PID_6001.DeviceDesc="USB Serial Converter"
USB\VID_0403&PID_BFD8.DeviceDesc="USB-IF OpenDCC V1.2"
USB\VID_0403&PID_BFD9.DeviceDesc="USB-IF DCC Sniffer V1.0"
USB\VID_0403&PID_BFDA.DeviceDesc="USB-IF OpenDCC Throttle V1.0"
USB\VID_0403&PID_BFDB.DeviceDesc="USB-IF OpenDCC Gateway V1.0"
- ftdiport.inf
[FtdiHw]
%VID_0403&PID_6001.DeviceDesc%=FtdiPort232.NT,FTDIBUS\COMPORT&VID_0403&PID_6001
%VID_0403&PID_BFD8.DeviceDesc%=FtdiPort232.NT,FTDIBUS\COMPORT&VID_0403&PID_BFD8
%VID_0403&PID_BFD9.DeviceDesc%=FtdiPort232.NT,FTDIBUS\COMPORT&VID_0403&PID_BFD9
%VID_0403&PID_BFDA.DeviceDesc%=FtdiPort232.NT,FTDIBUS\COMPORT&VID_0403&PID_BFDA
%VID_0403&PID_BFDB.DeviceDesc%=FtdiPort232.NT,FTDIBUS\COMPORT&VID_0403&PID_BFDB
[FtdiHw.NTamd64]
%VID_0403&PID_6001.DeviceDesc%=FtdiPort232.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_6001
VID_0403&PID_BFD8.DeviceDesc%=FtdiPort232.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_BFD8
VID_0403&PID_BFD9.DeviceDesc%=FtdiPort232.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_BFD9
VID_0403&PID_BFDA.DeviceDesc%=FtdiPort232.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_BFDA
VID_0403&PID_BFDB.DeviceDesc%=FtdiPort232.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_BFDB
[Strings]
FTDI="FTDI"
DESC="CDM Port Driver Package (OpenDCC Mod)"
DriversDisk="FTDI USB Drivers Disk"
PortsClassName = "Ports (COM & LPT)"
VID_0403&PID_6001.DeviceDesc="USB Serial Port"
VID_0403&PID_6010.DeviceDesc="USB Serial Port"
VID_0403&PID_6011.DeviceDesc="USB Serial Port"
VID_0403&PID_BFD8.DeviceDesc="USB-IF OpenDCC V1.2"
VID_0403&PID_BFD9.DeviceDesc="USB-IF DCC Sniffer V1.0"
VID_0403&PID_BFDA.DeviceDesc="USB-IF OpenDCC Throttle V1.0"
VID_0403&PID_BFDB.DeviceDesc="USB-IF OpenDCC Gateway V1.0"
Die Veränderung der DESC Variablen ist in beiden Dateinen optional,
hilft aber bei der Indentifizierung in der Softwareliste.
- Da aktuelle Systeme (besonders Vista) bevorzugt zuerst online nach Treibern suchen,
empfiehlt es sich den Treiber vor dem ersten Verbinden zu installieren.
Als besonders hilfreich erweist sich an dieser Stelle das windowsinterne
Driver Installation Framework (DIFx).
Hierfür einfach mal im System nach der Datei DPInst*.exe suchen, in das Verzeichnis kopieren in welchem der Treiber ausgepackt wurde und direkt starten.
Hinweise:- Sollten die Treiber als ungültig abgewiesen werden, muss DPInst im legacy mode über den Parameter DPInst.exe -lm in der Konsole (cmd) gestartet werden.
- für x64 Systeme muss DPInstx64.exe verwendet werden.
- Jetzt OpenDCC mit dem PC verbinden. Eine neue Hardware wird erkannt und die registrierten Treiber werden verwendet.
- Wenn man noch keine Treiber installiert hat (s.oben), so ist jetzt bei der Frage nach den passenden Treibern auf das entsprechende Verzeichnis zu verwiesen.
- Im Geräte Manager sollte nun ein neuer serieller Port sowie ein neues USB Device erscheinen. Wenn die Hardware bereits die OpenDCC PID und VID enthält, dann wird das auch angezeigt. Bei neuer Hardware fehlt das noch und man muß das noch konfigurieren.
- VCP (Virtual COM Port): dieser Mode emuliert eine serielle Schnittstelle, damit wird der Baustein später im Betrieb angesteuert.
- D2XX: dieser Mode dient zur Konfiguration.
Es wird wie folgt vorgegangen:
Konfiguration des USB-Chips
- Damit die Hardware nicht nur als 'irgendein' serieller Port, sondern als OpenDCC erkannt wird, muß man
PID und VID in den FTDI Chip hineinschreiben.

Mit dem Konfigurationprogramm MPROG wird nun die richtige Herstellerkennung und Produktkennung gemäß obiger Tabelle eingetragen. Wichtig: kein Häkchen bei 'load D2XX', damit der Chip später als serielle Schnittstelle anmeldet. Zur Vereinfachung kann man auch das jeweilige Template (z.B. OpenDCC_V1.2.ept) laden, damit sind alle notwendigen Einstellungen bereits vorgenommen.
Nach dem Eintrag der richtigen Kennung kann man mit 'Cycle Device' ("Lupe") ein Neueinlesen des Busses veranlassen.

Die OpenDCC Zentrale 1 wurde gefunden und wird mittels des VCP-Treibers (=Virtual Com Port) als serielle Schnittstelle (im Bild: COM6) im Gerätemanager angezeigt.
Tipp
- Man kann sich (unter Windows XP) den Device-Manager als Verknüpfung auf den Desktop holen, dann muß
man nicht immer über Arbeitsplatz, rechte Maus, Eigenschaften usw. da hin. Einfach von devmgmt.msc eine Verknüpfung erstellen.
Links
- nirsoft.net Analysetool für USB ID's
FTDI_VCP_2000-XP_R1.0.2176_for_OpenDCC.zip angepasster Treiber für OpenDCC (WinXP)