$+#KEigenschaftsseiten-Lieferant
Zu USB2LPT gehört eine DLL zur Einstellung von Treiber-Parametern sowie zur Kontrolle der Funktion. Folgende Einstellungen stehen im Gerätemanager zur Verfügung:
Portadresse
LPT-Erweiterung
Anzapfungsmethode
Performance-Optionen
Statistik

$+#KKonverter: Dient zum „Umwandeln“ einer Schnittstelle in eine andere.
Im Falle der Bereitstellung einer parallelen Schnittstelle am USB stellt USB2LPT eine besondere Herausforderung dar, weil zum Ziel stand, jede Peripherie ohne Änderung der Software zu unterstützen.
USB2LPT ist obendrein ein Multifunktionsgerät und implementiert eine USB-Druckerunterstützung als Zweitgerät.

$+#KSoftware, Programm: Im Sinne von USB2LPT ein beliebiges Anwendungsprogramm, welches direkten Zugriff zur parallelen Schnittstelle benötigt. In diese Kategorie fallen:
·	Programmiergeräte
·	Datenlogger, Datenerfassung
·	„Langsame“ Steuerungen, wie Garten, Modelleisenbahn,…
·	Synchrone Bus-Anschlüsse, wie I²C, SPI…
·	Labor-Automatisierung, einfache Roboter
·	Schrittmotor-Steuerungen (nur bis ca. 100 Hz Taktfrequenz)
·	Software-Schutzstecker (mit mehr oder weniger Glück)

Sämtliche Parallelport-Zugriffe werden abgefangen und auf USB umgeleitet.

$+#KPortadresse: Wählen Sie eine zu emulierende Portadresse aus. Es steht Ihnen frei, auch eine tatsächlich vorhandene Portadresse „wegzuemulieren“, auch wenn das nicht Sinn und Zweck dieses Konverters darstellt. Die vorhandene Schnittstelle wird faktisch deaktiviert.
Empfehlung:	ein LPTx (x = 1 bis 3)
Sie können auch eine wahlfreie Adresse angeben.
Vorsicht! Sie sollten wissen, was Sie da gerade tun! Wenn Sie die Portadresse Ihrer Netzkarte, VGA-Karte oder Festplatte überdecken, sind die Folgen katastrophal.
Eine wahlfreie Adresse stellt die einzige Möglichkeit dar, mehr als 3 Parallelschnittstellen an einem Rechner zu betreiben. Dazu muss Ihr Anwendungsprogramm die Möglichkeit bieten, eine wahlfreie Adresse angeben zu können (mit dem gleichen Warnhinweis).
Siehe auch:	Konverter

$+#KLPT-Erweiterung: Im Laufe der Jahre hat sich die parallele Schnittstelle, beinahe unbemerkt von Otto Normalverbraucher, durch Hinzufügung weiterer Portadressen zu einer Turbo-Schnittstelle gemausert. Die beiden neuen (und einander inkompatiblen) Protokolle nennen sich ECP und EPP. Zum Glück können diese koexistieren. Das Ur-Parallelport bekam seitdem die Abkürzung SPP. Dieser Konverter (genauer, die enthaltene Firmware) und der Treiber emulieren auch diese Erweiterungen. Die meisten Anwendungsprogramme machen keinen Gebrauch davon, weil das den Anwender unter Umständen zwingt, im BIOS-Setup eine geeignete Einstellung vornehmen zu müssen.
Empfehlung:	SPP (höhere Modi nur, wenn das Programm danach ausdrücklich verlangt)
Die EPP-Ports liegen auf Basisadresse+3..+7, die ECP-Ports auf Basisadresse+400h..403h. Für weitergehende Infos zur Belegung dieser Adressen und zum Verhalten des Parallelports muss auf externe Quellen verwiesen werden. Eine verlässliche Quelle zum Thema ECP ist www.microsoft.com.

