ATA接口寄存器描述

ATA接口寄存器描述

 

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。

 

时间: 2025-01-30 07:17:50

ATA接口寄存器描述的相关文章

支付宝接口错误描述: 抱歉,卖家账户经验证不存在,请联系您的商家。

问题描述 支付宝接口错误描述:抱歉,卖家账户经验证不存在,请联系您的商家.我结算的时候报这个错,是不是哪个参数不对,或者说参数没传? 解决方案 解决方案二://stringtrade_no=Http.GetString("trade_no");//支付宝交易号stringorder_no=Http.GetString("out_trade_no");//获取订单号stringtotal_fee=Http.GetString("total_fee"

ATA接口详解_硬件维护

平常所说的IDE接口,也称之为ATA接口.ATA的英文拼写为"Advanced Technology Attachment",含义是"高级技术附加装置".ATA接口最早是在1986年由康柏.西部数据等几家公司共同开发的,在九十年代初开始应用于台式机系统.它使用一个40芯电缆与主板进行连接,最初的设计只能支持两个硬盘,最大容量也被限制在504 MB之内.  ATA接口从诞生至今,共推出了7个不同的版本,分别是:ATA-1(IDE).ATA-2(EIDEEnhanced

《.NET程序员面试秘笈》----面试题9 举例描述接口的作用

面试题9 举例描述接口的作用 .NET程序员面试秘笈[考点]接口类型的理解,接口在程序中的意义. [出现频率] [解答] 接口在程序设计中的作用为充当类或结构的功能界面,接口的属性.方法等属于抽象描述必须通过类或结构的实现才能使用.接口是使用者只知道接口有些什么功能,却不知道功能如何实现.由谁实现,这给程序的设计留下了很大的灵活性.例如某个项目由多个功能模块组成,每个模块由一个程序员完成,程序员只需编写完模块功能的实现后,留下该模块的接口供其他人使用.其他人在程序中只需直接使用接口的功能,而不必

开发一个Linux调试器(三):寄存器和内存

上一篇博文中我们给调试器添加了一个简单的地址断点.这次,我们将添加读写寄存器和内存的功能,这将使我们能够使用我们的程序计数器.观察状态和改变程序的行为. 系列文章索引 随着后面文章的发布,这些链接会逐渐生效. 准备环境 断点 寄存器和内存 Elves 和 dwarves 源码和信号 源码级逐步执行 源码级断点 调用栈展开 读取变量 下一步 注册我们的寄存器 在我们真正读取任何寄存器之前,我们需要告诉调试器一些关于我们的目标平台的信息,这里是 x8664 平台.除了多组通用和专用目的寄存器,x86

mini2440 led驱动 gpio接口连线

问题描述 mini2440 led驱动 gpio接口连线 mini2440开发板linux系统下的控制led实验,控制用户led,分别对应的是gpb5.gpb6.gpb7.gpb8,成功了.随后我修改驱动程序代码,改为控制gpb1.gpb6.gpb7.gpb8,用杜邦线连接gpb1,连接一个led,在终端输入控制命令"开led"和"关led",结果不能控制连接着gpb1的led,其余三个用户led正常,测量了gpb1和gnd的电压,在"开led"

linux kernel的中断子系统之(三):IRQ number和中断描述符【转】

转自:http://www.wowotech.net/linux_kenrel/interrupt_descriptor.html 一.前言 本文主要围绕IRQ number和中断描述符(interrupt descriptor)这两个概念描述通用中断处理过程.第二章主要描述基本概念,包括什么是IRQ number,什么是中断描述符等.第三章描述中断描述符数据结构的各个成员.第四章描述了初始化中断描述符相关的接口API.第五章描述中断描述符相关的接口API. 二.基本概念 1.通用中断的代码处理

Java 调用底层接口的几种方法

Java 调用底层接口 Java 调用底层接口要通过动态链接库进行,在windows下是dll文件,linux是so文件 Java调用动态库所需要关心的问题:     如何装载文件,以及如何定位所要使用的方法:      数据类型是如何对应的:     如何给使用的方法传递参数:     如何获取返回的值. 目前调用底层接口用的比较多的技术包括jni.jna.jnative.Nativecall等 JNI 封装本地接口 JAVA可以通过JNI接口访问本地的动态连接库,从而扩展JAVA的功能.使用

COM组件设计与应用(十)——IDispatch接口for VC.NET

一.前言 终于写到了第十回,我也一直期盼着写这回的内容耶,为啥呢?因为自动化(automation)是非常常用.非常有用.非常精彩的一个 COM 功能.由于 WORD.EXCEL 等 OFFICE 软件提供了"宏"的功能,就连我们使用的VC开发环境也提供了"宏"功能,更由于 HTML.ASP.JSP 等都要依靠脚本(Script)的支持,更体现出了自动化接口的重要性. 如果你使用 vc6.0 的开发环境,请阅读前一回. 如果你使用 vc.net 2003,请继续..

COM组件设计与应用(九)——IDispatch接口for VC6.0

本文配套源码 一.前言 终于写到了第九回,我也一直期盼着写这回的内容耶,为啥呢?因为自动化(automation)是非常常用.非常有用.非常精彩的一个 COM 功能.由于 WORD.EXCEL 等 OFFICE 软件提供了"宏"的功能,就连我们使用的VC开发环境也提供了"宏"功能,更由于 HTML.ASP.JSP 等都要依靠脚本(Script)的支持,更体现出了自动化接口的重要性. 如果你使用 vc6.0 的开发环境,请继续阅读. 如果你使用 vc.net 2003