Konverter von USB auf Parallelport (25pol. SubD-Buchse),
inklusive Hardwarenachbildung (Virtualisierung) auf Ein/Ausgabe-Registerebene
durch Windows-Treiber
Unterstützt alle Parallelport-Modi SPP, PS/2 bidirektional, EPP und ECP, 16 Byte tiefe FIFO
USB Low Speed (1,5 Mbit/s brutto; 1 kByte/s bei Ein/Ausgabebefehlen)
Unterstützt USB-Schlafmodus mit reduzierter Stromaufnahme
Offene Quelltexte (open-source), auch für Schaltplan, Leiterplatte und Etiketten
Den Windows-Treiber und die Firmware finden Sie auf der
übergeordneten Seite, sowie Verwendungshinweise.
Der Windows-Treiber ist für alle USB2LPT gleich.
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“).
Siehe DeviceIoControl()-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 von
inpout32.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 LED
Die gelbe Multifunktions-LED zeigt folgende Zustände an:
aus:
Keine Stromversorgung (Kabel defekt o. ä.)
USB2LPT nicht vom Computer erkannt
USB-Bereitschaftsmodus (Standby) – bspw. bei Notebook im Suspend-Modus
USB2LPT im Bootloader-Modus (Flash-Byte 0 enthält 0xFF oder EEPROM-Byte 0 enthält 0x42)
ein:
USB2LPT aktiv, Ausgangstreiber (zum Parallelport) sowie Pullups (für die Eingänge) aktiviert
blinkend:
schnell: USB-Bulk- oder Interrupt-Transfers (umgeleitete Ein/Ausgabebefehle; normale Funktion)
langsamer: USB-Control-Transfers (i. A. von Windows initiiert)
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.
Bauteile
Alle Bauelemente können bei Reichelt
bestellt werden.
LED, Elko: Beine kürzen
PonyProg oder
WinAVR herunterladen und installieren
PonyProg: Interface einrichten für Parallelport wie in
diesem Bild,
Test durch Anstecken des Programmier-Adapters
(testet Brücke zwischen Pin 2 und Pin 12), 1x Setup→Kalibrierung ausführen
Erprobte Aufbau-Reihenfolge
Neu: Der Aufbau der ähnlichen Version 1.7 ist als YouTube-Video
(3-teilig, insgesamt ca. 30 Minuten) verfügbar!
SMD-Pastenauftrag, SMD-Bestückung (4 Bauteile),
Reflow-Prozess – oder Handlötung.
Auf richtige Orientierung des Mikrocontrollers achten! Siehe auch Foto.
Masseschlussprüfung der 5-Volt-Leitung, ggf. Korrektur
SubD-Buchse (mit Schraubstock, ca. ½ mm Luft zur Leiterplatte) aufpressen,
Mittigkeit und Parallelität kontrollieren, anlöten
(0,5 mm dicken Lötdraht unter die Lötkelche fließen lassen!)
USB-Buchse (mit Vorrichtung) ausrichten, anlöten,
die Anschlüsse mit niedriger Kolbentemperatur(!!) löten
Elko liegend bestücken
LED mittels Gehäusehalbschale ausrichten, löten (ggf. mit Vorrichtung)
noch einmal Masseschlussprüfung der 5-Volt-Leitung
„Funktionsprobe“ (anstecken, Gerätemanager), muss „defektes USB-Gerät“
melden, dient als Stromversorgung fürs Programmieren des Bootloaders
mittels Programmier-Adapter und einem echten
Parallelport den Bootloader brennen durch
PonyProg: Laden von 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!
Oder
WinAVR: Aufruf von make prog
(Verzeichnis src/firmware/src-ATmega8-bootload,
Datei src/firmware/usb2lpt6+bootloader.hex).
Oder
AVRStudio: Fuse-Einstellungen aus Makefile entnehmen.
Findet die Programmiersoftware den Controller nicht, kontrolliere:
Programmier-Adapter richtig gelötet?
Programmier-Adapter richtigherum angesteckt?
Brücke SJ2 (noch) geschlossen?
Alle SubD-Pins richtig angelötet?
Mikrocontroller richtig herum eingelötet?
(Wenn verkehrt, dann mit Heißluft abpusten.
Wenn 180° verkehrt, neuen ATmega8 einlöten.)
Mikrocontroller-Pins alle angelötet, ohne Kurzschlüsse?
USB2LPT ab- und anstecken,
ggf. Treiber de\usb2lpt.inf installieren lassen
Funktionsprobe (Gerätemanager), muss ein „USB2LPT Low-Speed“-Gerät anmelden:
Der Bootloader (
HIDboot)
wird bereits übersprungen.
Erscheint kein USB2LPT, dann
Auch mal einen anderen Computer und/oder eine andere USB-Buchse probieren (Front oder hinten, oder über USB-Hub).
Wenn USB2LPT unzuverlässig erscheint, Quarz bestücken und USB2LPT-1.5-Firmware benutzen.
Ursache erscheint eine zu exemplarisch stark schwankende 5V-Speisung (interner RC-Oszillator zu instabil).
Programmier-Adapter entfernen
Brücke SJ2 durchkratzen (einzige Lötbrücke auf unbeschrifteter Leiterseite)
Im Geräte-Manager „Eigenschaften von USB2LPT“ öffnen, Tab „Statistik“, Knopf „Extras“, Knopf „Kurzschlusstest“
(dies erfordert neuen Eigenschaftsseiten-Lieferant
de\usb2lpt.ntx86.dll bzw. de\USB2LPT.DLL,
Installationshinweise [englisch] siehe note.txt),
oderKurzschlusstest.exe laufen lassen, ggf. Korrekturen
Bleibt das Programm hängen, ist wahrscheinlich die Brücke SJ2
nicht (richtig) durchgekratzt.
Das Programm kann die Statuseingänge tatsächlich als Ausgang umprogrammieren,
siehe auch API.
Um die korrekte Verbindung aller Anschlüsse hin zur SubD-Buchse
zu prüfen, sollte man den LPT-Tester anstecken
und die Frage „Leuchten alle LEDs hell“ entsprechend beantworten.
Alternativ kann man an allen 17 Anschlüssen messen, ob 5 V herauskommen.
Die Frage, ob alle LEDs aus sind, sowie das Umschalten der blauen LED
kann man ignorieren und mit J beantworten,
dies ist für Low-Speed-USB2LPT irrelevant.
Gehäuse schließen, Abschlusstest
Die Montage der USB-Buchse erfolgt nach Vorbereitung der Pins (links)
mit der dargestellten Vorrichtung (rechts).
Fallstricke und Probleme
Der Quarz sowie die 22-pF-Kondensatoren C1 und C2 entfallen.
Bei 3,3-V-Speisung des ATmega muss R1 1,5 kΩ haben
Der Bootloader funktioniert nicht richtig (auch nach Jahren der Fehlersuche meinerseits)
Mögliche Modifikationen
Es gibt drei Lötbrücken (solder jumper):
SJ1 dient zur Belegung von Pin 25 der SubD-Buchse:
offen: Pin 25 unbeschaltet
rechts verbunden: Pin 25 auf Masse (Standard)
links verbunden: Pin 25 auf 5 Volt
Statt der direkten 5-V-Speisung wird empfohlen, in die beiden darüber
befindlichen Löcher eine selbstrückstellende Sicherung
(bspw. Reichelt PFRA040)
einzulöten.
Vorteilhaft zur Speisung angeschlossener Hardware ohne extra Steckernetzteil
SJ2, bei Erstellung verbunden,
bei Fertigstellung durchgekratzt: Aktivierung der RESET-Leitung
zum Programmieren des Mikrocontrollers.
SJ3, normal verbunden, durchkratzen bei Bestückung der
Doppeldiode BAV199 und geänderter Bauelemente-Werte für 3,3-Volt-Betrieb.
Außerdem durchkratzen zur Messung der Stromaufnahme.
3,3 Volt USB-Pegel sind erforderlich bei Betrieb mit bestimmten Notebooks,
etwa Toshiba Tecra S11-11P!
Entweder mittels BAV199 oder zwei fliegenden Zener-Dioden 3,9 V (schlechter, aber 5-Volt-E/A).
(131209)
Nachfolger
Wegen der Probleme von Low-Speed, V-USB und Windows Vista+
wird die Low-Speed-Schiene auslaufen,
und es wird ein Full-Speed-Controller eingesetzt.
Wie auch bei der High-Speed-Schiene gibt es hierbei 20 statt 17 Ein/Ausgänge.
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.