IDE命令是电子设备中的一个按钮所会执行的功能。
简介
在ATA标准中定义了近四十种IDE命令,其中十种为基本的(或叫强制性的),其他是可选的。
1.部分基本IDE命令的功能
①驱动器诊断(90H):该命令启动驱动器内部的诊断程序。
②格式化磁道(50H):该命令用来格式化一个磁道。扇区数寄存器、柱面号寄存器、驱动器/磁头寄存器必须设置成规定的值,
③扇区读(20H允许重试,2lH禁止重试):使用该命令从磁盘读取一个指定的扇区。在读的过程中如果发生错误,接下来的处理则取决于是否允许重试。如果使用禁止重试命令(21H),则操作将被禁止,反之,驱动器将重读出错的扇区,重复的次数由制造商决定。
④扇区写(30H允许重试,3lH禁止重试):该命令类似于读命令,只是数据传送的方向不同。
⑤扇区长读(22H允许重试,23H禁止重试):与扇区读命令不同点在于,读时还包括扇区的ECC(ErrorCorrectionCode)字节。
⑥扇区长写(32H允许重试,33H禁止重试):与扇区写命令的区别在于ECC字节也要写入。
⑦寻道(7XH):该命令使磁头移动到
地址寄存器指定的磁道上。
⑧扇区校验(40H允许重试,4lH禁止重试):与扇区读命令相似,不传送数据,只对读出的数据进行校验。
可选IDE命令功能
①
DMA方式读(C8H允许重试,C9H禁止重试):该命令与扇区读类似,只是它使用DMA方式读扇区缓冲区的内容。在执行该命令前,应初始化相应的DMA通道。
②DMA方式写(CAH允许重试,CBH禁止重试):该命令与扇区写类似,只是向扇区缓冲区写入数据时使用DMA方式。
③设置多扇区模式(C6H):用该命令设定多扇区操作时的扇区数。
④多扇区读(C4H):它与扇区读类似,但按块读取,一块内包括多个扇区,只有当请求的多个扇区全部读完后才产生中断。
⑤多扇区写(C5H):除数据传送方向外,该命令的其他操作与多扇区读命令相同。3.IDE命令的执行过程
让驱动器执行IDE命令需要有一个过程。在发命令前先应做一些准备,即对有关寄存器进行设置,命令发出后,要读取状态寄存器,判断规定的操作是否完成,有无错误,如有错误,还需作出相应的处理。ATA标准关于IDE命令的执行一共有五个协议。它们是PI协议针对PIO方式读命令、PO协议针对PIO方式读命令、ND协议针对没有数据传输的命令、DM协议针对使用DMA数据传输的命令、VS协议商家确定的协议。与此相对应,ATA标准将IDE命令分成了五类。这里仅以PI协议命令和PO协议命令为例说明IDE命令的执行过程。
(1)PI协议命令的执行过程
PI(PIOIn)协议是针对PIO方式读命令的。PIO方式读命令包括对扇区及缓冲区的一次或多次读等多个命令,可将它们统称为PI协议命令。按照协议,该类命令应该按下面的过程执行。首先,主机把执行命令过程中所需要的所有参数写入地址寄存器(1F3H~1F6H)和特性寄存器(如果需要),然后把命令码写入命令寄存器,命令开始执行。这时驱动器设置
状态寄存器中的BSY信号,同时将磁盘上指定扇区的数据送入扇区缓冲区。当扇区缓冲区准备好,置位DRQ,清BSY,发中断请求信号INTRQ。
然后,主机开始读取状态寄存器,同时驱动器清除中断请求信号INTRQ。如果状态寄存器的DRQ位为1,主机就从扇区缓冲区读取数据。数据读完后,驱动器复位DRQ位。如果是多扇区读(前面设置时,还要设置扇区数寄存器),此时驱动器就重新设置BSY位,准备读下一个扇区,直到请求的扇区全部读完。
在读的过程中,如果发生了错误,驱动器仍然准备读下一个扇区,同时设置状态寄存器中的出错位,让主机决定是否继续进行。
2.PO协议命令的执行过程
PO(PIOOut)协议是针对:PIO方式写命令的。按照协议,该类命令应该按下面的过程执行。首先,主机把必要的参数写入对应的地址寄存器,等待DRDY有效,然后将命令码写入命令寄存器,此时驱动器设置状态寄存器的DRQ位,表示准备接收数据。主机通过
数据寄存器将数据写入扇区缓冲区,当扇区缓冲区填满时,驱动器清除DRQ位,并置位BSY。驱动器开始将扇区缓冲区中的数据写入磁盘。一旦写盘结束,它会马上清除BSY位,并发出中断请求信号INTRQ。主机接收到中断信号后,读驱动器的状态寄存器,同时将中断信号清除。如果是写一个扇区,则写命令到此结束。如果是多扇区写,此时驱动器会重新设置DRQ,开始处理下一个扇区。
从上面的PI协议命令和PO协议命令的执行过程可以看到,对磁盘介质的读或写是由驱动器具体完成的,
而主机发出的扇区读/写命令只是针对扇区缓冲区的。这一点也适用于DMA协议命令。
下面的TurboC程序是用PIO方式读取一个扇区的内容。该例有助于理解PI协议命令的执行过程。