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。

ATA接口寄存器描述

时间: 2024-11-09 00:54:03

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

WEBSERVICE接口中文描述丢失问题处理

在WEBSERVICE接口调用时候调用了获取节假日的接口,但是返回信息中的描述字段丢失,而本地调用函数并没有这种情况,如下图: 是因为经过外部系统调用默认传入英文,可以通过代码解决. 添加代码: SET LOCALE LANGUAGE '1'. 解决! 原文地址:https://www.cnblogs.com/lingxiaoj/p/11164699.html

嵌入式Linux内核I2C子系统详解

1.1 I2C总线知识 1.1.1  I2C总线物理拓扑结构     I2C总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成.通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递.在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平. 1.1.2  I2C总线特征    I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(可以从I2C器件的数据手册得知),主

使用Spring自定义注解生产Http接口描述信息

最近在做一个手机后台项目,使用的是SpringMVC,开发的接口是HTTP接口.在接口写完后需要在网页中吧接口的名称测试地址等信息添加到网页中,感觉这样很麻烦还容易漏.于是就写了一个自定义注解通过注解的方式将接口的描述信息加入到接口中,通过注解描述接口信息并且生产接口测试地址 先看使用方法及最终效果 @ResponseBody @RequestMapping("/getBusWaiting") @AppInterface(value="获取候车信息",group=&

CPU 寄存器

CPU 寄存器 寄存器是中央处理器内的组成部分,是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和地址.在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC). 寄存器是集成电路中非常重要的一种存储单元,通常由D触发器组成.在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类.内部寄存器不能被外部电路或软件访问,只是为内部电路的实现存储功能或满足电路的时序要求.而接口寄存器可以同时被内部电路和外部电路或软件访问,CPU中的寄存器就是其中一

Android LCD(三):LCD接口篇【转】

本文转载自:http://blog.csdn.net/xubin341719/article/details/9177085 关键词:Android LCD控制器 Framebuffer PWM  平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:samsung exynos 4210.exynos 4412 .exynos 5250 作者:xubin341719(欢迎转载,请注明作者)欢迎指正错误,共同学习.共同进步!!下载链接:LCD规格书(

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

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

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

一.前言 本文主要围绕IRQ number和中断描述符(interrupt descriptor)这两个概念描述通用中断处理过程.第二章主要描述基本概念,包括什么是IRQ number,什么是中断描述符等.第三章描述中断描述符数据结构的各个成员.第四章描述了初始化中断描述符相关的接口API.第五章描述中断描述符相关的接口API. 二.基本概念 1.通用中断的代码处理示意图 一个关于通用中断处理的示意图如下: 在linux kernel中,对于每一个外设的IRQ都用struct irq_desc来

android系统平台显示驱动开发简要:Samsung LCD接口篇『二』

平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博客:http://weibo.com/cpjphone 参考:S5PV210显示驱动分析与移植(android) 这篇文章中转载的成分比较多,不过大部分内容是从芯片手册上翻译过来.Framebuffer部分是黄冈老师--<嵌入式Linux之我行>这一系列博客中的,嵌入式Linux之我行这系列博客写

第5章 什么是寄存器

第5章     什么是寄存器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料:<STM32F4xx 中文参考手册>.<STM32F429xx数据手册>. 学习本章时,配合<STM32F4xx 中文参考手册>"存储器和总线架构"."嵌入式FLASH接口"及"通用I/O(GPIO)"