版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/mao0514/article/details/32135815

ATA接口寄存器描写叙述

 

、ATA接口的三种传输数据方式

 

位。

)MDMA(Multiword DMA)传输,用于传输数据。ATA主机控制器向ATA设备下达MDMA传输命令后,等待设备向主机发送DMARQ传输数据请求信号。当主机收到DMARQ信号后。向设备发送DMACK_响应信号。MDMA传输数据过程与PIO方式大致相同,也是通过DIOW_或DIOR_的周期变化来控制数据的传输。在传输数据过程中。DMARQ和DMACK_握手信号一直保持有效。

)UDMA(Ultra DMA)。也是用于传输数据。

这样的传输方式的传输速度比MDMA要快,ATA/ATAPI-5协议中所定义的UDMA传输方式最高传输数据速率是66MB/s。UDMA对传输数据的控制信号又一次进行了定义。另外,UDMA还引入了CRC数据校验机制,保证了传输数据过程的正确性,但其传输过程较为复杂。

 

、ATA接口寄存器的定义

 

ATA主机与设备的通信是通过主机对ATA接口上的寄存器的读写实现的,而这些接口寄存器由主机发送的地址信号CS1_、CS0_、DA2、DA1、DA0来进行寻址。除了在DMA传输模式下,CS1_和CS0_全有效或全无效都是不可用的地址。在这样的情况下。数据线应该在释放状态下(即数据总线没有驱动源)。

当CS0_无效,CS1_有效时,DA[2:0]仅仅有在值为06H和07H时地址才为有效,在其它的无效地址状态下,设备会使数据总线处于高阻态。

ATA接口寄存器可分为命令块寄存器和控制块寄存器。

)命令块寄存器是主机用来向设备传输命令或从设备读取状态的,这组寄存器包括:

位寄存器

位寄存器

设备/磁头(Device/Head)寄存器

扇区数(Sector Count)寄存器

扇区号(Sector Number)寄存器

命令(Command)寄存器

状态(Status)寄存器

特征(Features)寄存器

错误(Error)寄存器

数据(Data)寄存器。

)控制块寄存器是用来控制设备和替换状态,这组寄存器包括:

设备控制(Device Control)寄存器

替换状态(Alternate Status)寄存器

驱动器地址(Drive Address)寄存器

 

存储体寻址约束

下面是存储体開始反映命令的步骤:

1) 存储体不处于休眠状态;

2) 若存储体处于休眠状态。那么,即使DMACK-此时变为有效。存储体将忽略DIOW-/DIOR-变成有效。

若存储体中。若运行包命令特性集。反映在表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;

方向:

这是仅仅读寄存器。若地址被主机写,那么存储体控制寄存器为被写;

存取约束:

一旦,其它的位都不能用,当存储体处于休眠状态。该寄存器中的值无效。

作用:

读该寄存器不会清除一个终端等待。

功能描写叙述:

该寄存器包括和状态寄存器相同的内容。

5.3 命令寄存器(写):--与状态寄存器复用(读)

地址:

即:CS(1:0)=01。DA(2:0)=111;

方向:

仅仅写寄存器。若地址被主机写,表明状态寄存器处于被读的状态;

存取约束:

除了DEVICE RESET命令,其它的命令仅仅有在BSY和DRQ都被清零而且DMACK-没有被设置为有效的情况下时写该寄存器,那么命令寄存器写的结果就是不确定的。除了DEVICE
RESET命令。一个处于休眠模式的存储体,若运行PACKET
命令特性集,除了DEVICE RESET命令。其它的命令写的寄存器的值都会被忽略。

作用:

当该命令寄存器被写完后,就開始运行命令,当这个寄存器被写,命令模块寄存器的内容就变成了这个命令的參数。

写这个寄存器,会清除不论什么等待的中断条件;

功能描写叙述:

该寄存器包括:发送给存储体的命令码;命令写到该命令寄存器后即刻运行命令。可运行的命令和买条命令的代码都总结在V2的附录中的表中。

区/位描写叙述:

 

5.4数据port

地址:

当DMACK-被设为有效,CS(1)-和CS(0)-都被设为无效,传递16位宽度的数据

即:CS(1:0)=00。

方向:

该port是一个读/写port;

存取约束:

该port仅仅用于DMA传输数据,当DMACK-和DMARQ都设为有效时。

作用:

DMA输出传输数据通过一系列的写这个port来运行,每一个写传输的数据都是在前一个写数据之后。

DMA输入数据的传输被一系列的读port运行;每一个读传输的数据都是在前一个读之后,每次在读DMA输入数据和写DMA输出数据的结果都是无效的;

