摘? 要: 基于非IDE專用接口芯片(MCU、DMA、SRAM、CPLD等組成)的光盤復(fù)制機(jī)的系統(tǒng)設(shè)計(jì);著重對(duì)系統(tǒng)功能、整體設(shè)計(jì)原理、硬件結(jié)構(gòu)和軟件實(shí)現(xiàn)等問題進(jìn)行了描述;對(duì)光盤的存儲(chǔ)和讀寫技術(shù)作了相應(yīng)的介紹。?
關(guān)鍵詞: 光盤復(fù)制機(jī)? IDE接口? ATAPI設(shè)備?
?
自1980年P(guān)hilips和 Sony公司推出數(shù)字聲音標(biāo)準(zhǔn)的CD(Compact Disc)以來,CD就以其信息存儲(chǔ)量大、存儲(chǔ)時(shí)間長和容易攜帶等優(yōu)點(diǎn),受到人們的青睞,并被廣泛應(yīng)用于娛樂、發(fā)行、信息存儲(chǔ)和備份等方面。隨著近年來可擦寫光盤驅(qū)動(dòng)器CD-R(CD-Record-able)的出現(xiàn)和廉價(jià)可寫光盤CD-WO(CD-Write Once)的漸漸普及,光盤的復(fù)制、刻錄變得容易起來。除了使用相當(dāng)專業(yè)的光盤復(fù)制設(shè)備外,更多的辦法是借助于個(gè)人計(jì)算機(jī)或只有VIDEO的光盤錄像機(jī)進(jìn)行復(fù)制,但其成本相對(duì)較高,復(fù)制過程也比較麻煩。所以自主型(獨(dú)立完成復(fù)制,不需計(jì)算機(jī))光盤復(fù)制機(jī)應(yīng)運(yùn)而生,采用專門SCSI接口芯片的1對(duì)1復(fù)制機(jī)出現(xiàn)了。但由于SCSI接口的光盤驅(qū)動(dòng)器額外成本較IDE接口的高,并且市場(chǎng)上大量使用的是IDE接口的光驅(qū),因此,設(shè)計(jì)低成本的基于IDE接口的自主型光盤復(fù)制機(jī)是對(duì)光盤復(fù)制市場(chǎng)的極大補(bǔ)充。?
1 自主型光盤復(fù)制機(jī)系統(tǒng)的主要功能指標(biāo)和應(yīng)用?
主要功能指標(biāo)為:?
(1)一對(duì)一復(fù)制,按一鍵完成4倍速的仿真或刻錄功能;?
(2)空間、時(shí)間和硬件資源最節(jié)省;?
(3)系統(tǒng)增加IDE與PARALLEL口的轉(zhuǎn)換后,可作為PC機(jī)的外置式光盤驅(qū)動(dòng)器;?
(4)具有狀態(tài)顯示和自動(dòng)完成、退出提示等;?
(5)支持大多數(shù)工業(yè)標(biāo)準(zhǔn)的CD格式,如紅皮書、黃皮書、白皮書和綠皮書標(biāo)準(zhǔn)(AUDIO CD、VIDEO CD、DADA CD、MIXED MODE CD、PHOTO CD、GAME CD)等。?
本系統(tǒng)可應(yīng)用于學(xué)校、企事業(yè)機(jī)關(guān)和個(gè)人的光盤制作、多媒體演示、小量的分發(fā)、信息存儲(chǔ)和備份等。?
2 系統(tǒng)組成?
系統(tǒng)組成如圖1所示。整個(gè)系統(tǒng)由1塊控制板、一條IDE電纜、一臺(tái)CD-R驅(qū)動(dòng)器、一臺(tái)CD-ROM驅(qū)動(dòng)器、開關(guān)電源以及系統(tǒng)界面構(gòu)成。其中,控制板是整個(gè)光盤復(fù)制系統(tǒng)的核心,它控制著從CD-ROM內(nèi)讀取原始數(shù)據(jù),然后寫入到CD-R中的空白光盤上。界面上只有狀態(tài)燈和一個(gè)選擇按鈕,按鈕經(jīng)控制板讀取后,決定了寫入的模式。?
?
?
3 核心硬件設(shè)計(jì)?
(1)整個(gè)設(shè)計(jì)圍繞著對(duì)光驅(qū)的讀與寫操作、數(shù)據(jù)傳輸(分為PIO模式和DMA模式)、PIO傳輸以及IDE設(shè)備與主機(jī)的握手通訊(如數(shù)據(jù)包、命令、任務(wù)、狀態(tài)等的發(fā)送和接收)進(jìn)行。DMA是IDE的數(shù)據(jù)總線和主機(jī)的存儲(chǔ)器數(shù)據(jù)線SRAM間的直接傳輸。在IDE設(shè)備與主機(jī)通訊的基礎(chǔ)上,ATAPI光盤讀寫命令及其它相關(guān)命令得以實(shí)現(xiàn),在這里設(shè)計(jì)的光盤復(fù)制機(jī)(兩個(gè)ATAPI)正是基于IDE設(shè)備的接口。?
主機(jī)與IDE接口的通訊通過IDE總線的CS0-、CS1-、DA2、DA1、DA0、DIOR-、DIOW-等信號(hào)來進(jìn)行,相關(guān)功能見表1。
?
?
ATAPI的命令如TEST UNIT READY、MODE SENSE、READ TRACK INFORMATION、READ、WRITE等都是通過以上接口進(jìn)行發(fā)送的,接收可以是PIO模式或DMA模式。 ?
(2)光盤的讀寫速率是按75block(frame)/s來計(jì)算的。一個(gè)block等于2352個(gè)字節(jié),但用戶數(shù)據(jù)隨著CD格式的不同而不同,1倍速按每秒75個(gè)block讀寫,2倍速按每秒150個(gè)block讀寫。然而,4倍速復(fù)制并不是要求主機(jī)一次讀取300(4×75)個(gè)block大小的數(shù)據(jù)量,而是通過對(duì)目標(biāo)光盤刻錄速度的設(shè)置來完成的。通常有20~30個(gè)block(大約70~80K的數(shù)據(jù)量)讀寫速度就夠了,太少容易死機(jī),太多則加大了對(duì)主機(jī)存儲(chǔ)空間SRAM的要求。在這里我們選擇了64K×16bit的SRAM。?
(3)支持Enhance IDE的設(shè)備都具有快速DMA功能。在光盤復(fù)制時(shí),實(shí)現(xiàn)大量數(shù)據(jù)的快速讀寫DMA是必需的。在DMA外部工作頻率為12.5MHz時(shí),一般能達(dá)到1.5M/s的傳輸能力,例如INTEL 82C37A。?
(4)主機(jī)UP(CPU)選擇性價(jià)比較好的8032系列單片機(jī),可支持40MHz的外部工作頻率。為了加強(qiáng)對(duì)知識(shí)的保護(hù),也為了實(shí)現(xiàn)8位微機(jī)與16位SRAM以及大量外圍芯片的譯碼,選用了CPLD來增加其集成度,其設(shè)計(jì)采用原理圖+VHDL方式。?
硬件設(shè)計(jì)簡圖如圖2所示。?
?
?
4 軟件實(shí)現(xiàn)?
參考CD-WO規(guī)范,CD-WO的寫入方式主要有兩種:Track at once(軌道)和Disc/Session at once(分區(qū))。這和光盤的信息存放格式分類有極大的關(guān)系。在國內(nèi),多分區(qū)的光盤MULT-SESSION CD如MIXED CD、 CD-I等較為少見,它們是數(shù)據(jù)區(qū)和音頻區(qū)的結(jié)合,一般第一個(gè)分區(qū)與其它分區(qū)不同。某些光盤用Track at once 能夠成功地刻錄,而用Disc at once方式則失敗;反之亦然。?
通常,Disc at once 較為普遍,若寫入CUE-Sheet則整個(gè)光盤的刻錄軌跡位置就固定了。而在實(shí)踐中發(fā)現(xiàn),對(duì)于MIXED-CD用Track at once 更容易成功。圖3、圖4是兩種寫入方式的簡單過程。?
?
?
?
實(shí)際的軟件編程要比這些復(fù)雜。對(duì)于經(jīng)常調(diào)用的過程,通常都用匯編語言編寫,例如:從IDE接口寄存器中的讀寫(Read-Data-Reg,Write-Data-Reg,Read-Status-Reg,Write-CMD-pkt,Write-Task-Ide)等。而針對(duì)ATAPI的大多命令,都用C51編寫,例如:mode-select(),read-10(ad),write-10(ad),tray-out(),send-cue-sheet()等。?
??? 部分執(zhí)行程序的示例如下。?
IDE接口地址定義部分? ?? ;;IDE Interface Address?
例如:IDE_STATUS????? ?? EQU? 81F7H?
……?
_Read_Status_Reg:? ???? ;;讀IDE驅(qū)動(dòng)器設(shè)備狀態(tài)子程序?
??????????? ??? lcall?? _Drive_Select;選擇光驅(qū)?
??????????????? ……?
??????????? ??? mov?? ? p1,#IDE_LMode?
??????????? ??? mov???? DPTR,#IDE_STATUS?
???????????? ?? movx??? @DPTR,a??? ;DIOR valid?
??????????????? ……?
??????????????? mov?????p1,#Sram64_LMode?
??????????? ??? movx????A,@DPTR?
??????????????? mov???? R7,A ? ;返回狀態(tài)到r7寄存器?
??????????? ??? ret?
Write_Cmd_Pkt:? nop?????;寫6字命令包子程序?
????????????????????????;寫6字事先已存入內(nèi)空間?
?????????????????????? ??cmd_buffer?
???? ?????????? mov?? ? R0,#cmd_buffer?
???? ?????????? mov??? ?R1,#06H ;//6 words to write?
send_pkt:?
??????????? ??? mov???? A,@R0?
??????????? ??? mov???? p1,#Sram64_LMode?
??????????? ??? mov???? DPTR,#IDE_DATA_REG?
??????????? ??? movx??? @DPTR,A? ;//write low byte?
??? ?????? ???? inc???? R0?
???????? ??? ???;//類似的寫高字節(jié)到16位SRAM ?
??????????????? ……?
? ??????????????;再將16bit從16位SRAM中一次寫入?
??????????????? IDE設(shè)備?
??????????????? mov? ?? p1,#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字節(jié)?
??? //命令字節(jié)初始化設(shè)置?
??????? ……??? ?
??????? do {?
??? ? ? status=Read_Status_Reg(drv);?
}while(status&0x80); ?????? //不忙時(shí)才可寫入?
nonDMA_xfer_data1();???? ?? //non DMA (PIO 模式)?
P1=SRAM32;?
status=Read_Status_Reg(drv);??? //讀取返回的狀態(tài)?
if(status&0x01) {?
??????? rqsense();???? ???? //ATAPI Command?
??? }?
} /* End of send_cue_sh */?
基于非IDE專用接口芯片的自主型光盤復(fù)制機(jī)是對(duì)目前光盤復(fù)制市場(chǎng)的有益補(bǔ)充。其設(shè)計(jì)要求有較高的單片機(jī)、DMA傳輸以及CPLD等硬件知識(shí)和對(duì)CD、CD-WO格式以及對(duì)ATAPI整個(gè)命令的了解。?
參考文獻(xiàn)?
1 Cmos High Performance Programmable DMA Controller.Harris Semiconducator,1994?
2 ATAPI Interface Manual for Sony ATAPI Cd-R/RW Drive.Sony Corporation,1998?
3 Recordable Compact Disc System(Part 2:CD-WO,version2.0).Sony and Philips,1994