基于非IDE专用接口芯片的自主型光盘复制机的系统设计
扫描二维码
随时随地手机看文章
1 自主型光盘复制机系统的主要功能指标和应用
主要功能指标为:
(1)一对一复制,按一键完成4倍速的仿真或刻录功能;
(2)空间、时间和硬件资源最节省;
(3)系统增加IDE与PARALLEL口的转换后,可作为PC机的外置式光盘驱动器;
(4)具有状态显示和自动完成、退出提示等;
(5)支持大多数工业标准的CD格式,如红皮书、黄皮书、白皮书和绿皮书标准(AUDIO CD、VIDEO CD、DADA CD、MIXED MODE CD、PHOTO CD、GAME CD)等。
本系统可应用于学校、企事业机关和个人的光盘制作、多媒体演示、小量的分发、信息存储和备份等。
2 系统组成
系统组成如图1所示。整个系统由1块控制板、一条IDE电缆、一台CD-R驱动器、一台CD-ROM驱动器、开关电源以及系统界面构成。其中,控制板是整个光盘复制系统的核心,它控制着从CD-ROM内读取原始数据,然后写入到CD-R中的空白光盘上。界面上只有状态灯和一个选择按钮,按钮经控制板读取后,决定了写入的模式。
3 核心硬件设计
(1)整个设计围绕着对光驱的读与写操作、数据传输(分为PIO模式和DMA模式)、PID传输以及IDE设备与主机的握手通讯(如数据包、命令、任务、状态等的发送和接收)进行。DMA是IDE的数据总线和主机的存储器数据线SRAM间的直接传输。在IDE设备与主机通讯的基础,ATAPI光盘读写命令及其它相关命令得以实现,在这里设计的光盘复制机(两个ATAPI)正是基于IDE设备的接口。
主机与IDE接口的通讯通过IDE总线的CS0-、CS1-、DA2、DA1、DA0、DIOR-、DIOW-等信号来进行,相关功能见表1。
表1 IDE接口功能和选择地址
地 址 | 功 能 | |||||
Cs0- | N | DA2 | DA1 | DA0 | READ(DIOR) | WRITE(DIOW) |
A | N | 0 | 0 | 0 | DATA | DATA |
A | N | 0 | 0 | 1 | ERROR | FEATURE |
A | N | 0 | 1 | 0 | RESON | |
A | N | 0 | 1 | 1 | RESERVE | |
A | N | 1 | 0 | 0 | BYTE-CNT-LOW | BYTE-CNT-LOW |
A | N | 1 | 0 | 1 | BYTE-CNT-HIGH | BYTE-CNT-HIGH |
A | N | 1 | 1 | 0 | DEVICE-SEL | DEVICE-SEL |
A | N | 1 | 1 | 1 | STATUS | COMMAND |
ATAPI的命令如TEST UNIT READY、MODE SENSE、READ TRACK INFORMATION、READ、WRITE等都是通过以上接口进行发送的,接收可以是PIO模式或DMA模式。
(2)光盘的读写速率是按75block(frame)/s来计算的。一个block等于2352个字节,但用户数据随着CD格式的不同而不同,1倍速按每秒75个block读写,2倍速按每秒150个block读写。然而,4倍速复制并不是要求主机一次读取300(4×75)个block大小的数据量,而是通过目标光盘刻录速度的设置来完成的。通常有20~30个block(大约70~80K的数据量)读写速度就够了,太小容易死机,太多则加大了对机存储空间SRAM的要求。在这里我们选择了64K×16bit的SRAM。
(3)支持Enhance IDE的设备都具有快速DMA功能。在光盘复制时,实现大量数据的快速读写DMA是必需的。在DMA外部工作频率为12.5MHz时,一般能反动派到1.5M/s的传输能力,例如INTEL 82C37A。
(4)主机UP(CPU)选择性价比较好的8032系列单片机,可支持40MHz的外部工作频率。为了加强对知识的保护,也为了实现8位微机与16位SRAM以及大量外围芯片的译码,选用了CPLD来增加其集成度,其设计采用原理图+VHDL方式。
硬件设计简图如图2所示。
4 软件实现
参考CD-WO规范,CD-WO的写入方式主要有两种:Track at once(轨道)和Disc/Session at once(分区)。这和光盘的信息存放格式分类有极大的关系。在国内,多分区的光盘MULT-SESSION CD如MIXED CD、CD-I等较为少见,它们是数据区和音频区的结合,一般第一个分区与其它分区不同。某些光盘用Track at once能够成功地刻录,而用Disc at once方式则失败;反之亦然。
通常,Disc at once较为普遍,若写入CUESheet则整个光盘的刻录轨迹位置就固定了。而在实践中发现,对于MIXED-CD用Track at once更容易成功。图3、图4是两种写入方式的简单过程。
实际的软件编程要比这些复杂。对于经常调用的过程,通常都用汇编语言编写,例如:从IDE接口寄存器中的读写(Read-Data-Reg,Write-Data-Reg,Read-Status-Reg,Write-CMD-pkt,Write-Task-Ide)等。而针对ATAPI的大多命令,都用C51编写,例如:mode-select(),read-10(ad),write-10(ad),tray-out(),send-cue-sheet()等。
部分执行程序的示例如下:
IDE接口地址定义部分 ;;IDE Interface Address
例如:IDE_STATUS EQU 81F7H
……
_Read_Status_Reg: ;;读IDE驱动器设备状态子程序
lcall _Drive_Select;选择光驱
……
mov p1,#IDE_Lmode
mov DPTR,#IDE_STATUS
movx @DPTR,a ;DIOR valid
……
mov p1,#Sram64_Lmode
movx A,@DPTR
mov R7,A ;返回状态到r7寄存器
ret
Write_Cmd_Pkt: nop ;写6字命令包子程序
;写6字事先已存入内空间
cmd_buffer
mov R0,#cmd_buffer
mov R1,#06H ;//6 words to write
send_pkt:
mov A,@R0
mov pl,#Sram64_Lmode
mov DPTR,#IDE_DATA_REG
movx @DPTR,A ;//write low byte
inc R0
;//类似的写高字节到16位SRAM
……
;再将16bit从16位SRAM中一次写入IDE设备
mov pl,#IDE_WMode ;select IDE device
mov DPTR,#IDE_DATA_REG
;//16bit packet command write
movx a,@DPTR ;DIOW valid
……
inc R0
djnz R1,send_pkt
ret
void send_cue_sh(USI par_len)
{//ATAPI CD-WO Command,10字节 //命令字节初始化设备
……
do {
status=Read_Status_Reg(drv);
}while(status&0x80); //不忙时才可写入
nonDMA_xfer_data 1(); //non DMA(PIO模式)
P1=SRAM32;
status=Read_Status_Reg(drv); //读取返回的状态
if(status&0x01) {
rqsense(); //ATAPI Command
}
}/*End of send_cue_sh */
基于非IDE专用接口芯片的自主型光盘复制机是对目前光盘复制市场的有益补充。其设计要求有较高的单片机、DMA传输以及CPLD等硬件知识和对CD、CDWO格式以及对ATAPI整个命令的了解。