UsbPrn Adapter

You have such a useless USB ParallelPrinter Adapter and need a true parallel port?

With some extra components and my inpout32.dll, you get one! Almost:

No kernel hacks. No driver. Simple user-mode privilege. Compatible from Windows 98 upto Windows 10 64 bit.

Perfect for serial microcontroller programming equipment, solves the chicken-or-egg problem.

Technical Background

Such converters implement the USB printer class on the USB end, and a suitable parallel port for old-style printers on the other end. Simple, but nothing more. As a negative side effect, such adapters keep their data port in high-impedance state while non-communication. Therefore, a latch is needed for capturing the last output data byte.

Not bidirectional?

Such adapters often said to have a “bidirectional” interface. This is only true for the IEEE1284 Negotiation in Nibble Mode, not for the 8-bit data port.

However, forget using the IEEE1284 Negotiation for your data input! It will definitely introduce more trouble than you ever expect. If you really need a higher data input rate, forget using your USB→ParallelPrinter adapter for that purpose.

Simple Solution

Input Only

For querying status lines no extra hardware is necessary. Changing software by using my inpout32.dll is the only task.

Pin numbers are for D-Sub 25, not for the 36-pin Centronics printer connector!

Output Too

For the 8 Data bits you need a latch oder flipflop circuit! Valid data only appears some microseconds around STROBE pulse. (Edge-triggered) flipflops advance over latches that clock polarity is out of concern.
The necessary flipflop can be powered by the parallel port. The eight LEDs represent the outputs and have to be omitted for true application
If someone needs less bits, a smaller flipflop IC is still suitable. For six bits, use 74HC(T)174. For four bits there are 74HC(T)175, '192, '193, '195 … or CMOS 4029, 4035, 4042 …

In case of older bi-polar ICs (74LS), the IC must be powered externally. But even for CMOS, you should consider external powering when available.

The schematic above draws power from INIT pin.


Hint: In no case, CCD picture data should be transferred via such a “solution”! It would be incredile slow! In such a case, a microcontroller, customized firmware, and customized DLL is necessary. This board is an excellent starting point with a good price.

“Non-Linar” Routing or More I/O Lines

Some applications need other output or input lines, so, once building an adapter with the flipflop IC, one can swap the lines between the two sides. But that requires some more virtualization inside inpout32.dll, which is currently not implemented.

More complex circuitry at the output of your USB ParallelPrinter converter may enable more output (12) and input (5) lines but needs a very specialized build of inpout32.dll for parallel-port virtualization.

Having a full-fledged slower parallel port would require four standard logic ICs and some clever software control
Ask me if you need support in this case!

Parallelizing of S3 to S3..S5 boosts speed by factor 3. Therefore 3 kBit/s. The absolute limit for such an adapter.

More speed for synchronous-serial input

The added CMOS flipflops parallelize one serial input onto three parallel lines. This will boost bit-serial devices by factor 3. Sounds not much, but it's still worth to implement for some cases.

The majority of chip programmers I've seen uses BUSY for serial read data. Therefore I choosed that pin for de-serializing. Examples:

Negative examples are there too:


The schematic. Eagle source

[Details and thoughts are explained on German page.]

The circuitry fits into a dongle-style shell.

The ready-made device with a small schematic that clarifies what's inside

Keep the parallel port wires as short as possible! In case of more distance needed, prefer extending the USB wire.