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。

ATA接口寄存器详解相关推荐

  1. 转 LCD的接口类型详解

    LCD的接口类型详解 LCD的接口有多种,分类很细.主要看LCD的驱动方式和控制方式,目前手机上的彩色LCD的连接方式一般有这么几种:MCU模式,RGB模式,SPI模式,VSYNC模式,MDDI模式, ...

  2. ILI9341的使用之【四】RGB接口操作详解

    <ILI9341的使用之[一]TFT-LCD原理(转载)> <ILI9341的使用之[二]ILI9341介绍> <ILI9341的使用之[三]ILI9341系统通信接口模 ...

  3. x86 - CPU架构/寄存器详解 (三) 保护模式

    系列文章 x86 - CPU架构/寄存器详解 (一)x86.8086.i386.IA-32 是什么? x86 - CPU架构/寄存器详解 (二) 实模式(8086模式) x86 - CPU架构/寄存器 ...

  4. 微信JS-SDK之图像接口开发详解

    2019独角兽企业重金招聘Python工程师标准>>> 参考: 微信JS-SDK之图像接口开发详解 http://www.cnblogs.com/it-cen/p/4587812.h ...

  5. 2接口详解_TS入门笔记2——TS接口进阶详解

    TS入门笔记--TS接口进阶详解 一.为什么需要接口? let obj:object; // 定义了一个只能保存对象的变量 // obj = 1; // obj = "123"; ...

  6. ARM 寄存器 详解

    From( ARM 寄存器详解 ):https://blog.csdn.net/sandeldeng/article/details/52954781 ARM 汇编基础教程:2.数据类型和寄存器:ht ...

  7. Java语言Socket接口用法详解

    Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...

  8. ATA接口寄存器描写叙述

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mao0514/article/details/32135815 ATA接口寄存器描写叙述 3.ATA ...

  9. java 接口函数_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

最新文章

  1. 玩转SCVMM中的更新基线,实现虚拟平台基础服务器补丁自动更新
  2. 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
  3. 。net面试题(2)
  4. 综合操作篇 NAT 和trunk和dhcp综合应用
  5. Getting started with caffe questions answers (摘选)
  6. 大数据时代,如何做好数字化精益生产?附26页智慧工厂解决方案
  7. matlab字符串固定长度,限制Matlab用户界面编辑框中的字符串长度
  8. 12 MM配置-主数据-定义物料组
  9. 心情有些复杂,不知道还能做多久,未来也不知道该如何选择
  10. 做数据分析已经会Excel了,还要学Python吗?
  11. 【福利】BAT架构师分享最全Java架构师学习技能图谱:包含Java编程+网络+设计模式+数据库+分布式等
  12. MongoDB实战系列之三:MongoDB的主从部署
  13. Nacos整合SpringCloud的自动注册原理
  14. 雷达干扰技术(四)雷达信号处理
  15. 华硕 小布 类似机器人_盘点足球赛事背后的高科技 华硕机器人小布化身观赛助理...
  16. 关于中文分词的一元分词讨论
  17. TensorFlow中的小知识:tf.flags.DEFINE_xxx()
  18. 石家庄地铁售票系统源代码
  19. 迪进面向ConnectCore系统模块推出Digi ConnectCore语音控制软件
  20. HTML点击图片,弹窗并放大

热门文章

  1. 法坤老师:法坤电子书搜索系统搭建
  2. P3214 [HNOI2011] 卡农 题解
  3. 转:成功学专家卡耐基所言
  4. 第十五届吉林省大学生程序设计竞赛个人题解
  5. windows系统coursera视频播放出错解决方法
  6. 【C 语言基础】C 世界函数的故事(1)
  7. C++计算a的b次方的算法(附完整源码)
  8. 您需要了解的OOP(S)概念
  9. 洛必达法则——“高等数学”
  10. noip模拟题11.11 光棍节测试