aboutsummaryrefslogtreecommitdiff
path: root/sys/doc/ata/ata-10
diff options
context:
space:
mode:
Diffstat (limited to 'sys/doc/ata/ata-10')
-rw-r--r--sys/doc/ata/ata-10213
1 files changed, 213 insertions, 0 deletions
diff --git a/sys/doc/ata/ata-10 b/sys/doc/ata/ata-10
new file mode 100644
index 000000000000..f4c0336944d4
--- /dev/null
+++ b/sys/doc/ata/ata-10
@@ -0,0 +1,213 @@
+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
+