Hi, I'm designing an embedded ATA controller that supports UDMA operation. I've found something in the T13 specs that is causing headaches. They seem to require that the host read the status register after issuing a "Read DMA" or "Write DMA" command. Furthermore, it seems to suggest that the host wait until [(BSY=1 & DRQ=0 & DMARQ=1) or (BSY=0 & DRQ=1 & DMARQ=1)] before proceeding to the data transfer phase. It seems to me that the host should just send the command wait for either DMARQ=1 (and start transferring data) or INTRQ=1 (error, send IRQ to the CPU to handle it). In that case there is no need to read or poll on the status register. Or maybe it's better to read the Status register once after the command is sent to make sure that the ERR bit isn't set. But this business of waiting for the status bits _and_ the DMARQ doesn't seem consistent with the goal of pushing the ATA driver off the CPU. Can anyone help?
TIA, Matt