ATAPI协议

news/2024/11/29 5:41:59/
这几天研究了下ATAPI的协议,到现在为止,基本上知道了是怎么回事。 
ATA也就是IDE,是用来连接硬盘的。接口是29根或者44根,应该还有其它类型的,只是我不知道而已!其实,44根线就是多出了一些的地线,以使信号稳定。最基本的无非就是16根数据线(DD0~DD15),5根地址线(CS0,CS1,AD0~AD2),一根“读”状态信号线,一根“写”状态信号线,一根中断信号线(IRQ)。其中数据的传输过程都被主机(host)用寄存器进行了封装,我们只需要操作主机的寄存器即可!--可不可以依据读写时序,不依赖寄存器把通讯做成一个纯软件的东西?我没有试过,理论上可行的,只是数据传输会很慢。
通讯的过程是这样的。根据协议,设备(device)提供了9个command block 寄存器。分别是:DATA,Features,sector count, sector number,Cylinder low,cylinder high,device/head,status,command。除了command和status外,其它寄存器用来为command提供参数。主机也会提供相应的寄存器,主要就是addres和data,其它还有一些控制,反馈状态的积存器。一次完整的读过程大致是这样的:先向主机address积存器里填值,选种device的积存器来进行一些设置。然后,分别向sector count,sector number,cylinder low,cylinder high里输入参数,最后,选种command积存器,输入读写命令,device会产生一个中断先,统治它已经准备要传输数据,然后,主机反复读data积存器就可以将数据取去。关于通讯命令的资料,可以在“下载”一栏里面下载。
     上面说的只是PIO传输,还有DMA传输,已经的ATA协议好象不支持。DMA就是,host上面有一个控制器,它来控制总线,从device传过来的数据,直接存放到内存,而不经过主机的CPU。--到现在我还不知道,RAM的首地址如何设置?通讯过程跟PIO也差不多,通过命令设置好device的参数后,写主机的寄存器启动DMA即可!
以上是ATA,下面讲ATAPI。
ATAPI是在ATA上的扩展的协议,增加了一种叫做packet的命令。用来连接光驱。其实也没什么,packet类的命令,无非就是把一些常规的操作,打包成了一个命令使操作简单些了,也没什么。可能在ATA里要传好几个命令才完成的工作,在packet类的命令里,一个就搞掂了。举个例子:一个对device的操作来完成一个功能,在ATA协议里面能需要两个步骤,即先后要发命令A和B。在ATAPI协议里面就把这个功能打包成一个命令C,你只要发一个命令C,device就会自动执行以前A+B的动作。有点类似,复杂指令和精简指令的区别。
关于 ATAPI的overlap功能,我的理解是:当一个主机操作两个设备的时候,做读写某一设备时,可以使该设备释放总线,去操作另一个设备。没有这个功能之前,如果要操作另一个设备的话,有一些寄存器要修改。
这只是我的一些看法,不一定对。

http://www.ppmy.cn/news/545951.html

相关文章

akima 插值拟合算法 Python/C++/C版本

目录 前言Akima简介Akima优势 算法的代码实现python版C 版代码解析1代码解析2代码解析3 C版 实验对比 前言 鉴于“长沙等你”网站上Akima算法文章大部分要VIP观看或者下载,即使是付费也有质量不佳,浪费Money也浪费时间。 笔者根据查到的资料分享给大家。…

Matlab数学建模-典型相关分析

统计分析-典型相关分析 概念 典型相关分析是研究两个多变量(向量)之间之间的线性相关关系,能够揭示出两组变量之间的内在联系。 CCA(典型相关分析) 在一元统计分析中,用相关系数来衡量两个随机变量的线性相关关系,…

不限硬币数量的最少硬币问题(递归算法)

用递归写了一个最少硬币问题,然后有少部分数据过不去,个人找不到bug,求救qwq 所用语言是java 思路就是拟人化,假设有1,2,5三种硬币,假设要凑出11,那么肯定是先用5去尝试, 然后就变成了凑出6. 如果出现无法凑出的情况,就回溯到上一步,撤销上一步,然后开始新的尝试 代码如下…

人民币兑换 (c语言)

题目: 1 元 5 角钱人民币兑换 5 分、2 分和 1 分的硬币(每一种都要有)共 100 枚,会有很多种兑换方案。请编写程序给出各种兑换方案。 输入格式: 输入为一个正整数 n,表示要求输出前 n 种可能的方案。方案的顺序&#…

python硬币游戏悖论

今天和我俞姐对一个数学概率问题进行讨论,讨论半天没有结果,然后决定用代码仿真实现一下。 题目:连续掷一枚硬币,如果连续的三次结果出现正正反的情况下A赢,出现正反反的结果B赢,请问A赢的概率大还是B赢得概…

商业源码QQ币,YY币,充值支付系统源码

介绍: 本站测试不是太全,大家自己研究即可,php的,部署难度不高,监控实测是ok的,能看到。没有接口demo需要自己写。 网盘下载地址: https://zijiewangpan.com/DBeEOk6Fl4p 图片:

x*y=k

(图片为pplpleasr作品Uniswap V3宣传动画截图) 今天是个好日子,4月1号愚人节,哈哈哈,咱们就来说点儿轻松愉快的话题吧。 看到标题秒联想到Uniswap的,肯定是DeFi老韭菜。是的,没错,x*yk就是Uniswap的灵魂&am…

python脚本王者荣耀自动刷金币

基于ADB(Android Debug Bridge) 1、下载ADB下载地址 下载之后解压文件随便放置到那个文件夹都可以 需要将adb.exe所在的文件路径添加到环境变量中在CMD中输入adb显示如下,说明adb没有问题了 2、手机进入开发者模式 这个进入开发者模式比…