功能描写叙述:

位宽度;

区或位描写叙述:

 

5.5 数据寄存器:

地址:

即CS(1:0)=01。DA(2:0)=000;

方向:

读/写寄存器

存取的约束:

该寄存器,而且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,存储体选择,;

 

5.7 存储体控制寄存器

地址:

即:CS(1:0)=10,DA(2:0)=110;

方向:

这是个仅仅写寄存器。若地址被主机读,那么交替状态寄存器在被主机读。

存取约束:

仅仅有在DMACK-没有设为有效时,寄存器才干够被写;

作用:

在被写的时候,这个寄存器的值就会起作用

功能描写叙述:

寄存器同意主机软复位连接的存储体,而且能够通过选择的存储体,使得INTRQ信号有效或无效;当设备控制寄存器被写的时候两个存储体都要响无论哪个存储体被选择。

当SRST被设置为1两个存储体都要运行软复位协议。存储体在休眠模式应该响应SRST的信号。

区/位描写叙述

——HOB(位寻址特性设置中定义,每次写命令寄存器都要清除HOB位位0。

——BIT(6:3),保留。

——SRST是软件复位位(參考6.2)。

——。存储体应该释放INTRQ信号;

——BIT0应该被清零

 

5.8 错误寄存器

地址:

即:CS(1:0)=01;DA(2:0)=001;

方向:

这是个仅仅读寄存器;若主机在写地址那么特性寄存器在被写入。

存取约束:

当BSY和DRQ被清零,而且ERR或
SE时。寄存器的内容是有效的。

在上电复位、运行完硬件、软件复位或者是运行完EXECUTE DEVICE DIAGNOSTICS或DEVICE RESET命令后,这个寄存器的内容应该是有效的。

当存储体在休眠状态时该寄存器的值无效。

作用:

功能描写叙述:

在运行全然部的命令除了EXECUTE DEVICE DIAGNOSTICS或DEVICE RESET命令后,,该寄存器的内容将会有效。

在上电。硬复位。软复位后,或者运行完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时。写寄存器,结果是无法确定的。

在休眠模式时,寄存器的值无效。

作用:

命令寄存器被写入。寄存器的值为命令參数。

功能描写叙述:

章)。

对于没有运行包命令特性设置的存储体,寄存器为LBA高寄存器。

对于有运行包命令特性值设置的存储体,寄存器为字节记数高位寄存器。

 

5.11
LBA低寄存器

 

方向:

读/写寄存器。

存取约束:

当BSY和DRQ被清0。而且DMACK-无效,寄存器可写。

当BSY和DRQ被清0,寄存器的值有效。

当BSY或DRQ被置1时,写寄存器,结果是无法确定的。在休眠模式时,寄存器的值无效。

作用:

命令寄存器被写入,寄存器的值为命令參数。

功能描写叙述:

章)。

 

5.12
LBA中寄存器/字节记数低位寄存器

方向:

读/写寄存器;

存取约束:

当BSY和DRQ被清0,而且DMACK-无效,寄存器可写。当BSY和DRQ被清0,寄存器的值有效。

当BSY或DRQ被置1时,写寄存器。结果是无法确定的。

在休眠模式时,寄存器的值无效。

作用:

命令寄存器被写入,寄存器的值为命令參数。

功能描写叙述:

章)。

对于没有运行包命令特性设置的存储体,寄存器为LBA中寄存器。

对于有运行包命令特性值设置的存储体,寄存器为字节记数低位寄存器。

 

5.13 扇区计数/中断响应寄存器

方向:

读/写寄存器;

存取约束:

当BSY和DRQ被清0。而且DMACK-无效。寄存器可写。当BSY和DRQ被清0。寄存器的值有效。当BSY或DRQ被置1时。写寄存器,结果是无法确定的。在休眠模式时。寄存器的值无效。

作用:

命令寄存器被写入。寄存器的值为命令參数。

功能描写叙述:

章)。

对于没有运行包命令特性设置的存储体,寄存器为扇区计数

对于有运行包命令特性值设置的存储体,寄存器为中断响应寄存器

 

5.14 状态寄存器---命令寄存器(复用)

方向:

仅仅读。假设写入地址。则为命令寄存器

存取约束:

假设BSY置1,寄存器的值将会被忽略。除位BSY外。在休眠模式时,寄存器的值无效。

作用:

 

其中断挂起后读这个寄存器会清0中断挂起位(參考第8章)。

当一个中断发生了,在主机能够识别信号INTRQ之前主机不能读状态寄存器。否则会清除挂起位,无法识别中断请求类型。