$+#KAnzapfungsmethode: Weil es keine geeignete Windows-API gab und gibt, mit der man ein Parallelport vernünftig hätte ansteuern können (außer zum Drucken), blieben den Anwendungsprogrammierern nichts anderes übrig, als ihre Programme mit entsprechenden Ein- und Ausgabebefehlen zu spicken. Diese zu finden und umzuleiten ist der eigentliche Kunstgriff dieses Konverters (genauer, des Treibers), mit mehr oder weniger rabiaten Mitteln.
Die Anzapfung von READ_PORT_UCHAR/WRITE_PORT_UCHAR ist das weniger rabiate Mittel, welches nur bei sehr gesitteten Programmen und faktisch nur unter Windows 2000 und XP funktioniert.
Für alle anderen Fälle sorgt die Verwendung von Debugregistern, dass kein Ein/Ausgabebefehl durch die Lappen geht. Einschränkend muss gesagt werden, dass diese von anderen Kernel-Teilen gelegentlich gestohlen (gelöscht) werden (Grund ist nicht ersichtlich), dass es nur 4 Sätze davon gibt, dass ein Prozessor der Pentium-Klasse erforderlich ist, und dass Mehrprozessormaschinen zurzeit Probleme bereiten.
Empfehlung:	Beide Schalter eingeschaltet
Das weniger rabiate Mittel hat automatisch Vorrang.

$+#KPerformance-Optionen: Ein USB-Transfer dauert 1 ms. Das ist verglichen mit einem Ein/Ausgabebefehl (1 µs) eine Ewigkeit. Ein Programm würde ohne spezielle Maßnahmen sehr langsam laufen.
Ausgabebefehle können „en bloc“ als Bündel zum USB ausgegeben werden. Die maximale Schreibverzögerungszeit kann hier angegeben werden.
Beachte: Jeder Eingabebefehl führt zwangsweise zur Übertragung aller vorher aufgesammelten Ausgabebefehle, um die Reihenfolge einzuhalten.
Empfehlung:	eingeschaltet, 200..500 ms
Ausnahme sind Schrittmotortreiber, die, wenn überhaupt, nur ohne Cache laufen.
Bei Eingabebefehlen ist es nicht so einfach möglich, um diese Millisekunde herumzukommen, weil das Programm eine Adresse ausgibt und umgehend das vom Parallelport kommende Datenbyte erwartet. Bei reinen Ausgabeports (die allerdings nur von dummen Programmen gelesen werden) schafft das Rücklesen eines Spiegel-Bytes (= letztes ausgegebenes Byte) Abhilfe. Dieses Spiegel-Lesen ist mit Vorsicht zu genießen, da es Hardware geben kann, die Ausgabeleitungen auf ein bestimmtes Potenzial klemmt (meist Massepotenzial), was gelesen und ausgenutzt werden kann. Mit anderen Worten, am Druckerport gibt es kein wirkliches Ausgaberegister.
Empfehlung:	eingeschaltet
Für die meiste Hardware wird es funktionieren. Wenn es nicht funktioniert, oder Sie die Hardware diesbezüglich kennen, schalten Sie die Spiegel aus.
Eine Zeitsteuerung mit einer Quantelung unter einer Millisekunde ist mit USB2LPT systembedingt nicht möglich! Dazu lese man das letzte Kapitel, USB2LPT als Entwicklungssystem.

$+#KStatistik: Für die beiden Anzapfungsmethoden werden insgesamt 6 Zugriffszähler geführt.

$+#KExtra-Stromversorgung
Eine sinnvolle Erweiterung, die auch für den weniger geübten Bastler durchführbar ist, ist das „Herausziehen“ der 5-V-Versorgung zur Speisung weiterer Geräte. Dazu ist im Gerät ein Adernpaar vorkonfektioniert. An dieses Kabel ist ein geeigneter Stecker anzubringen. Die markierte Ader ist der Pluspol.
Vermeiden Sie unbedingt Kurzschlüsse an diesem Anschluss! Regulär dürfen diesem Anschluss max. 0,5 A entnommen werden; üblicherweise funktionieren auch 2 A, wenn keine weiteren USB-Geräte angeschlossen sind. An passiven Hubs (solche ohne Einspeisung) gelten schärfere Restriktionen; dann darf praktisch kein (weiterer) Strom entnommen werden.
FAQ – Häufig gestellte Fragen
Warum funktionieren serielle Konverter, nicht aber parallele?
Diese Frage allein setzt einiges an Erfahrung voraus. Tatsächlich ist das so! Allerdings laufen manche Programme sehr, sehr langsam.
Ursache sind die verschiedenen Programmierstrategien für serielle und parallele Ports, verursacht durch die gute Windows-Unterstützung für serielle und die schlechte für parallele Schnittstellen.

