The ECP, or Extended Capabilities Port, also uses hardware handshaking. It adds a DMA capability, and hence is favored for block devices. Like EPP, ECP has an addressing capability distinguished from data transfers. ECP addresses are signed, so the values are -127 to 127. Both are accessed through 16 byte FIFOs. For this reason and others, ECP devices are more likely to benefit from a kernel driver.
Using PPDEV, the proper mode is PARPORT_MODE_ECP. Read and write operations should proceed as with EPP. PPDEV currently has no address reading capability (this has limited use in any event).
For direct IO, the address FIFO is located at the normal base address of the parallel port. Hence an address write looks like:
unsigned char address; BASE = 0x378; outb(address,BASE); |
The data FIFO is located at the base address + 0x400, so a data write is done:
unsigned char data; outb(data,BASE + 0x400); |
Reads are just as simple. ECP is really designed for DMA transfers however. DMA transfers are beyond the scope of this document, but if you are sufficiently knowledgeable to use them, the technical information available for the ECP port will be sufficient.