|
| | 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等都是通過以上接口進(jìn)行發(fā)送的,接收可以是PIO模式或DMA模式。 (2)光盤的讀寫速率是按75block(frame)/s來計算的。一個block等于2352個字節(jié),但用戶數(shù)據(jù)隨著CD格式的不同而不同,1倍速按每秒 75個block讀寫,2倍速按每秒150個block讀寫。然而,4倍速復(fù)制并不是要求主機(jī)一次讀取300(4×75)個block大小的數(shù)據(jù)量,而是通過目標(biāo)光盤刻錄速度的設(shè)置來完成的。通常有20~30個block(大約70~80K的數(shù)據(jù)量)讀寫速度就夠了,太小容易死機(jī),太多則加大了對機(jī)存儲空間SRAM的要求。在這里我們選擇了64K×16bit的SRAM。 (3)支持Enhance IDE的設(shè)備都具有快速DMA功能。在光盤復(fù)制時,實(shí)現(xiàn)大量數(shù)據(jù)的快速讀寫DMA是必需的。在DMA外部工作頻率為12.5MHz時,一般能反動派到1.5M/s的傳輸能力,例如INTEL 82C37A。 (4)主機(jī)UP(CPU)選擇性價比較好的8032系列單片機(jī),可支持40MHz的外部工作頻率。為了加強(qiáng)對知識的保護(hù),也為了實(shí)現(xiàn)8位微機(jī)與16位SRAM以及大量外圍芯片的譯碼,選用了CPLD來增加其集成度,其設(shè)計采用原理圖+VHDL方式。 硬件設(shè)計簡圖如圖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é)合,一般第一個分區(qū)與其它分區(qū)不同。某些光盤用Track at once能夠成功地刻錄,而用Disc at once方式則失;反之亦然。 通常,Disc at once較為普遍,若寫入CUESheet則整個光盤的刻錄軌跡位置就固定了。而在實(shí)踐中發(fā)現(xiàn),對于MIXED-CD用Track at once更容易成功。圖3、圖4是兩種寫入方式的簡單過程。 實(shí)際的軟件編程要比這些復(fù)雜。對于經(jīng)常調(diào)用的過程,通常都用匯編語言編寫,例如:從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()等。 部分執(zhí)行程序的示例如下: IDE接口地址定義部分 ;;IDE Interface Address 例如:IDE_STATUS EQU 81F7H …… _Read_Status_Reg: ;;讀IDE驅(qū)動器設(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 pl,#Sram64_Lmode mov DPTR,#IDE_DATA_REG movx @DPTR,A ;//write low byte inc R0 ;//類似的寫高字節(jié)到16位SRAM …… ;再將16bit從16位SRAM中一次寫入IDE設(shè)備 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字節(jié) //命令字節(jié)初始化設(shè)備 …… do { status=Read_Status_Reg(drv); }while(status&0x80); //不忙時才可寫入 nonDMA_xfer_data 1(); //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ī)是對目前光盤復(fù)制市場的有益補(bǔ)充。其設(shè)計要求有較高的單片機(jī)、DMA傳輸以及CPLD等硬件知識和對CD、CDWO格式以及對ATAPI整個命令的了解。 |