ATA物理接口引脚图(40针)ATA接口信号定义示意图ATA接口信号描述:(1)CS0-和CS1一片选(ChipSelect)信号。ATA主机用来选择命令块寄存器或控制块寄存器。当DMACK信号为有效状态时,表示正在进行MDMA或UDMA传输,CSI和CSO应该处于无效状态。(2)DA0-DA2:设备地址(DeviceAddress)信号。与CS0和CS1_一块构成寄存器或数据端口选择地址。(3)DD0-DD15:ATA主机控制器和设备之间的16位双向数据总线。如果是对寄存器进行操作时,只使用低8位。(4)DIOR:HDMARDY:HSTROBE:①DIOR-(DeviceI/ORead),用于PIO和MDMA传输方式,当其为有效时,表示主机从设备读取数据;②HDMARDY_(HostDMAReady),用于UDMA读数据方式,当其有效时表示主机准备好接收数据;③HSTROBE(HostDataStrobe),用于UDMA写数据方式,在该信号的上升沿和下降沿,主机都会发送数据。(5)DIOW:STOP:①DIOW-(DeviceI/OWrite),用于PIO和MDMA传输方式,当其为有效时,表示主机向设备写数据;②STOP,用于UDMA传输方式,当其有效时表示主机将要停止读写数据。(6)DMARQ:DMA请求。当主机与设备之间进行DMA数据传输时,ATA设备将会首先发出该信号。(7)DMACK:DMA响应。在ATA主机检测到设备发出DMARQ信号后,如果可以进行MDMA或UDMA数据传输,将会置该信号有效(低电平)。(8)INTRQ:中断请求信号。只有设备控制寄存器(DeviceControlRegister)中的nIEN位为0,ATA设备才能发出INTRQ信号。(9)IORDY:DDMARDY:DSTROBE:IORDY(IO/Ready),用于PIO传输方式,当其为无效状态时(低电平),表示要延长PIO传输周期;DDMARDY(DeviceDMAReady),用于UDMA写数据方式,当其有效时表示设备准备好接收数据;DSTROBE(DeviceDataStrobe),用于UDMA数据方式,在该信号的上升沿和下降沿,设备都会发送数据。ATA接口寄存器(TaskFileRegister)的定义及描述:ATA主机与设备的通信是通过主机对ATA接口上的寄存器实现的,而这些接口寄存器由主机发送的地址信号CS1,CS0、DA0-DA2,来进行寻址。除了在DMA传输模式下,CSl和CSO全有效或全无效都是不可用的地址,在这种情况下,数据线应在释放状态下(即数据总线没有驱动源).当CSO_无效,CS1_有效时,DA[2:0]只有在值为06H和07H时地址才为有效,在其他的无效地址状态下,设备会使数据总线处于高阻态。ATA接口寄存器可分为命令块寄存器和控制块寄存器。命令块寄存器是主机用来向设备传输命令或从设备读取状态的,这组寄存器包括柱面号高(CylinderHigh)8位寄存器、柱面号低(CylinderLow)8位寄存器、设备磁头(Device/Head)寄存器、扇区数(SectorCount)寄存器、扇区号(SectorNumber)寄存器、命令(Command)寄存器、状态(Status)寄存器、特征(Features)寄存器、错误(Error)寄存器和数据(Data)寄存器。控制块寄存器是用来控制设备和替换状态,这组寄存器包括设备控制(DeviceControl)寄存器、替换状态(AlternateStatus)寄存器和驱动器地址(DriveAddress)寄存器。(1)数据寄存器:是主机和设备的缓冲区之间进行数据交换用的寄存器,使用该寄存器进行数据传输的方式是PIO传输方式,数据交换的另外两种方式是MDMA和UDMA方式,这两种方式不使用数据寄存器进行数据交换。(2)错误寄存器:该寄存器包含了本次命令执行后设备的诊断信息。在启动系统、设备复位或执行设备的诊断程序后,也在该寄存器中保存着一个诊断码。(3)扇区数寄存器:指明所要读写的扇区总数,其中0表示传输256个扇区,如果在数据读写过程发生错误,寄存器将保存尚未读写的扇区数目。下面的扇区号寄存器、柱面号寄存器、设备/磁头寄存器三者合称为介质地址寄存器。介质地址有CHS方式或LBA方式,而采用何种方式是在设备磁头寄存器中指定。(4)扇区号寄存器:指定所要读/写的起始扇区号。(5)柱面号寄存器:指明所要读/写的起始柱面号。(6)驱动器磁头寄存器:指定硬盘驱动器号与磁头号和寻址方式,其中第4位的内容指定的是设备号,当为0时选即主设备,为1时选择从设备。(7)状态寄存器:保存设备执行命令后的状态和结果,寄存器各位所表示的内容如表所示。上表中各位的功能如下:BSY位:为1时表示设备忙,正在执行命令。主机在发送命令前必须先判断该位是否为0;DRDY位:为1时表示设备准备好,可以接收命令;DRQ位:为1表示请求主机进行数据传输(读或写);ERR位:该位为1表示在结束前次的命令执行时发生了无法恢复的错误,在错误寄存器中保存了更多的错误信息;#位表示该位的内容随命令的不同而不同,Obsolete位表示该位不使用。(8)命令寄存器:包含执行的命令代码。在向命令寄存器写命令以前,相关该命令的参数必须先写入。(9)特征寄存器:此寄存器中的内容在命令被执行时作为命令参数,只有在BSY和DRQ都为零且DMACK无效时该寄存器才能被写入。(10)设备控制寄存器:将该寄存器的SRST位设置为1,可以使设备处于复位状态。nIEN表示是否允许中断,0为允许,设备可以发送INTRQ信号。由此可见,对该寄存器发送04H命令即命令设备硬复位,其格式如表所示,其中r表示该位保留。简单总结:最基本的无非就是16根数据线(DD0~DD15),5根地址线(CS0,CS1,DA0-DA2),一根“读”状态信号线,一根“写”状态信号线,一根中断信号线(IRQ)。其中数据的传输过程都被主机(host)用寄存器进行了封装,我们只需要操作主机的寄存器即可!通讯的过程是这样的。根据协议,设备(device)提供了9个commandblock寄存器。分别是:DATA,Features,sectorcount,sectornumber,Cylinderlow,cylinderhigh,device/head,status,command。除了command和status外,其它寄存器用来为command提供参数。主机也会提供相应的寄存器,主要就是addres和data,其它还有一些控制,反馈状态的寄存器。一次完整的读过程大致是这样的:先向主机address寄存器里填值,选中device的寄存器来进行一些设置。然后,分别向sectorcount,sectornumber,cylinderlow,cylinderhigh里输入参数,最后,选中command寄存器,输入读写命令,device首先会产生一个中断,通知它已经准备要传输数据,然后,主机反复读data寄存器就可以将数据取去。常用ATAPI指令介绍:IDENTIFYDEVICE0xecREADSECTOR0x20READMULTIPLE0xc4READDMA0xc8WRITESECTOR0x30WRITEMULTIPLE0xc5WRITEDMA0xcaSETFEATURES0xefIDENTIFYDEVICE:该指令能使主机得到设备的一些参数确认信息。当该指令发出后,设备置BSY为0,准备传送256个字的设备参数确认信息给主机,然后设DRQ为1,清BSY为0,插入INTRQ(nIEN为0时)。主机就可以读取数据寄存器来获得256字的设备信息。READSECTOR:当在传送数据时发生不可恢复的错误时,在commandblock寄存器中保存了第一个发生错误的sector的地址,并使传送中止。READMULTIPLE(0xc4):与READSECTOR相似,区别:READSECTOR时在传送每一个sector前,device都会插入INTRQ引发中断,而READMULTIPLE时设备仅在传送第一个sector前插入INTRQ。READDMA:主机初始化DMA通道,采用DMA方式读取数据。WRITESECTOR,WRITEMULTIPLE,WRITEDMA与读取时相应指令类似。SETFEATURES:主机用来设定设备执行动作的一些方式和特性。传输过程:1.执行设备选择:一个ATA主机控制器可以接两个设备,主机每次在下达命令前都会选择执行命令的设备。首先,主机必须要确认当前所选择的设备是否已经处于空闲状态,然后主机再写设备/磁头寄存器以选择新的设备,最后保证被选择的设备处于准备阶段,可以接收新的命令。在每次主机下达ATA命令时,设备选择协议都会执行,该协议的执行过程如图所示。2.PIO数据读取:即ATA主机从设备通过PIO方式读取数据(1)根据要读的扇区位置,向控制寄存器发送命令参数,等待设备的状态寄存器的DRDY位置1后进入下一步;(2)主机向设备命令控制器发送读命令20H;(3)设备设置状态寄存器的BSY位,并把数据发送到缓冲区;(4)设备准备好一个扇区的数据后,设置状态寄存器的DRQ位,跟据请求位,通知主机现在可以从设备读取数据,并清除BSY位忙信号;同时向主机发出INTRQ中断请求信号:(5)主机响应中断请求,开始读取设备状态寄存器,以判断读命令执行的情况,同时设备清除INTRQ中断请求信号(6)根据状态寄存器,如果读取的数据命令执行正常则进入下一步,如果有错误,进入错误处理,退出PIO数据传输;(7)主机通过数据寄存器读取数据,当一个扇区数据被读完,扇区计数器减1,如果扇区计数器不为0,进入(3),否则进入(8),(8)当所有请求扇区的数据被读取后,命令执行结束。3.PIO数据写入即ATA主机通过PIO方式向设备写数据(1)根据要写的扇区位置,向设备控制寄存器发出命令参数,等待设备状态寄存器的DRDY位置1后进入下一步;(2)主机向设备命令控制器发送写命令30H;(3)设备设置状态寄存器中DRQ数据请求位;(4)主机通过数据寄存器向设备缓冲区发送数据;(5)当缓冲区满或主机发送完一个扇区的数据后,设备设置状态寄存器中的BSY位,并清除DRQ数据请求信号;(6)缓冲区中的数据开始被写入设备所指定的扇区中,当处理完一个扇区,设备马上清除BSY信号,同时设置INTRQ;(7)主机读取设备的状态寄存器和/或错误寄存器,以判断写命令执行的情况,如果有无法克服的错误(如坏道,退出PIO数据输出传输,否则进入下一步;(8)如果还有扇区进行写操作,进入第(3)步,否则进入下一步;(9)当所有的请求扇区的数据被写完后,命令执行结束。4.DMA传输DMA传输包括MDMA和UDMA传输方式,虽然它们在数据传输时的执行过程和速度不一样,但都遵循DMA传输协议。(1)根据要写的扇区位置,向设备控制寄存器发出命令参数,等待设备状态寄存器的DRDY位置1后进入下一步;(2)主机向设备命令控制器发送DMA读或DMA写命令;(3)设备设置状态寄存器中的BSY位,开始执行命令;(4)当设备准备好进行传输数据时,向ATA主机发出DMARQ数据请求信号;(5)主机置DMACK数据响应信号为有效状态(低电平),开始数据传输;(6)如果指定扇区数的数据传输完后,还有数据要传输,则进入(4),否则进入下一步;(7)当数据传输完成或出现错误,设备设置状态寄存器和错误寄存器,并发出中断信号;(8)主机读取设备的状态寄存器和错误寄存器,判断命令执行的结果,传输完成。