This commit was generated by cvs2svn to track changes on a CVS vendor
[unix-history] / sys / i386 / doc / ata / ata-10
10. Protocol Overview
Commands can be grouped into different classes according to the protocols
followed for command execution. The command classes with their associated
protocols are defined below.
For all commands, the host first checks if BSY=1, and should proceed no
further unless and until BSY=0. For most commands, the host will also wait for
DRDY=1 before proceeding. Those commands shown with DRDY=x can be executed
when DRDY=0.
Data transfers may be accomplished in more ways than are described below, but
these sequences should work with all known implementations of ATA drives.
10.1 PIO Data In Commands
This class includes:
- Identify Drive
- Read Buffer
- Read Long
- Read Sector(s)
Execution includes the transfer of one or more 512 byte (>512 bytes on Read
Long) sectors of data from the drive to the host.
a) The host writes any required parameters to the Features, Sector Count,
Sector Number, Cylinder and Drive/Head registers.
b) The host writes the command code to the Command Register.
c) The drive sets BSY and prepares for data transfer.
d) When a sector of data is available, the drive sets DRQ and clears BSY
prior to asserting INTRQ.
e) After detecting INTRQ, the host reads the Status Register, then reads one
sector of data via the Data Register. In response to the Status Register
being read, the drive negates INTRQ.
f) The drive clears DRQ. If transfer of another sector is required, the drive
also sets BSY and the above sequence is repeated from d).
10.1.1 PIO Read Command
+- a) -+-- b) -+ +- e) -+--------+ +- e) -+--------+
|Setup | Issue | | Read |Transfer| | Read |Transfer|
| |Command| |Status| Data |:::::::|Status| Data |
+------+-------+ +------+--------+ +------+--------+
|BSY=0 | |BSY=1 |BSY=0 | |BSY=1 |BSY=0 | |BSY=1
|DRDY=1 | | | | | |
|DRQ=1 | |DRQ=0 |DRQ=1 | |DRQ=0
|Assert|Negate | |Assert|Negate
INTRQ INTRQ INTRQ INTRQ
If Error Status is presented, the drive is prepared to transfer data, and it
is at the host's discretion that the data is transferred.
10.1.2 PIO Read Aborted Command
+- a) -+-- b) -+ +- e) -+
|Setup | Issue | | Read |
| |Command| |Status|
+------+-------+ +------+
|BSY=0 | |BSY=1 |BSY=0 |
|DRDY=1 | |
|DRQ=1 |DRQ=0
|Assert|Negate
INTRQ INTRQ
Although DRQ=1, there is no data to be transferred under this condition.
10.2 PIO Data Out Commands
This class includes:
- Format
- Write Buffer
- Write Long
- Write Sector(s)
Execution includes the transfer of one or more 512 byte (>512 bytes on Write
Long) sectors of data from the drive to the host.
a) The host writes any required parameters to the Features, Sector Count,
Sector Number, Cylinder and Drive/Head registers.
b) The host writes the command code to the Command Register.
c) The drive sets DRQ when it is ready to accept the first sector of data.
d) The host writes one sector of data via the Data Register.
e) The drive clears DRQ and sets BSY.
f) When the drive has completed processing of the sector, it clears BSY and
asserts INTRQ. If transfer of another sector is required, the drive also
sets DRQ.
g) After detecting INTRQ, the host reads the Status Register.
h) The drive clears the interrupt.
i) If transfer of another sector is required, the above sequence is repeated
from d).
10.2.1 PIO Write Command
+- a) -+-- b) -+ +--------+ +- e) -+--------+ +- e) -+
|Setup | Issue | |Transfer| | Read |Transfer| | Read |
| |Command| | Data | |Status| Data |:::::::|Status|
+------+-------+ +--------+ +------+--------+ +------+
|BSY=0 | |BSY=1 |BSY=0 |BSY=1 |BSY=0 | |BSY=1 |BSY=0 |
|DRDY=1 | | | | | | |
|DRQ=1 |DRQ=0 |DRQ=1 | |DRQ=0 | |
| | |Assert|Negate | |Assert|Negate
INTRQ INTRQ INTRQ INTRQ
10.2.2 PIO Write Aborted Command
+- a) -+-- b) -+ +- e) -+
|Setup | Issue | | Read |
| |Command| |Status|
+------+-------+ +------+
|BSY=0 | |BSY=1 |BSY=0 |
|DRDY=1 | |
| |Assert|Negate
INTRQ INTRQ
10.3 Non-Data Commands
This class includes:
- Execute Drive Diagnostic (DRDY=x)
- Idle
- Initialize Drive Parameters (DRDY=x)
- Read Power Mode
- Read Verify Sector(s)
- Recalibrate
- Seek
- Set Features
- Set Multiple Mode
- Standby
Execution of these commands involves no data transfer.
a) The host writes any required parameters to the Features, Sector Count,
Sector Number, Cylinder and Drive/Head registers.
b) The host writes the command code to the Command Register.
c) The drive sets BSY.
d) When the drive has completed processing, it clears BSY and asserts INTRQ.
g) The host reads the Status Register.
h) The drive negates INTRQ.
10.4 Miscellaneous Commands
This class includes:
- Read Multiple
- Sleep
- Write Multiple
- Write Same
The protocol for these commands is contained in the individual command
descriptions.
10.5 DMA Data Transfer Commands (Optional)
This class comprises:
- Read DMA
- Write DMA
Data transfers using DMA commands differ in two ways from PIO transfers:
- data transfers are performed using the slave-DMA channel
- no intermediate sector interrupts are issued on multi-sector commands
Initiation of the DMA transfer commands is identical to the Read Sector or
Write Sector commands except that the host initializes the slave-DMA channel
prior to issuing the command.
The interrupt handler for DMA transfers is different in that:
- no intermediate sector interrupts are issued on multi-sector commands
- the host resets the DMA channel prior to reading status from the drive.
The DMA protocol allows high performance multi-tasking operating systems to
eliminate processor overhead associated with PIO transfers.
a) Command Phase
1) Host initializes the slave-DMA channel
2) Host updates the Command Block Registers
3) Host writes command code to the Command Register
b) Data Phase - the register contents are not valid during a DMA Data Phase.
1) The slave-DMA channel qualifies data transfers to and from the drive
with DMARQ
c) Status Phase
1) Drive generates the interrupt to the host
2) Host resets the slave-DMA channel
3) Host reads the Status Register and Error Register
10.5.1 Normal DMA Transfer
+--------------+-------+ +---------------------+ +---------+------+
|Initialize DMA|Command| | DMA Data Transfer | |Reset DMA|Status|
+--------------+-------+ +---------------------+ +---------+------+
|BSY=0 |BSY=1 |BSY=x |BSY=1 |BSY=0
|DRQ=x |nIEN=0
10.5.2 Aborted DMA Transfer
+--------------+-------+ +-------------+ +---------+------+
|Initialize DMA|Command| | DMA Data | |Reset DMA|Status|
+--------------+-------+ +-------------+ +---------+------+
|BSY=0 |BSY=1 |BSY=x |BSY=1 |BSY=0
|DRQ=1 |nIEN=0
10.5.3 Aborted DMA Command
+--------------+-------+ +---------+------+
|Initialize DMA|Command| |Reset DMA|Status|
+--------------+-------+ +---------+------+
|BSY=0 |BSY=1 |BSY=1 |BSY=0
|nIEN=0