|
二、IDE(ATAPI)引腳定義 從表一可以看到ATAPI各引腳的定義,下面是幾個(gè)在實(shí)例中要使用的引腳具體說(shuō)明: 1. DD(15:0)Device Data DD占用3-18引腳,是一個(gè)8位或16位的雙向數(shù)據(jù)線,在用于讀寫(xiě)CDROM的寄存器時(shí)只使用低8位,而在傳送信息包或數(shù)據(jù)時(shí)使用全部16位。 2. CS(1:0)Chip Select CS0,CS1是用于選擇指令寄存器芯片的,為低電平有效,它和DA組合就可以選擇所要操作的寄存器。 3. DA(2:0)Device Address DA為三位的地址線,和CS組合選取要操作的寄存器。 4. DIOR(Device I/O read) DIOR為控制寄存器或數(shù)據(jù)口讀的引腳,低電平有效。 5. DIOW(Device I/O write) DIOW為控制寄存器或數(shù)據(jù)口寫(xiě)的引腳,低電平有效。 6. RESET 當(dāng)此引腳為低電平時(shí)CDROM會(huì)被復(fù)位。 7. INTRQ (Device interrupt) INTRQ為中斷請(qǐng)求,當(dāng)CDROM在讀寫(xiě)數(shù)據(jù)等狀態(tài)下會(huì)在此引腳輸出信號(hào)以使控制器中斷程序得以執(zhí)行,本實(shí)例中沒(méi)有使用到這個(gè)方法。 8. IORDY (I/O channel ready) 這個(gè)引腳可判斷CDROM的數(shù)據(jù)口是否就緒,等待數(shù)據(jù)的輸入或輸出。同樣實(shí)例中沒(méi)有使用到些引腳。 前6種引腳都在實(shí)例電路中一一連接在51單片機(jī)的IO引腳上,我們可以根據(jù)CDROM引腳所要求的電平去實(shí)現(xiàn)該引腳的功能,如RESET引腳為低電平有效,連接于單片機(jī)的P0.7引腳上,用如下的51C語(yǔ)言就可以實(shí)現(xiàn)對(duì)CDROM實(shí)行復(fù)位操作: P0_7 = 0; //拉低P0_7,RESET為低,復(fù)位開(kāi)始 dmsec(100); //調(diào)用延時(shí)函數(shù)延時(shí)一段時(shí)間 P0_7 = 1; //拉高RESET,復(fù)位完成 三、認(rèn)識(shí)ATAPI寄存器
表3 ATAPI常用寄存器表 在IDE界面中寄存器的作用可以分二類(lèi),一種是用于傳送指令和返回?cái)?shù)據(jù),一種是用于控制設(shè)備和返回控制狀態(tài)。表3中指明了各ATAPI常用寄存器的地址和功能。地址是用CS和DA組成,CS為寄存器區(qū)段的選擇,再加上三位地址的DA就可以組合出多個(gè)地址編碼選擇不同的寄存器。在單片機(jī)控制程序中可以把P3口IO引腳和DA、CS相連,在程序中控制P3口各引腳的電平狀態(tài)去選擇要操作的寄存器,再通過(guò)控制DIOR/ DIOW引腳電平實(shí)現(xiàn)讀寫(xiě)寄存器。部分的寄存器地址是相同的,如狀態(tài)寄存器和命令寄存器使用同一個(gè)地址,讀這個(gè)地址時(shí)為操作狀態(tài)寄存器,寫(xiě)這個(gè)地址時(shí)為操作狀態(tài)寄存器。下面是本實(shí)例中用于控制CDROM用于CD播放時(shí)用到的部分寄存器的簡(jiǎn)單說(shuō)明。 1. 錯(cuò)誤(ERROR)寄存器 錯(cuò)誤寄存器是返回當(dāng)前的錯(cuò)誤信息或指令的執(zhí)行狀態(tài),它是一個(gè)只讀寄存器,如寫(xiě)入這個(gè)寄存器則是寫(xiě)入到Features寄存器中。在實(shí)例中的初始化CDROM的函數(shù)中執(zhí)行驅(qū)動(dòng)器自身診斷命令后,可以讀取在錯(cuò)誤寄存器中返回的診斷結(jié)果并和進(jìn)行標(biāo)準(zhǔn)值對(duì)比判斷驅(qū)動(dòng)器是否可用。讀取的方法很簡(jiǎn)單,先查表3,得知錯(cuò)誤寄存器的地址后,設(shè)置對(duì)應(yīng)的引腳電平,這時(shí)就可以在DD中的低8位讀取到寄存器中的數(shù)據(jù)。 2. 狀態(tài)(Status)寄存器 狀態(tài)寄存器也是一個(gè)只讀寄存器,讀取它時(shí)將會(huì)在DD中的低8位返回驅(qū)動(dòng)器的當(dāng)前狀態(tài)或指令運(yùn)行的狀態(tài)。返回?cái)?shù)據(jù)的每一位定義如下:
表4 狀態(tài)(Status)寄存器 BSY為1時(shí)表示驅(qū)動(dòng)器正處于工作狀態(tài)--忙。如在驅(qū)動(dòng)器上電時(shí),驅(qū)動(dòng)器復(fù)位,這時(shí)BSY為1,等到復(fù)位完成后BSY為0。當(dāng)驅(qū)動(dòng)器處于忙狀態(tài)時(shí)將不會(huì)響應(yīng)其它命令,在程序中可以不斷的查詢BSY位等到變?yōu)?時(shí)才繼續(xù)發(fā)達(dá)命令。 DRDY為1是表示驅(qū)動(dòng)器準(zhǔn)備就緒。當(dāng)這個(gè)位為0時(shí)驅(qū)動(dòng)器沒(méi)有就緒這時(shí)無(wú)法使用。 ?。L?hào)所占的位會(huì)根據(jù)不同的指令返回的指代表的意思也不同。 DRQ為1時(shí)表示數(shù)據(jù)請(qǐng)求就緒,這時(shí)驅(qū)動(dòng)器準(zhǔn)備接受數(shù)據(jù),如向命令寄存器發(fā)送A0H(PACKET命令)后,DRQ位置1,表示驅(qū)動(dòng)器這時(shí)可以接受命令信息包了 Obslete位一般不使用ATAPI,只是部分舊式的ATA設(shè)備所使用。 ERR位為1時(shí)表示指令執(zhí)行失敗或驅(qū)動(dòng)器存在錯(cuò)誤。 3. 命令(Command)寄存器 命令寄存器和狀態(tài)寄存器同一個(gè)地址,是只寫(xiě)寄存器。向這個(gè)寄存器傳送命令字時(shí)將會(huì)立即被執(zhí)行。傳送的方法是先設(shè)置好地址線,再向DD數(shù)據(jù)口的低8位寫(xiě)入指令字節(jié)。 4. Cylinder Low/High寄存器 這兩個(gè)寄存器是可讀也可以寫(xiě),分別為所要發(fā)送或接收的數(shù)據(jù)長(zhǎng)度的高低字節(jié),寫(xiě)入數(shù)據(jù)值N時(shí)表示主設(shè)備要向驅(qū)動(dòng)器寫(xiě)入或讀出寫(xiě)入N次十六位的數(shù)據(jù)。這在發(fā)送信息包時(shí)很重要,信息包的長(zhǎng)度一般為12個(gè)字節(jié)長(zhǎng)度,那么就可要求先在Cylinder Low/High寄存器寫(xiě)入0006H(L寫(xiě)入06H,H寫(xiě)入00H),也就是說(shuō)12個(gè)字節(jié)會(huì)分成6次傳送,每次2字節(jié)(16位)。具體的C語(yǔ)言實(shí)現(xiàn)可以參看實(shí)例中的void SendPacket(unsigned char SkipDRQ)函數(shù)。 四、ATA命令 ATAPI是在ATA發(fā)展而來(lái)的,所以仍支持絕大部分的ATA命令。這些命令會(huì)直接送到Command寄存器后被ATAPI設(shè)備所執(zhí)行。在這里只說(shuō)明一下實(shí)例程序中所用到的一些相關(guān)命令。 1.ATAPI設(shè)備軟復(fù)位命令(08H) 當(dāng)向命令寄存器寫(xiě)入08H時(shí),驅(qū)動(dòng)器會(huì)執(zhí)行軟件復(fù)位命令,執(zhí)行效果和硬件復(fù)位差不多。 2. 設(shè)備診斷(90H) 執(zhí)行這個(gè)命令時(shí),驅(qū)動(dòng)器會(huì)運(yùn)行自身診斷程序,診斷結(jié)束后會(huì)返回一個(gè)值到錯(cuò)誤寄存器,讀取錯(cuò)誤寄存器值并和標(biāo)準(zhǔn)值比較,當(dāng)返回值不等于01H或81H時(shí)則說(shuō)明CDROM自身診斷未通過(guò)(Device0)。 3.識(shí)別信息包功能IDENTIFY PACKET DEVICE(A1H) 這個(gè)命令執(zhí)行后可以返回當(dāng)前所選擇的驅(qū)動(dòng)器的信息包參數(shù)和其它相關(guān)的參數(shù),如信息包的長(zhǎng)度、驅(qū)動(dòng)器的型號(hào)、驅(qū)動(dòng)器序列號(hào)等等。先向命令寄存器發(fā)A1H,然后就可以在DATA寄存器中讀取驅(qū)動(dòng)器相關(guān)信息,每次可以讀取兩個(gè)字節(jié),應(yīng)信息串的格式較長(zhǎng)這里不再一一說(shuō)明,可以參考文章結(jié)尾的網(wǎng)頁(yè)地址中資料。 5. 信息包功能 PACKET(AOH) 執(zhí)行這個(gè)命令后驅(qū)動(dòng)器將準(zhǔn)備發(fā)送信息包命令,在執(zhí)行這個(gè)命令之前應(yīng)先向 Cylinder Low/High寄存器寫(xiě)入將發(fā)送一個(gè)值為命令信息包的長(zhǎng)度除于2的數(shù)值,以讓驅(qū)動(dòng)器知道要接收多少次數(shù)據(jù)。 限于篇幅有限更加詳細(xì)的說(shuō)明可以參看'Information Technology AT Attachment with Packet Interface Extension(ATA/ATAPI-4)'的第8章節(jié)或'ATA Packet Interface for CD-ROMs SFF-8020i'的第7章節(jié)。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
來(lái)自: 濤聲依舊桃子幺 > 《手機(jī)電腦類(lèi)》