ECP address/RLE bytes or data bytes may be sent automatically by writing the ecpAFifo or ecpDFifo respectively.
Note that all FIFO data transfers are byte wide and byte aligned. Address/RLE transfers are byte-wide and only
allowed in the forward direction.
The host may switch directions by first switching to mode = 001, negotiating for the forward or reverse channel,
setting direction to 1 or 0, then setting mode = 011. When direction is 1 the hardware shall handshake for each
ECP read data byte and attempt to fill the FIFO. Bytes may then be read from the ecpDFifo as long as it is not
empty .
ECP transfers may also be accomplished (albeit slowly) by handshaking individual bytes under program control in
mode = 001, or 000.
Termination from ECP Mode
Termination from ECP Mode is similar to the termination from Nibble/Byte Modes. The host is permitted to terminate
from ECP Mode only in specific well-defined states. The termination can only be executed while the bus is in the
forward direction. To terminate while the channel is in the reverse direction, it must first be transitioned into the
forward direction.
Command/Data
ECP Mode supports two advanced features to improve the effectiveness of the protocol for some applications. The
features are implemented by allowing the transfer of normal 8 bit data or 8-bit commands (Table 70).
When in the forward direction, normal data is transferred when HostAck is high and an 8 bit command is transferred
when HostAck is low.
The most significant bit of the command indicates whether it is a run-length count (for compression) or a channel
address.
When in the reverse direction, normal data is transferred when PeriphAck is high and an 8 bit command is transferred
when PeriphAck is low. The most significant bit of the command is always zero. Reverse channel addresses are
seldom used and may not be supported in hardware.
Table 69 - Forward Channel Commands (HostAck Low) Reverse
Channel Commands (PeripAck Low) Data Compression
D7
0
D[6:0]
Run-Length Count (0-127)
(mode 0011 0X00 only)
1
Channel Address (0-127)
The FDC37N3869 supports run length encoded (RLE) decompression in hardware and can transfer compressed data
to a peripheral. Run length encoded (RLE) compression in hardware is not supported. To transfer compressed data
in ECP mode, the compression count is written to the ecpAFifo and the data byte is written to the ecpDFifo.
Compression is accomplished by counting identical bytes and transmitting an RLE byte that indicates how many times
the next byte is to be repeated. Decompression simply intercepts the RLE byte and repeats the following byte the
specified number of times. When a run-length count is received from a peripheral, the subsequent data byte is
replicated the specified number of times. A run-length count of zero specifies that only one byte of data is represented
by the next data byte, whereas a run-length count of 127 indicates that the next byte should be expanded to 128
bytes. To prevent data expansion, however, run-length counts of zero should be avoided.
Pin Definition
The drivers for nStrobe, nAutoFd, nInit and nSelectIn are open-collector in mode 000 and are push-pull in all other
modes.
ISA Connections
The interface can never stall causing the host to hang. The width of data transfers is strictly controlled on an I/O
address basis per this specification. All FIFO-DMA transfers are byte wide, byte aligned and end on a byte boundary.
(The PWord value can be obtained by reading Configuration Register A, cnfgA, described in the next section).
Single byte wide transfers are always possible with standard or PS/2 mode using program control of the control
signals.
SMSC DS – FDC37N3869
Page 85
Rev. 10/25/2000