3、ATA接口的三种数据传输方式
(1)PIO(Programmable Input-Output)传输,可以分为PIO寄存器传输和PIO数据传输。PIO寄存器传输主要用于对ATA设备中的寄存器进行读写。读写的数据位数为8位DD[7:0]。ATA主机控制器根据所要读写的寄存器地址设置CS0_、CS1_、DA[2:0]地址信号,同时将DIOW_或DIOR_设为有效,ATA主机控制器或ATA设备驱动数据总线释放数据。当DIOW_或DIOR_撤销时,ATA主机控制器或ATA设备从数据总线上读取数据。对于PIO数据传输,所读写的地址为数据端口,读写数据为16位。
(2)MDMA(Multiword DMA)传输,用于数据传输。ATA主机控制器向ATA设备下达MDMA传输命令后,等待设备向主机发送DMARQ数据传输请求信号。当主机收到DMARQ信号后,向设备发送DMACK_响应信号。MDMA数据传输过程与PIO方式大致相同,也是通过DIOW_或DIOR_的周期变化来控制数据的传输。在数据传输过程中,DMARQ和DMACK_握手信号一直保持有效。
(3)UDMA(Ultra DMA),也是用于数据传输。这种传输方式的传输速度比MDMA要快,ATA/ATAPI-5协议中所定义的UDMA传输方式最高数据传输速率是66MB/s。UDMA对数据传输的控制信号重新进行了定义。另外,UDMA还引入了CRC数据校验机制,保证了数据传输过程的正确性,但其传输过程较为复杂。
4、ATA接口寄存器的定义
ATA主机与设备的通信是通过主机对ATA接口上的寄存器的读写实现的,而这些接口寄存器由主机发送的地址信号CS1_、CS0_、DA2、DA1、DA0来进行寻址。除了在DMA传输模式下,CS1_和CS0_全有效或全无效都是不可用的地址,在这种情况下,数据线应该在释放状态下(即数据总线没有驱动源)。当CS0_无效,CS1_有效时,DA[2:0]只有在值为06H和07H时地址才为有效,在其他的无效地址状态下,设备会使数据总线处于高阻态。
ATA接口寄存器可分为命令块寄存器和控制块寄存器。
(1)命令块寄存器是主机用来向设备传输命令或从设备读取状态的,这组寄存器包括:
柱面号高(Cylinder High)8位寄存器
柱面号低(Cylinder Low)8位寄存器
设备/磁头(Device/Head)寄存器
扇区数(Sector Count)寄存器
扇区号(Sector Number)寄存器
命令(Command)寄存器
状态(Status)寄存器
特征(Features)寄存器
错误(Error)寄存器
数据(Data)寄存器。
(2)控制块寄存器是用来控制设备和替换状态,这组寄存器包括:
设备控制(Device Control)寄存器
替换状态(Alternate Status)寄存器
驱动器地址(Drive Address)寄存器
存储体寻址约束
以下是存储体开始反映命令的步骤:
1) 存储体不处于休眠状态;
2) 若存储体处于休眠状态,那么,即使DMACK-此时变为有效,存储体将忽略DIOW-/DIOR-变成有效。若存储体不支持包命令特性集,那么存储针对命令的反映在表41中,若执行包命令特性集,反映在表42中
存储体被选择意味着DEV位对应的逻辑设备号码。
在设备被选择和DMACK-被置为有效,时只用于Multiword DMA,不能用于超DMA;
注:DIOX-栏除外,A=置为有效,N=置为无效,Z=释放,X=不在乎;
在DIOX-栏中:R=DIOR-被置为有效,W=DIOW-被置为有效,X=要么DIOR-要么DIOW-被置为有效
5 I/O寄存器描述
5.1 概述
命令寄存器用于发送命令到存储体或将存储体的状态发送给主机;该寄存器包好高位的LBA,中位LBA,设备寄存器,扇区数,命令寄存器,状态寄存器,特性寄存器,错误寄存器,和数据寄存器。
控制寄存器用于控制和传递交替状态。该寄存器包含设备控制和交替状态寄存器;
每个寄存器的包含如下内容:
+++地址: 寄存器的CS和DA地址;
+++方向: 指明主机对寄存器是读还是写,只读,或只写;
+++存取约束: 指明什么时候才可以存取;
+++作用: 指明存取该寄存器的作用;
+++功能描述: 描述寄存器的功能;
+++区/位描述: 描述寄存器包含的内容;
5.2 交替状态寄存器(读):--与设备控制寄存器复用(写)
地址:
即:CS(1:0)=10;DA(2:0)=110;
方向:
这是只读寄存器,若地址被主机写,那么存储体控制寄存器为被写;
存取约束:
一旦BSY被设为1,其他的位都不能用,当存储体处于休眠状态,该寄存器中的值无效;
作用:
读该寄存器不会清除一个终端等待;
功能描述:
该寄存器包含和状态寄存器同样的内容。
5.3 命令寄存器(写):--与状态寄存器复用(读)
地址:
即:CS(1:0)=01;DA(2:0)=111;
方向:
只写寄存器,若地址被主机写,表明状态寄存器处于被读的状态;
存取约束:
除了DEVICE RESET命令,其他的命令只有在BSY和DRQ都被清零并且DMACK-没有被设置为有效的情况下写该寄存器;若在BSY或DRQ被设为1时写该寄存器,那么命令寄存器写的结果就是不确定的,除了DEVICE RESET命令。一个处于休眠模式的存储体,若执行PACKET 命令特性集,除了DEVICE RESET命令,其他的命令写的寄存器的值都会被忽略。
作用:
当该命令寄存器被写完后,就开始执行命令,当这个寄存器被写,命令模块寄存器的内容就变成了这个命令的参数。写这个寄存器,会清除任何等待的中断条件;
功能描述:
该寄存器包含:发送给存储体的命令码;命令写到该命令寄存器后即刻执行命令,可执行的命令和买条命令的代码都总结在V2的附录中的表中。
区/位描述:
5.4数据端口
地址:
当DMACK-被设为有效,CS(1)-和CS(0)-都被设为无效,传递16位宽度的数据
即:CS(1:0)=00;
方向:
该端口是一个读/写端口;
存取约束:
该端口只用于DMA数据传输,当DMACK-和DMARQ都设为有效时;
作用:
DMA输出数据传输通过一系列的写这个端口来执行,每个写传输的数据都是在前一个写数据之后。DMA输入数据的传输被一系列的读端口执行;每个读传输的数据都是在前一个读之后,每次在读DMA输入数据和写DMA输出数据的结果都是无效的;
功能描述:
数据端口是16位宽度;
区或位描述:
5.5 数据寄存器:
地址:
即CS(1:0)=01;DA(2:0)=000;
方向:
读/写寄存器
存取的约束:
该寄存器只用于PIO数据传输,当DRQ被设为1,并且DMACK-没有被设为有效时;该寄存器的内容在休眠模式下无效;
作用:
PIO输出数据传输是通过一系列的写寄存器来完成的,每次写传输数据在上次之后;PIO输入数据传输是通过一系列的读该寄存器来完成,每次读传输数据在上次写之后。PIO输入期间的读或PIO输出期间的写的结果都是无效的。
功能描述:
该数据寄存器的宽度是16位;一个CFA存储体的PIO数据传输模式的数据宽度是8位,此时只用到了DD7~DD0.
区/位描述:
5.6设备寄存器
地址:
即:CS(1:0)=01;DA(2:0)=110;
方向:
读/写寄存器
存取约束:
只有在BSY和DRQ被清零,并且DMACK-被设为无效是可以写的。它的内容只有在BSY被清0时才有效。若BSY或DRQ被设为1的时候,写该寄存器,其结果将是无效的。若存储体在不执行PACKET命令特性命令设置,在休眠模式下,这个寄存器的内容无效,而在执行PACKET命令特性命令设置,在休眠模式下,这个寄存器的内容有效。
作用:
当这个寄存器被主机或存储体的信号写的时候,DEV变成有效,其他位变成命令的参数,当命令寄存器在被写的时候。
这个寄存器的第四位选择存储体,其他为示命令而定;
区/位描述
------Obsolete---表示这些位不用了,一些主机会设置这些位位1,但是存储体会忽略这些位;
------#表示这些位视命令而定;
——DEV,存储体选择,为0选存储体0,为1选存储体1;
5.7 存储体控制寄存器
地址:
即:CS(1:0)=10,DA(2:0)=110;
方向:
这是个只写寄存器,若地址被主机读,那么交替状态寄存器在被主机读;
存取约束:
只有在DMACK-没有设为有效时,寄存器才可以被写;
作用:
在被写的时候,这个寄存器的值就会起作用
功能描述:
寄存器允许主机软复位连接的存储体,并且可以通过选择的存储体,使得INTRQ信号有效或无效;当设备控制寄存器被写的时候两个存储体都要响不管哪个存储体被选择。当SRST被设置为1两个存储体都要执行软复位协议。存储体在休眠模式应该响应SRST的信号。
区/位描述
——HOB(命令字节的高位)在48位寻址特性设置中定义,每次写命令寄存器都要清除HOB位位0;
——BIT(6:3),保留;
——SRST是软件复位位(参考6.2);
——nIEN是存储体使主机INTRQ信号有效的使能。当被选择的存储体的nIEN位被清零,那么应该通过一个三态缓冲使INTRQ有效,并且根据存储体适当地启动有效或无效。当被选择的存储体的nIEN位被置为1,存储体应该释放INTRQ信号;
——BIT0应该被清零
5.8 错误寄存器
地址:
即:CS(1:0)=01;DA(2:0)=001;
方向:
这是个只读寄存器;若主机在写地址那么特性寄存器在被写入。
存取约束:
当BSY和DRQ被清零,并且ERR或 SE被置为1时,寄存器的内容是有效的。
在上电复位、执行完硬件、软件复位或者是执行完EXECUTE DEVICE DIAGNOSTICS或DEVICE RESET命令后,这个寄存器的内容应该是有效的。
当存储体在休眠状态时该寄存器的值无效。
作用:
无
功能描述:
在执行完所有的命令除了EXECUTE DEVICE DIAGNOSTICS或DEVICE RESET命令后,若状态寄存器的ERR位被置为1,该寄存器的内容将会有效。
在上电,硬复位,软复位后,或者执行完EXECUTE DEVICE DIAGNOSTICS或DEVICE RESET命令,该寄存器包含一个诊断码。
区/位描述:
注:
——第二位-ABRT被设为1表明命令执行失败,因为命令码或者命令参数不合法,不支持该命令,该命令的前提条件不满足,或出现其他故障;
——#,该位由命令决定;
5.9 特性命令寄存器--错误寄存器
地址:
即:CS(1:0)=01;DA(2:0)=001;
方向:
只写寄存器;若地址被主机读,那么错误寄存器在被主机读;
存取约束:
当BSY和DRQ等于0且DMACK-被设为无效的时候,应该写该寄存器;若BSY,或DRQ被设为0,那么写该寄存器的结果是无效的。
作用:
若命令寄存器被写,那么这个寄存器的内容就变成命令参数;
功能描述:
这个寄存器的值决定于命令的类型。
5.10 LBA高寄存器/字节记数高位寄存器
即:CS(1:0)=01;DA(2:0)=101;
方向:
读/写寄存器;
存取约束:
当BSY和DRQ被清0,并且DMACK-无效,寄存器可写。当BSY和DRQ被清0,寄存器的值有效。当BSY或DRQ被置1时,写寄存器,结果是无法确定的。在休眠模式时,寄存器的值无效。
作用:
命令寄存器被写入,寄存器的值为命令参数。
功能描述:
寄存器的值决定于命令的类型(参考第6章)。
对于没有执行包命令特性设置的存储体,寄存器为LBA高寄存器。
对于有执行包命令特性值设置的存储体,寄存器为字节记数高位寄存器。
5.11 LBA低寄存器
方向:
读/写寄存器;
存取约束:
当BSY和DRQ被清0,并且DMACK-无效,寄存器可写。当BSY和DRQ被清0,寄存器的值有效。当BSY或DRQ被置1时,写寄存器,结果是无法确定的。在休眠模式时,寄存器的值无效。
作用:
命令寄存器被写入,寄存器的值为命令参数。
功能描述:
寄存器的值决定于命令的类型(参考第6章)。
5.12 LBA中寄存器/字节记数低位寄存器
方向:
读/写寄存器;
存取约束:
当BSY和DRQ被清0,并且DMACK-无效,寄存器可写。当BSY和DRQ被清0,寄存器的值有效。当BSY或DRQ被置1时,写寄存器,结果是无法确定的。在休眠模式时,寄存器的值无效。
作用:
命令寄存器被写入,寄存器的值为命令参数。
功能描述:
寄存器的值决定于命令的类型(参考第6章)。
对于没有执行包命令特性设置的存储体,寄存器为LBA中寄存器。
对于有执行包命令特性值设置的存储体,寄存器为字节记数低位寄存器。
5.13 扇区计数/中断响应寄存器
方向:
读/写寄存器;
存取约束:
当BSY和DRQ被清0,并且DMACK-无效,寄存器可写。当BSY和DRQ被清0,寄存器的值有效。当BSY或DRQ被置1时,写寄存器,结果是无法确定的。在休眠模式时,寄存器的值无效。
作用:
命令寄存器被写入,寄存器的值为命令参数。
功能描述:
寄存器的值依赖于命令类型(参考第6章)。
对于没有执行包命令特性设置的存储体,寄存器为扇区计数。
对于有执行包命令特性值设置的存储体,寄存器为中断响应寄存器。
5.14 状态寄存器---命令寄存器(复用)
方向:
只读。如果写入地址,则为命令寄存器
存取约束:
如果BSY置1,寄存器的值将会被忽略,除位BSY外。在休眠模式时,寄存器的值无效。
作用:
当中断挂起后读这个寄存器会清0中断挂起位(参考第8章)。
当一个中断发生了,在主机能够识别信号INTRQ之前主机不能读状态寄存器,否则会清除挂起位,无法识别中断请求类型。
功能描述:
这个寄存器包含了设备状态,寄存器值会被更新反映当前设备的状态。
区/位描述:
--BSY(Busy)
BSY为1表示存储体忙。在主机写命令寄存器后,在命令完成前或是设备因覆盖命令而执行总线释放,存储体会设置BSY=1或DRQ=1。