




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
光驱改装CD播放机(上篇)作者:温正伟原载:无线电杂志本文的相关程序下载:点击下载源码文件说明demo.cC源码文件demo.Uv2keil项目文件demo.hex编译好的单片机HEX文件CD播放机经过了多年的发展已是很普及的音响器材了,光盘也成为电脑媒体的重要载体之一,在多数的电脑爱好者手中很多都会有二台或更多的光驱,也许你 和我一样新买了支持DVD光盘的光驱,旧的CDROM读盘能力下降,很少再使用了,丢弃了也可惜。在这一期里借着介绍IDE接口的机会我们来尝试把 CDROM改装成CD播放机,旧光驱也可以有新用途,当然这里介绍的改装不是指利用CDROM本身所带的播放键(大部分CDROM没有播放键)去改装,而 是通过单片机对光驱的ATAPI接口进行对光驱的控制,从而学习一些IDE/ATAPI接口的相关知识和单片机的应用认识。一、电路原理及编程思路IDE 是 Integrated Drive Electronics 的缩写,是由 Compaq 和 Western Digital 公司开发,AT架构的计算机出现后,新版的 IDE 命名为 ATA 即 AT bus Attachment,但在更多的时候人们会习惯叫回旧名IDE,这种接口一直被应用在硬盘的连接上。而ATAPI则是在ATA上扩展出来的, ATAPI是AT Attachment Packet Interface的缩写,意思是AT计算机上附加设备的信息包接口。支持ATAPI的IDE接口可以像连接硬盘一样连接ATAPI设备。目前几乎所有的 IDE接口都支持ATAPI,它被广泛应用于光驱,ZIP驱动器等设备上。所说的这三种设备界面都是使用如图1和图2所示的40PIN连接件。像图1的连 接件是用于主机板和IDE设备上,是40PIN的针式接头,主板上有两个这样的接口,可以用于连接4个IDE设备。图2则是用于连接主机和IDE设备的 40芯IDE线缆,现在也有80芯线缆用于连接更新版的高速ATA。图3则是IDE接口连接件的引脚号定义图。图1:光驱后面板的接口图2:连接电缆图3:引脚号定义图元件名数量说明AT89C511可以用AT89C52,AT89S51等代换8.2K电阻13K电阻110K排阻18位LED发光管130pF瓷片电容210uF电解电容111.0592M晶振1可以用612M40Pin插针式插座140芯IDE连接线1电脑的硬盘或光驱连线小型按钮5+12V+5V开关电源1要求+5V+12V都要有1.5A以上电流表一制作元件表PinNameDirDescriptionPinNameDirDescription1/RESET输入复位21DMARQ输出DMQ请求2GND/地22GND/地3DD7输入/输出Data 723/DIOW输入写控制4DD8输入/输出Data 824GND/地5DD6输入/输出Data 625/DIOR输入读控制6DD9输入/输出Data 926GND/地7DD5输入/输出Data 527IORDY输出IO就绪指示8DD10输入/输出Data 1028CSEL/装置编号9DD4输入/输出Data 429/DMACK/输入10DD11输入/输出Data 1130GND/地11DD3输入/输出Data 331IRQR输出中断请求12DD12输入/输出Data 1232NC/保留13DD2输入/输出Data 233DA1输入寄存器地址A114DD13输入/输出Data 1334/PDIAG/自诊断标识15DD1输入/输出Data 135DA0输入寄存器地址A016DD14输入/输出Data 1436DA2输入寄存器地址A217DD0输入/输出Data 037/CS0输入寄存器选择18DD15输入/输出Data 1538/CS1输入寄存器选择19GND/地39/DASP输入装置活动指示20KEY/Key40GND/地注:在引脚名前有/的引脚为低电平有效 表2ATAPI接口的引脚定义说明图4是电路原理图,表1是元件列表,本实例中使用51单片机做为控制芯片,用它的P1,P2口组成16位的数据输入输出口,连接IDE的D0D15 数据线。P0口用于连接IDE的读写控制、复位和寄存器控制,由于P0口的驱动力比较低,所以用10K的排阻对其上拉。晶振没有什么特别的要求,这里可以 选用11.0592M或12M,加上上电复位电路组成典型的单片机最小系统。P3口则用于播放,前进,后退,停止和开关托盘控制按键的输入,P3.7接一 个发光二极管是用于显示光驱是否装载了CD光盘或是否出错了,出错或没有光盘时该LED会点亮。电路连接无误后烧录编译好的HEX文件到51芯片上,就可 以正常工作了。本文提供的源码只实现这几种功能,在这个基础上可以加上LED数码管或LCD显示曲目时间等信息,也可以加入遥控接收等功能。图4:原理图(点击看大图)图5是笔者用于实验和调试的电路实物照片。调试时使用自制兼容FMON51的仿真器和KEIL集成开发环境连接可以方便的进行单步和断点调试,同时 也可以查看名RAM和变量的值,这样的查看对于类似这样的制作是很关键的,因为在发送或读取设备的寄存器后,通常设备会有一些状态值返回,程序则要求根据 这些值做相应的处理,如果是直接烧片调试则会使得程序的调试过程变得非常的困难。光驱需要的电流比较大,一般要一点几安培的电流,且要用到+5V和+ 12V两个电压,在制作时可以使用开关电源模块或使用旧电脑上的AT电源(也是开关电源),如果用普通的电压器加7805、7812则不能满足要求。还有 一点值得注意的是IDE连接电缆的红色线为一号线,其它则顺序排列到40号,同时要把光驱后面板上的跳线设置为主盘(MASTER)。像其它电脑接口或单片机应用制作一样,本实例的难点在于单片机控制程序的编写。ATAPI协议是在ATA协议发展出来的,它的控制命令和返回的数据格 式十分繁复,用于光驱时对于不同形式的光盘,控制命令的使用方式也不太一样,本文是把光驱改为CD播放器,所以编程的着重点在于CD音频光盘的控制命令如 何发送到光驱上的ATAPI接口。ATAPI有许多寄存器,操作这些不同的寄存器便可以实现相应的功能,如读状态寄存器应先设置好CS和DA选定要操作的 是状态寄存器,把DIOW拉低,这时就可以读ATAPI的数据线DD了,得到当前的设备状态,再把DIOW拉高完成读取,在本文的源码中可以参看void ReadStatus(void)函数。在发送控制命令时,可以分为二类,分别为ATA Command(ATA命令)和ATAPI Packet Command(ATAPI信息包命令),前者只要先选择要操作的是命令寄存器,再向数据口发一命令字节就可以实现所要的功能,如先选择命令寄存器再发送 A1H到数据口,就可以执行识别光驱的自检命令,命令完成后读数据口可以得到光驱的相关信息,如型号、序列号等,源码中可以参看void InitCDROM(void)中的相关语句。后者的使用则相对复杂一些,发送信息包时,先要向传输字节计数寄存器写要发送的字节数,再送A0H信息命令 字到命令寄存器通知设备要发送信息包,最后则是向数据寄存器发送信息包。一般信息包为12个字节,第一个字节为命令字,代表不此信息包的功能,其后的是参 数,程序实现可以参看void SendPacket(unsigned char SkipDRQ)函数。对于常用的寄存器和信息包命令的具体介绍可以看下篇。大家也许知道,CDROM播放CD时有一系列的动作,先是上电复位、光盘托盘打开、放入光盘托盘关闭、读取曲目播放。同样使用单片机对光驱进行CD播 放控制时也应要有这样的顺序,在本文源码中的主程序中先是调用初始化函数,对光驱进行复位和识别,初始化成功后就会调用读取TOC函数读取曲目和相关值。 然后就是对按钮进行判断,做出相应的控制。图6是播放CD时的基本顺序图。图5:实验电路光驱改装CD播放机(下篇)作者:温正伟原载:无线电杂志二、IDE(ATAPI)引脚定义从表一可以看到ATAPI各引脚的定义,下面是几个在实例中要使用的引脚具体说明:1 DD(15:0)Device DataDD占用318引脚,是一个8位或16位的双向数据线,在用于读写CDROM的寄存器时只使用低8位,而在传送信息包或数据时使用全部16位。2 CS(1:0)Chip SelectCS0,CS1是用于选择指令寄存器芯片的,为低电平有效,它和DA组合就可以选择所要操作的寄存器。3 DA(2:0)Device AddressDA为三位的地址线,和CS组合选取要操作的寄存器。4 DIOR(Device I/O read)DIOR为控制寄存器或数据口读的引脚,低电平有效。5 DIOW(Device I/O write)DIOW为控制寄存器或数据口写的引脚,低电平有效。6 RESET当此引脚为低电平时CDROM会被复位。7 INTRQ (Device interrupt)INTRQ为中断请求,当CDROM在读写数据等状态下会在此引脚输出信号以使控制器中断程序得以执行,本实例中没有使用到这个方法。8 IORDY (I/O channel ready)这个引脚可判断CDROM的数据口是否就绪,等待数据的输入或输出。同样实例中没有使用到些引脚。前6种引脚都在实例电路中一一连接在51单片机的IO引脚上,我们可以根据CDROM引脚所要求的电平去实现该引脚的功能,如RESET引脚为低电平有效,连接于单片机的P0.7引脚上,用如下的51C语言就可以实现对CDROM实行复位操作:P0_7 = 0; /拉低P0_7,RESET为低,复位开始dmsec(100); /调用延时函数延时一段时间P0_7 = 1; /拉高RESET,复位完成三、认识ATAPI寄存器地 址功 能CS0CS1DA2DA1DA0读操作(DIOR)写操作(DIOW)AN000数 据AN001错误寄存器FeaturesAN010ATAPI Interrupt Reason/扇区计数(Sector Number)AN011扇区数(Sector Number)AN100传输字节计数低8位/Cylinder LowAN101传输字节计数高8位/Cylinder HighAN110驱动器选择(Select)AN111状态寄存器命令寄存器*注:在功能中同一个寄存器在读操作和写操作时可能会有两个不同的功能。灰色部分的功能会受到BSY(忙)和DRQ(数据请求就绪)这两个状态影响。表中CS栏中的A表示为有效状态(低电平),N为无效状态(高电平),DA栏中的1为高电平,0为低电平。表3ATAPI常用寄存器表在IDE界面中寄存器的作用可以分二类,一种是用于传送指令和返回数据,一种是用于控制设备和返回控制状态。表3中指明了各ATAPI常用寄存器的地 址和功能。地址是用CS和DA组成,CS为寄存器区段的选择,再加上三位地址的DA就可以组合出多个地址编码选择不同的寄存器。在单片机控制程序中可以把 P3口IO引脚和DA、CS相连,在程序中控制P3口各引脚的电平状态去选择要操作的寄存器,再通过控制DIOR/ DIOW引脚电平实现读写寄存器。部分的寄存器地址是相同的,如状态寄存器和命令寄存器使用同一个地址,读这个地址时为操作状态寄存器,写这个地址时为操 作状态寄存器。下面是本实例中用于控制CDROM用于CD播放时用到的部分寄存器的简单说明。1 错误(ERROR)寄存器错误寄存器是返回当前的错误信息或指令的执行状态,它是一个只读寄存器,如写入这个寄存器则是写入到Features寄存器中。在实例中的初始化 CDROM的函数中执行驱动器自身诊断命令后,可以读取在错误寄存器中返回的诊断结果并和进行标准值对比判断驱动器是否可用。读取的方法很简单,先查表 3,得知错误寄存器的地址后,设置对应的引脚电平,这时就可以在DD中的低8位读取到寄存器中的数据。2 状态(Status)寄存器状态寄存器也是一个只读寄存器,读取它时将会在DD中的低8位返回驱动器的当前状态或指令运行的状态。返回数据的每一位定义如下: 76543210BSY DRDY#DRQobsoleteobsoleteERR表4 状态(Status)寄存器BSY为1时表示驱动器正处于工作状态忙。如在驱动器上电时,驱动器复位,这时BSY为1,等到复位完成后BSY为0。当驱动器处于忙状态时将 不会响应其它命令,在程序中可以不断的查询BSY位等到变为0时才继续发达命令。DRDY为1是表示驱动器准备就绪。当这个位为0时驱动器没有就绪这时无法使用。号所占的位会根据不同的指令返回的指代表的意思也不同。DRQ为1时表示数据请求就绪,这时驱动器准备接受数据,如向命令寄存器发送A0H(PACKET命令)后,DRQ位置1,表示驱动器这时可以接受命令信息包了。Obslete位一般不使用ATAPI,只是部分旧式的ATA设备所使用。ERR位为1时表示指令执行失败或驱动器存在错误。3 命令(Command)寄存器命令寄存器和状态寄存器同一个地址,是只写寄存器。向这个寄存器传送命令字时将会立即被执行。传送的方法是先设置好地址线,再向DD数据口的低8位写入指令字节。4 Cylinder Low/High寄存器这两个寄存器是可读也可以写,分别为所要发送或接收的数据长度的高低字节,写入数据值N时表示主设备要向驱动器写入或读出写入N次十六位的数据。这 在发送信息包时很重要,信息包的长度一般为12个字节长度,那么就可要求先在Cylinder Low/High寄存器写入0006H(L写入06H,H写入00H),也就是说12个字节会分成6次传送,每次2字节(16位)。具体的C语言实现可以 参看实例中的void SendPacket(unsigned char SkipDRQ)函数。四、ATA命令ATAPI是在ATA发展而来的,所以仍支持绝大部分的ATA命令。这些命令会直接送到Command寄存器后被ATAPI设备所执行。在这里只说明一下实例程序中所用到的一些相关命令。1ATAPI设备软复位命令(08H)当向命令寄存器写入08H时,驱动器会执行软件复位命令,执行效果和硬件复位差不多。2. 设备诊断(90H)执行这个命令时,驱动器会运行自身诊断程序,诊断结束后会返回一个值到错误寄存器,读取错误寄存器值并和标准值比较,当返回值不等于01H或81H时则说明CDROM自身诊断未通过(Device0)。3.识别信息包功能IDENTIFY PACKET DEVICE(A1H)这个命令执行后可以返回当前所选择的驱动器的信息包参数和其它相关的参数,如信息包的长度、驱动器的型号、驱动器序列号等等。先向命令寄存器发A1H,然 后就可以在DATA寄存器中读取驱动器相关信息,每次可以读取两个字节,应信息串的格式较长这里不再一一说明,可以参考文章结尾的网页地址中资料。5 信息包功能 PACKET(AOH)执行这个命令后驱动器将准备发送信息包命令,在执行这个命令之前应先向 Cylinder Low/High寄存器写入将发送一个值为命令信息包的长度除于2的数值,以让驱动器知道要接收多少次数据。限于篇幅有限更加详细的说明可以参看Information Technology AT Attachmentwith Packet Interface Extension(ATA/ATAPI-4)的第8章节或ATA Packet Interface for CD-ROMs SFF-8020i的第7章节。五信息包命令上面提到发送PACKET命令后就可以发送信息包命令,信息包的格式会是什么样的?信息包又有什么功能?带着这样的问题我们来看看实例中的要用到的信息包命令。ATAPI是在ATA发展过来的,最大的不同点就是有了针对CDROM等设备的信息包命令,实现两者的兼容。从上文可以得知发送PACKET命令后就 可以发送信息包命令了,简单说来就是ATAPI设备在收到PACKET命令后就会进入信息包的接收状态,如信息包正常发送完成后,设备就会执行这个信息包 命令。信息包的格式一般由12字节组成,有些设备是16字节,对于这个值的确定可以用识别信息包功能读取信息值。首字节是指令字,以后的字节就是参数。 这些字节的发送是这样实现的,选定DATA寄存器,把两个字节加在DD的十六位数据线上,控制DIOW为低,完成写入,再拉高DIOW,后两个字节加上数 据线上如此循环直到所有字节发送完。文中的实例是针对CDROM中的CD播放功能的,那下面举几个CD播放要用到的信息包命令。1. READ SUBCHANNEL读次信道命令这个命令执行后驱动器会返回CD中的次信道信息和播放状态等。这些信息如:当前的MSF地址,当前的音频播放状态和当前的轨道数等。表5是它的格 式,表6则是它的返回数据格式。具体的实现可以参考实例程序中的void ReadSub(void)函数。ByteBit765432100指令字(42H)1保留MSF保留2SubQ保留3次信道数据格式4保留5保留6轨道数7MSB分配长度 LSB89保留10保留11保留表5READ SUBCHANNEL读次信道命令 次信道数据格式字节可以设定返回数据的数式,一般使用01H,这样将返回CDROM当前位置上的次信道数据。返回的数据格式如表六。ByteBit76543210次信道数据报头0保留1音频状态2MSB次信道数据长度 LSB3CDROM当前位置次信道数据区块4次信道数据格式字(01H)5ADRControl6当前曲目号7当前索引号8MSB绝对地址 LSB9101112MSB轨道相对地址 LSB131415表6次信道返回数据格式2READ TOC Command读轨道TOC命令TOC是指光盘中轨道的开始地址及其它相关信息,这些信息存在于Q sub-channel(Q子信道)中。当指定要播放一条曲目,就要先知道曲目所在轨道的开始地址和结束地址。这就需要用这个命令去读取光盘中轨道信息, 它还将返回CD光盘的曲目数等。ByteBit765432100指令字(43H)1保留MSF保留2保留返回数据格式3保留4保留5保留6曲目号7MSB分配长度 LSB89返回数据格式保留10保留11保留表7读TOC命令MSF位是要求返地址格式为MSF地址格式,这个位一般要置1。MSF地址格式是指光盘中的数据实际被写入的位置,最小单位是F,75个F字段则为一 个S字段,而60个字段则为一个M字段。F字段的有效值范围为074,S字段的有效值范围为059,M字段的有效值范围为099。MSF地址的数据 格式由4个字节组成,第一字节为保留字节,第二字节为M字段,第三字节为S字段,第四字节为F字段。返回数据格式在第二字节和第九字节中,设它为的数值返回的数据形式也不同,在CD光盘播放中一般置零就可以了。曲目号是指定要返回TOC数据的曲目号,它的有效值为00H-63H,也就是0-99号,当曲目号为AAH时则返回整张光盘的结束MSF地址。具体编程方法可以参看void ReadTOC(unsigned char Track)函数的写法。表八则是返回数据的格式。ByteBit765432100MSBTOC数据长度1LSB2开始曲目号3结束曲目号TOC轨道描述4保留5ADRControl6当前曲目号7保留8MSB绝对地址 (MSF地址格式)LSB91011表8读TOC命令返回数据格式(format字段为00H)3.PLAY AUDIO MSF Command播放命令当用读TOC命令得知曲目的MSF开始和结束地址数据后,就可以用播放命令去插放该曲目的音乐了。要播放单个曲子可以先读它的开始MSF地址做为开 始地址,再读下一曲子的MSF地址做为结束地址。而播放整个光盘则可以先读首曲目的MSF地址做为开始地址,再用AAH去读最后的结束地址做为结束地址。 播放命令的信息包格式如表九。ByteBit765432100指令字(47H)1保留2保留3开始M字段4开始S字段5开始F字段6结束M字段7结束S字段8结束F字段9保留10保留11保留表9PLAY AUDIO MSF Command播放命令在这里透过简单的制作实例只能简单介绍这几个命令,而ATAPI所拥有的命令是非常丰富的,它里面还包括了CDRW,CDR,CDDA,CDROM等光盘的读写操作命令和设备的操作命令。 光驱改装CD播放机(下篇)作者:温正伟原载:无线电杂志二、IDE(ATAPI)引脚定义从表一可以看到ATAPI各引脚的定义,下面是几个在实例中要使用的引脚具体说明:1 DD(15:0)Device DataDD占用318引脚,是一个8位或16位的双向数据线,在用于读写CDROM的寄存器时只使用低8位,而在传送信息包或数据时使用全部16位。2 CS(1:0)Chip SelectCS0,CS1是用于选择指令寄存器芯片的,为低电平有效,它和DA组合就可以选择所要操作的寄存器。3 DA(2:0)Device AddressDA为三位的地址线,和CS组合选取要操作的寄存器。4 DIOR(Device I/O read)DIOR为控制寄存器或数据口读的引脚,低电平有效。5 DIOW(Device I/O write)DIOW为控制寄存器或数据口写的引脚,低电平有效。6 RESET当此引脚为低电平时CDROM会被复位。7 INTRQ (Device interrupt)INTRQ为中断请求,当CDROM在读写数据等状态下会在此引脚输出信号以使控制器中断程序得以执行,本实例中没有使用到这个方法。8 IORDY (I/O channel ready)这个引脚可判断CDROM的数据口是否就绪,等待数据的输入或输出。同样实例中没有使用到些引脚。前6种引脚都在实例电路中一一连接在51单片机的IO引脚上,我们可以根据CDROM引脚所要求的电平去实现该引脚的功能,如RESET引脚为低电平有效,连接于单片机的P0.7引脚上,用如下的51C语言就可以实现对CDROM实行复位操作:P0_7 = 0; /拉低P0_7,RESET为低,复位开始dmsec(100); /调用延时函数延时一段时间P0_7 = 1; /拉高RESET,复位完成三、认识ATAPI寄存器地 址功 能CS0CS1DA2DA1DA0读操作(DIOR)写操作(DIOW)AN000数 据AN001错误寄存器FeaturesAN010ATAPI Interrupt Reason/扇区计数(Sector Number)AN011扇区数(Sector Number)AN100传输字节计数低8位/Cylinder LowAN101传输字节计数高8位/Cylinder HighAN110驱动器选择(Select)AN111状态寄存器命令寄存器*注:在功能中同一个寄存器在读操作和写操作时可能会有两个不同的功能。灰色部分的功能会受到BSY(忙)和DRQ(数据请求就绪)这两个状态影响。表中CS栏中的A表示为有效状态(低电平),N为无效状态(高电平),DA栏中的1为高电平,0为低电平。表3ATAPI常用寄存器表在IDE界面中寄存器的作用可以分二类,一种是用于传送指令和返回数据,一种是用于控制设备和返回控制状态。表3中指明了各ATAPI常用寄存器的地址和功能。地址是用CS和DA组成,CS为寄存器区段的选择,再加上三位地址的DA就可以组合出多个地址编码选择不同的寄存器。在单片机控制程序中可以把P3口IO引脚和DA、CS相连,在程序中控制P3口各引脚的电平状态去选择要操作的寄存器,再通过控制DIOR/ DIOW引脚电平实现读写寄存器。部分的寄存器地址是相同的,如状态寄存器和命令寄存器使用同一个地址,读这个地址时为操作状态寄存器,写这个地址时为操作状态寄存器。下面是本实例中用于控制CDROM用于CD播放时用到的部分寄存器的简单说明。1 错误(ERROR)寄存器错误寄存器是返回当前的错误信息或指令的执行状态,它是一个只读寄存器,如写入这个寄存器则是写入到Features寄存器中。在实例中的初始化CDROM的函数中执行驱动器自身诊断命令后,可以读取在错误寄存器中返回的诊断结果并和进行标准值对比判断驱动器是否可用。读取的方法很简单,先查表3,得知错误寄存器的地址后,设置对应的引脚电平,这时就可以在DD中的低8位读取到寄存器中的数据。2 状态(Status)寄存器状态寄存器也是一个只读寄存器,读取它时将会在DD中的低8位返回驱动器的当前状态或指令运行的状态。返回数据的每一位定义如下:76543210BSYDRDY#DRQobsoleteobsoleteERR表4 状态(Status)寄存器BSY为1时表示驱动器正处于工作状态忙。如在驱动器上电时,驱动器复位,这时BSY为1,等到复位完成后BSY为0。当驱动器处于忙状态时将不会响应其它命令,在程序中可以不断的查询BSY位等到变为0时才继续发达命令。DRDY为1是表示驱动器准备就绪。当这个位为0时驱动器没有就绪这时无法使用。号所占的位会根据不同的指令返回的指代表的意思也不同。DRQ为1时表示数据请求就绪,这时驱动器准备接受数据,如向命令寄存器发送A0H(PACKET命令)后,DRQ位置1,表示驱动器这时可以接受命令信息包了。Obslete位一般不使用ATAPI,只是部分旧式的ATA设备所使用。ERR位为1时表示指令执行失败或驱动器存在错误。3 命令(Command)寄存器命令寄存器和状态寄存器同一个地址,是只写寄存器。向这个寄存器传送命令字时将会立即被执行。传送的方法是先设置好地址线,再向DD数据口的低8位写入指令字节。4 Cylinder Low/High寄存器这两个寄存器是可读也可以写,分别为所要发送或接收的数据长度的高低字节,写入数据值N时表示主设备要向驱动器写入或读出写入N次十六位的数据。这在发送信息包时很重要,信息包的长度一般为12个字节长度,那么就可要求先在Cylinder Low/High寄存器写入0006H(L写入06H,H写入00H),也就是说12个字节会分成6次传送,每次2字节(16位)。具体的C语言实现可以参看实例中的void SendPacket(unsigned char SkipDRQ)函数。四、ATA命令ATAPI是在ATA发展而来的,所以仍支持绝大部分的ATA命令。这些命令会直接送到Command寄存器后被ATAPI设备所执行。在这里只说明一下实例程序中所用到的一些相关命令。1ATAPI设备软复位命令(08H)当向命令寄存器写入08H时,驱动器会执行软件复位命令,执行效果和硬件复位差不多。2. 设备诊断(90H)执行这个命令时,驱动器会运行自身诊断程序,诊断结束后会返回一个值到错误寄存器,读取错误寄存器值并和标准值比较,当返回值不等于01H或81H时则说明CDROM自身诊断未通过(Device0)。3.识别信息包功能IDENTIFY PACKET DEVICE(A1H)这个命令执行后可以返回当前所选择的驱动器的信息包参数和其它相关的参数,如信息包的长度、驱动器的型号、驱动器序列号等等。先向命令寄存器发A1H,然后就可以在DATA寄存器中读取驱动器相关信息,每次可以读取两个字节,应信息串的格式较长这里不再一一说明,可以参考文章结尾的网页地址中资料。5 信息包功能 PACKET(AOH)执行这个命令后驱动器将准备发送信息包命令,在执行这个命令之前应先向 Cylinder Low/High寄存器写入将发送一个值为命令信息包的长度除于2的数值,以让驱动器知道要接收多少次数据。限于篇幅有限更加详细的说明可以参看Information Technology AT Attachmentwith Packet Interface Extension(ATA/ATAPI-4)的第8章节或ATA Packet Interface for CD-ROMs SFF-8020i的第7章节。五信息包命令上面提到发送PACKET命令后就可以发送信息包命令,信息包的格式会是什么样的?信息包又有什么功能?带着这样的问题我们来看看实例中的要用到的信息包命令。ATAPI是在ATA发展过来的,最大的不同点就是有了针对CDROM等设备的信息包命令,实现两者的兼容。从上文可以得知发送PACKET命令后就可以发送信息包命令了,简单说来就是ATAPI设备在收到PACKET命令后就会进入信息包的接收状态,如信息包正常发送完成后,设备就会执行这个信息包命令。信息包的格式一般由12字节组成,有些设备是16字节,对于这个值的确定可以用识别信息包功能读取信息值。首字节是指令字,以后的字节就是参数。这些字节的发送是这样实现的,选定DATA寄存器,把两个字节加在DD的十六位数据线上,控制DIOW为低,完成写入,再拉高DIOW,后两个字节加上数据线上如此循环直到所有字节发送完。文中的实例是针对CDROM中的CD播放功能的,那下面举几个CD播放要用到的信息包命令。1. READ SUBCHANNEL读次信道命令这个命令执行后驱动器会返回CD中的次信道信息和播放状态等。这些信息如:当前的MSF地址,当前的音频播放状态和当前的轨道数等。表5是它的格式,表6则是它的返回数据格式。具体的实现可以参考实例程序中的void ReadSub(void)函数。ByteBit765432100指令字(42H)1保留MSF保留2 SubQ保留3次信道数据格式4保留5保留6轨道数7MSB分配长度 LS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供水配套用户接入管理与实施方案
- 生活垃圾焚烧厂消防系统建设方案
- 热力系统低碳技术应用方案
- 酒店建设环保措施实施方案
- 校园周边安全教育课件
- 校园安全教育演讲内容稿
- 矿山资源股权转让与矿山安全生产责任协议
- 离婚后共同财产分割及股权变更及分配补充协议
- 离婚协议中股权、债权及知识产权三方协议
- 水库除险加固工程技术方案
- 高考数学压轴题专项训练:集合、常用逻辑用语、不等式(新定义高数观点压轴题)含答案及解析
- 呼吸道合胞病毒护理查房
- 铭记历史缅怀先烈-珍爱和平开创未来
- 2023-2024学年广东省深圳市红岭中学高一上学期第一次段考化学试题及答案
- 项目施工单位与当地政府及村民的协调措施
- 2024澳大利亚技术移民与留学服务协议
- 名著阅读《童年》导读课课件
- 《无人机测绘技术(微课版)》全套教学课件
- 合规风险管理制度
- 2024年四川省成都市中考作文“赢”与“迎”写作指导
- GB/T 21220-2024软磁金属材料
评论
0/150
提交评论