这几天研究了下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即可!
上面说的只是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功能,我的理解是:当一个主机操作两个设备的时候,做读写某一设备时,可以使该设备释放总线,去操作另一个设备。没有这个功能之前,如果要操作另一个设备的话,有一些寄存器要修改。
这只是我的一些看法,不一定对。