Fazit: Es gibt keine Windows-Funktion, um einzelne Portpins der parallelen Schnittstelle zu setzen oder abzufragen. Allenfalls Drucker oder drucker-ähnliche Geräte können angesprochen werden.
Die Folge ist, dass jeder Programmierer sein eigenes Süppchen kochen muss und einen Direktzugriff programmiert.
Serielle Schnittstellen sind in ihrer Funktionalität so gut abgedeckt, dass ein Direktzugriff so gut wie nie erforderlich ist (und auch viel Arbeit macht; jeder, der jemals eine solche Bibliothek für DOS geschrieben hatte, kann ein Lied davon singen).
„Einschlafende“ Programme benutzen die beiden „parallelen“ Leitungen RTS und DTR; die Umsetzung von EscapeCommFunction auf USB ist bisweilen schlecht gelungen. In diese Kategorie fallen einfache Programmiergeräte für PICs.

$+#KEntwicklungssystem
Dieses Gerät ist auf Grund der Offenlegung aller Schnittstellen auch als vollwertiges EZUSB-Entwicklungssystem auffassbar. 17 von 18 Portpins sind an der SubD-Buchse herausgeführt. Das nicht herausgeführte steuert die Leuchtdiode und hat ohnehin keine Extrafunktion.
Anschlüsse
An der SubD-Buchse gilt folgende Belegung:

Bild 1: Anschlussbelegung der SubD-Buchse, auch aus Sicht eines Entwicklungssystems
Wie man den Anschlüssen entnehmen kann, stehen eine Reihe allgemeiner oder dedizierter Portpins zur Verfügung, zusammengefasst:
·	Zwei asynchron-serielle Schnittstellen (fertig für Taschendatenbanken oder andere Mikrocontroller — für PCs benötigt man noch einen MAX232 oder vergleichbaren Pegelkonverter),
·	Fünf Interrupt-Eingänge, drei low-aktive und zwei high-aktive,
·	Drei Zähler-Eingänge
·	Einen Capture-Eingang (T2Ex)
·	Einen Zähler-Ausgang (T2Out)

Nicht zu suchen braucht man folgende mikrocontroller-typische Peripherie:
·	A/D-Wandler
·	Compare-Ausgang, PWM-Ausgang
·	Synchron-serielle Schnittstelle, bspw. SPI
·	I²C ist hier nicht herausgeführt
Solche Schnittstellen müssen im Ping-Pong-Verfahren nachgebildet werden.

Neue Firmware kann, wie in der Cypress-Dokumentation angegeben, komplett RAM- und EEPROM-Inhalt ersetzen.
Bei teilweiser Modifikation der Firmware kann der RAM-Adressbereich ab 0A00h für eigene Erweiterungen benutzt werden.
Noch nicht implementiert:
Die Adresse 2Fh wird angesprungen, wenn ein Ausgabebyte >20h im Ausgabe-Datenstrom vorgefunden wird. Die Standardbehandlungsroutine setzt das C-Bit (Überlauf) als Fehlerkennung; der Aufrufer verwirft den Rest des ausgegebenen Blocks.
Die Adresse 31h wird angesprungen, wenn ein unbekannter Vendor-Request über EP0 abgewickelt wird. Die Standardbehandlungsroutine setzt das C-Bit, und der Aufrufer quittiert den Request mit STALL. (Man beachte, dass einige Vendor-Requests für das USB-Druckerinterface reserviert sind!)
Es sind hier AJMP-Befehle (keine LJMP) einzusetzen!
Die Interruptvektortabelle wird noch frei gemacht…
Die USB2LPT-Firmware selbst arbeitet, abgesehen vom Wakeup, ganz ohne Interrupts, und sogar das globale Interruptfreigabe-Bit IE ist ausgeschaltet. Firmware-Erweiterungen dürfen alle „normalen“ Interruptserviceroutinen installieren. Ausgenommen sind ISRs, die das USB-System betreffen.