Stichworte: USB, LPT, Parallel, Parallelport, Druckerport, Konverter, Adapter
USB2LPT — zur ÜbersichtIm wesentlichen alles identisch zur vorhergehenden Revision 5.
Hinweise zum Verständnis der Firmware:
Die momentane Firmware-Implementierung für's USB2LPT Low-Speed (1.6) hat mehrere Möglichkeiten (Interfaces), E/A-Transaktionen auszulösen. Der zugehörige Treiber (usb2lpt.sys) benutzt davon das älteste und schnellste Interface mit 2 BULK-Pipes; ab Vista muss jedoch betriebssystem-bedingt auf ein langsameres mit 2 INTERRUPT-Pipes umgeschalten werden. Eine OUT-Pipe ist für Adressen und Ausgabe-Daten („Mikrokode“), eine IN-Pipe für Eingabe-Daten („Ergebnisphase“). SieheDeviceIoControl()
-basierte API zur Gestaltung der Daten auf den OUT- und IN-Pipes.Somit gibt es folgende Möglichkeiten zur Auslösung von E/A-Transaktionen:
- Die originale Methode mittels zweier BULK-Pipes. Sie stammt aus der Entwicklungsgeschichte von USB2LPT, deren Anfänge mit dem AN2313 (Full-Speed) gemacht wurden. BULK-Pipes sind im USB-Standard verboten für Low-Speed-Geräte, um die gemeinsam genutzte USB-Bandbreite zu schonen. Bis hin zu Windows XP funktionieren diese dennoch, nicht aber ab Vista und nicht unter Linux. Ab 2013 kann per Konfigurations-Schalter kann diese Methode aktiviert werden, ansonsten verwendet USB2LPT Interrupt-Pipes, siehe unten.
Der Treiber benutzt standardmäßig diesen Weg.- Eine einfache Zugriffsmethode via EP0 (CONTROL-Transfer Endpoint 0) mit geringem Durchsatz, quick-and-dirty eingebaut von Henning Paul für die Verwendung von USB2LPT unter Linux. (Ich glaube, er hatte mein originales Interface nicht verstanden.) Im Gegensatz zu allen anderen ohne ECP- und EPP-Unterstützung.
Ich habe dieses Interface niemals treiberseitig unterstützt.- Die INTERRUPT OUT + IN-Alternative für Linux sowie Windows Vista und neuer. Es ist konform zum USB-Standard, aber 8× langsamer als das BULK-basierte Original. Dieses Interface ist seit 2013 umschaltbar ausgeführt. Vorher war es als „Alternate Setting“ implementiert, was aber Vista bewog, das Gerät überhaupt nicht ansprechen zu wollen.
Dem Treiber ist es egal, ob er mit einer Bulk- oder Interrupt-Pipe spricht. Nur der darunter liegende USB-Hostcontroller-Treiber kümmert sich um den feinen Unterschied, nämlich Interrupt-Transfers um bis zu 8 ms zu verzögern. Leider.- Eine neuartige EP0-basierte Alternative mit streng minimiertem Datentransferaufwand.
Es ist geplant, diese Alternative treiberseits zu unterstützen. Der geschätzte Geschwindigkeitsgewinn liegt bei Faktor 4 bis 8. Damit wäre USB2LPT Low-Speed unter Vista und neuer wieder genauso schnell wie unter XP.- Eine weitere Alternative ist auf HID-Basis. (HID = Human Interface Device.) Damit wird USB2LPT Low-Speed zu einem „Multifunktionsgerät“. Für das implementierte Zweitgerät lädt Windows automatisch seinen Treiber. Das vermeidet das Problem mit dem Treiberzertifizierungszwang auf 64-bit-Windows-Systemen.
Dieses Interface ist nicht dafĂĽr gemacht, von meinem Treiber benutzt zu werden. Es dient als Behelfskonstruktion fĂĽr USB2LPT-adaptierte Versionen voninpout32.dll
und ähnlichen Portzugriff-DLLs (die noch zu schreiben sind). Im Zuge des Treiberzertifizierungszwangs wird sich die Softwarelandschaft von selbst ausdünnen, was die Verfügbarkeit von zertifizierten Win64-lauffähigen Portzugriff-Lösungen angeht, so dass dieses Verfahren sehr praktikabel und anwederfreundlich erscheint. Eben weil kein Treiber zu laden ist.
Die gelbe Multifunktions-LED zeigt folgende Zustände an:
FĂĽr High-Speed-USB gibt es die Revision 7.
Bei gewünschtem 3,3-V-Betrieb des ATmega8 ist eine Doppeldiode BAV199 (bestellbar bei Reichelt) zu bestücken. Diese Lösung hat gegenüber der Revision 5 den Vorteil, die Standby-Stromaufnahme unter 500 µA zu halten. Der Widerstand R1 muss dann mit 1,5 kΩ bestückt werden.
Alle Bauelemente können bei Reichelt bestellt werden.
Stück | Bezeichnung | Bestell-Bezeichnung | Einzelpreis in € (2008) | Bestell-Hilfe |
---|---|---|---|---|
1 | ATmega8 im TQFP-32-Gehäuse | ATmega 8-16 TQ | 1,45  | Reichelt-Warenkorb online |
1 | Kondensator 100 nF 0603 | X7R-G0603 100n | 0,051 | |
1 | Widerstandsnetzwerk 220 Ω 1206 | BCN16 220 | 0,02  | |
1 | Widerstand 10 kΩ 0805 | SMD-0805 10,0k | 0,10  | |
1 | Elko 10 µF | rad 10/35 | 0,041 | |
1 | Gelbe LED 3 mm | LED 3mm ge | 0,051 | |
1 | SubD-Buchse 25pol. | D-SUB BU 25 | 0,15  | |
1 | USB-Buchse MiniB Durchsteck | USB BWM | 0,78  | |
1 | Gehäuse | Kappe CG25G | 0,13  | |
1 | USB-Anschlusskabel 1 m | AK 673-A | 0,88  | |
10 Positionen | Summe (110727) | 4,97  | ||
1 | Zweiseitige Leiterplatte (s.u.) | UL16LP | 1,00  | Mich anschreiben |
Die BestĂĽckung ist ziemlich simpel.
Neu: Der Aufbau der ähnlichen Version 1.7 ist als YouTube-Video (3-teilig, insgesamt ca. 30 Minuten) verfügbar!
src/firmware/usb2lpt6+bootloader.hex
(als FLASH-Datei), brennen (FLASH schreiben),
Fuses genauso setzen wie in diesem Bild (Strg+S), schreiben.
Keinesfalls mit den Fuses herumspielen ohne zu wissen, was man tut! Man kann sich von weiteren Programmierversuchen auch aussperren!
make prog
(Verzeichnis src/firmware/src-ATmega8-bootload
,
Datei src/firmware/usb2lpt6+bootloader.hex
).
Makefile
entnehmen.
de\usb2lpt.inf
installieren lassen
de\usb2lpt.ntx86.dll
bzw. de\USB2LPT.DLL
,
Installationshinweise [englisch] siehe note.txt
),
Kurzschlusstest.exe
laufen lassen, ggf. Korrekturen
Oder USB2LPT13 quarzfrei mit dem PIC18F24K50. Diesen gibt es sogar im bastlerfreundlichen DIL-Gehäuse. Allerdings nicht bei Reichelt.
Die High-Speed-Schiene bleibt bestehen, hat aber größere Beschaffungsprobleme, daher wird USB2LPT24 mit ATSAM3U1CB als Ersatz für den CY7C68013A anvisiert. Das Laster des 3,3-Volt-Betriebs bleibt leider auch dieser Lösung anhaften; High-Speed-USB-Mikrocontroller mit 5-V-I/O wurden noch nicht gesichtet.