光驱改装CD播放机

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

光驱改装CD播放机(上篇)

作者:温正伟原载:无线电杂志

本文的相关程序下载:点击下载

源码文件说明

demo.c C源码文件

demo.Uv2 keil项目文件

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接口连接件的引脚号定义图。

表一

*注:在引脚名前有"/"的引脚为低电平有效

表2 ATAPI接口的引脚定义说明

图4是电路原理图,表1是元件列表,本实例中使用51单片机做为控制芯片,用它的P1,P2口组成16位的数据输入输出口,连接IDE的D0-D15 数据线。P0口用于连接IDE 的读写控制、复位和寄存器控制,由于P0口的驱动力比较低,所以用10K的排阻对其上拉。晶振没有什么特别的要求,这里可以选用11.0592M或12M,加上上电复位电路组成典型的单片机最小系统。P3口则用于播放,前进,后退,停止和开关托盘控制按键的输入,P3.7接一个发光二极管是用于显示光驱是否装载了CD光盘或是否出错了,出错或没有光盘时该LED会点亮。电路连接无误后烧录编译好的HEX文件到51芯片上,就可以正常工作了。本文提供的源码只实现这几种功能,在这个基础上可以加上LED数码管或LCD显示曲目时间等信息,也可以加入遥控接收等功能。

图4:原理图(点击看大图)

图5是笔者用于实验和调试的电路实物照片。调试时使用自制兼容F-MON51的仿真器和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播放机(下篇)

作者:温正伟原载:无线电杂志

二、IDE(ATAPI)引脚定义

从表一可以看到ATAPI各引脚的定义,下面是几个在实例中要使用的引脚具体说明:1. DD(15:0)Device Data

DD占用3-18引脚,是一个8位或16位的双向数据线,在用于读写CDROM的寄存器时只使用低8位,而在传送信息包或数据时使用全部16位。

2. CS(1:0)Chip Select

CS0,CS1是用于选择指令寄存器芯片的,为低电平有效,它和DA组合就可以选择所

相关文档
最新文档