From: neil@uninet.cpd.com (Neil Gorsuch)
Subject: Re: Printer Parallel port misery
Organization: Uninet Peripherals, Inc.
Date: Thu, 19 Nov 1992 00:52:03 GMT

In article <1992Nov18.162359.11122@cc.ic.ac.uk> cmaae47@imperial.ac.uk writes:
>In article <1992Nov16.141604.16853@eurohub.neu.sgi.com>, joe@spectrum.neu.sgi.com (Joe Elliott) writes:
>- I have been having problems with printers for some time now. All of them
>- with PostScript printers and parallel ports.
>- Things are great for small print jobs but given a reasonable load, the port
>- just stops and the jobs keep queueing up. 
>Cannot really be Xon/Xoff, as the normal Centronics printer protocol is
>simplex - i.e. printer cannot drive port, so cannot send (ascii text) information
>back to the computer. PostScript printers sometimes give you messages.

I don't know exactly what kind of hardware the computer is using for
it's Centronics interface, but here is some general information that
might be helpful.

A Centronics interface uses 1 output signal and 2 input signals for
output data flow control.  There is an output strobe line that is
pulsed by the computer interface every time a new byte is available on
the data lines, an input acknowledge line that is pulsed by the
printer when the byte is read from the data lines by the printer, and
a busy line that is asserted by the printer when it is not ready to
accept another byte yet.  There are other signals for status such as
paper empty and printer fault, but they normally don't come into play
for output throttling.  Before another byte is placed on the
Centronics data lines by the computer, it is supposed to wait until
the busy line is clear, and also until the previous output byte (if
there was one) was acknowledged by a pulse on the acknowledge line.
On our Centronics interface, we have seen 2 ways that things can
"hang" when in output mode:

1. If the computer Centronics interface is a lot faster than the
printer Centronics interface, and the Centronics cable is not very
good (most aren't and have lots of capacitance and cross-talk) or are
not terminated very well at either end, a false acknowledge pulse can
be seen because of cross-talk/ringing, and the busy signal assertion
will be delayed long enough that another byte will be sent out first.
Then because the printer wasn't ready for the second byte, it ignores
it and will never acknowledge it and the computer interface will wait
forever for the acknowledge pulse.  There is no good way to put an
arbitrary timeout value either, because of the widely varying amounts
of time that a printer can wait to acknowledge an output byte.  This
situation can be fixed by a better cable.  In our interface, the
output cycle is slowed down by default and needs a software switch to
be set to go into higher speed mode.  This way it will usually work in
the default case of a marginal Centronics cable.

2. A lot of Centronics computer interfaces simply ignore the
acknowledge pulse and only use the busy signal for output throttling.
They can get away with this in almost every case, since almost every
printer interface has a hardware latch that sets the busy signal true
when a the strobe pulse is seen.  The latch is then cleared by the
printer's firmware when the data byte has been read.  Our older models
did this, and if there was a Centronics cable with a lot of
capacitance, the busy signal would take so long to be seen in the
computer interface that it would send out another byte prematurely,
and everything would hang again.  The only cure in that case was a
better Centronics cable.
--
Neil Gorsuch  INTERNET: zardoz!uninet!neil@ics.uci.edu  UUCP: uunet!uninet!neil
MAIL: 17981 Sky Park Blvd., Suite O, Irvine, CA, 92714  PHONE: +1 714 263 4222
Uninet Peripherals, Inc.                                FAX: +1 714 263 4299