功能描写叙述:

这个寄存器包括了设备状态,寄存器值会被更新反映当前设备的状态。

区/位描写叙述:

--BSY(Busy)

BSY为1表示存储体忙。

在主机写命令寄存器后,在命令完毕前或是设备因覆盖命令而运行总线释放。存储体会设置BSY=1或DRQ=1。

 

ATA接口寄存器描写叙述的更多相关文章

  1. ATA接口寄存器描述

    ATA接口寄存器描述 .ATA接口的三种数据传输方式 位. )MDMA(Multiword DMA)传输,用于数据传输.ATA主机控制器向ATA设备下达MDMA传输命令后,等待设备向主机发送DMARQ ...

  2. 【c++】虚函数描写叙述符override

    在C++11中为了帮助程序猿写继承结构复杂的类型,引入了虚函数描写叙述符override,假设派生类在虚函数声明时使用了override描写叙述符,那么该函数必须重载其基类中的同名函数,否则代码将无法 ...

  3. 【OpenCV新手教程之十八】OpenCV仿射变换 & SURF特征点描写叙述合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/33320997 作者:毛星云(浅墨)  ...

  4. 进程与进程描写叙述符(task_struct)

    一. 进程 进程(Process) 计算机中的程序关于某数据集合上的一次执行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体: ...

  5. Python描写叙述符(descriptor)解密

    Python中包括了很多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...

  6. Java异常封装(自定义错误码和描写叙述,附源代码)

    真正工作了才发现.Java里面的异常在真正工作中使用还是十分普遍的. 什么时候该抛出什么异常,这个是必须知道的. 当然真正工作里面主动抛出的异常都是经过分装过的,自己能够定义错误码和异常描写叙述. 以 ...

  7. 设计模式-适配器模式(Go语言描写叙述)

    在上一篇博客设计模式-策略模式(Go语言描写叙述)中我们用最简单的代码用go语言描写叙述了设计模式中的策略模式,用最简单的实例来描写叙述相信能够让刚開始学习的人能够非常轻松的掌握各种设计模式.继上篇博 ...

  8. linux c 通过文件描写叙述符获取文件名称

    在linux中每一个被打开的文件都会在/proc/self/fd/文件夹中有记录,当中(/proc/self/fd/文件描写叙述符号:这个文件是符号文件)的文件就是文件描写叙述符所相应的文件. 而re ...

  9. * 类描写叙述:字符串工具类 类名称:String_U

    /****************************************** * 类描写叙述:字符串工具类 类名称:String_U * ************************** ...

随机推荐

  1. 前端点击删除按钮删除table表格的数据

    table.on('tool(hostTable)', function (obj) { var data = obj.data;//须写 if (obj.event === 'del') { var ...

  2. ID4收藏

    IdentityServer4.Admin https://github.com/skoruba/IdentityServer4.Admin

  3. 排查PHP-FPM占用CPU过高

    发现 如何发现的呢?当然是使用top命令,发现系统的load average>3,这说明系统已经处于比较高的负载中. 尝试解决 当我把php-fpm重启后,没过一会儿又开始cpu狂飙!这是什么鬼 ...

  4. Flask 安装 快速入门

    $ pip install flask Flask自带的Server在端口5000上监听: ython app.py flask通过request.form['name']来获取表单的内容. 外部可见 ...

  5. cocos html5 资讯

    1.visual assistx    vs 插件  http://www.cr173.com/soft/32656.html 2. Box2D物理引擎 3. csdnhttp://www.csdn. ...

  6. 【BZOJ】2021: [Usaco2010 Jan]Cheese Towers(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2021 噗,自己太弱想不到. 原来是2次背包. 由于只要有一个大于k的高度的,而且这个必须放在最顶,那 ...

  7. datagrid使用要点

    table自适应: (fit:true(设置table)) 列自动撑开:fitColumns: true,注意给列的width属性赋值

  8. NDK版本 下载地址

    最新版本r16 https://dl.google.com/android/repository/android-ndk-r16-windows-x86.zip https://dl.google.c ...

  9. iOS-去除NavigationBar边线

    解决办法: self.navigationController.navigationBar.barStyle = UIBaselineAdjustmentNone;

  10. 《Sqlserver》Javaweb项目链接sqlserver 2008R2时出现的一系列的错误

    好久没有弄java,玩eclipse了,最近因为小小的原因,参加一个比赛,不得不把javaweb的东西又捡起来,所以不熟悉,再加上之前链接数据库都是用Oracle的,现在公司的电脑上又只是安装了sql ...