亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

對(duì)于橋控制器的高速和靈活控制的制作方法

文檔序號(hào):6414983閱讀:151來(lái)源:國(guó)知局
專利名稱:對(duì)于橋控制器的高速和靈活控制的制作方法
技術(shù)領(lǐng)域
本申請(qǐng)涉及橋控制器,具體來(lái)說(shuō),涉及USB 2.0 ATA/ATAPI存儲(chǔ)設(shè)備的橋控制器。
背景技術(shù)
通用串行總線(USB)2.0標(biāo)準(zhǔn)支持每秒1.5、12和480兆位的數(shù)據(jù)傳輸速率。數(shù)據(jù)可以通過(guò)最多5m長(zhǎng)的電纜進(jìn)行傳輸,最多可以支持127臺(tái)設(shè)備。需要USB 2.0主機(jī)控制器來(lái)對(duì)總線和數(shù)據(jù)傳輸進(jìn)行控制。圖1顯示了計(jì)算機(jī)系統(tǒng)中的USB大容量存儲(chǔ)橋控制器的電路連接。計(jì)算機(jī)102在其內(nèi)部具有USB主機(jī)控制器。主機(jī)控制器控制沿著USB總線104到USB大容量存儲(chǔ)橋控制器106的傳輸。USB大容量存儲(chǔ)橋控制器106通過(guò)ATA/ATAPI總線108連接到ATA/ATAPI大容量存儲(chǔ)驅(qū)動(dòng)器110。這可以是ATA硬盤驅(qū)動(dòng)器或ATAPI CD或DVD驅(qū)動(dòng)器。USB主機(jī)控制器沿著USB總線發(fā)送命令塊包裝(CBW)數(shù)據(jù)包,如方框112所示。此信號(hào)被USB大容量存儲(chǔ)橋控制器106用來(lái)對(duì)驅(qū)動(dòng)器110進(jìn)行編程,以接收或發(fā)送數(shù)據(jù)。如方框112所示,然后,在計(jì)算機(jī)和大容量存儲(chǔ)驅(qū)動(dòng)器之間或在大容量存儲(chǔ)驅(qū)動(dòng)器和計(jì)算機(jī)之間進(jìn)行數(shù)據(jù)傳輸。一旦數(shù)據(jù)傳輸完成,則將顯示驅(qū)動(dòng)器的狀態(tài)和數(shù)據(jù)傳輸狀態(tài)的命令狀態(tài)包裝(CSW)數(shù)據(jù)包發(fā)回計(jì)算機(jī)。USB 2.0對(duì)于比較大的數(shù)據(jù)塊支持兩種類型的傳輸批量傳輸,用于移動(dòng)不能忍受錯(cuò)誤的數(shù)據(jù),等時(shí)傳輸,用于移動(dòng)不能忍受延遲的數(shù)據(jù)。在僅批量協(xié)議中使用的傳輸命令集基于SCSI透明命令集,該命令集用與僅批量協(xié)議相關(guān)的某些信息包裝,以針對(duì)特定的傳輸形成命令塊包裝(CBW)。
CBW包含31個(gè)字節(jié)的必須處理的數(shù)據(jù)。將對(duì)某些字節(jié)進(jìn)行檢查,以核查真實(shí)性,而另外一些字節(jié)被用來(lái)對(duì)將與其進(jìn)行數(shù)據(jù)傳輸?shù)脑O(shè)備進(jìn)行編程。表1顯示了命令塊包裝(CBW)的布局。第一個(gè)字段包含對(duì)應(yīng)于將數(shù)據(jù)包識(shí)別為CBW的dCBWSignature的4個(gè)字節(jié)的數(shù)據(jù)。下一字段是主機(jī)發(fā)送的命令塊標(biāo)記。當(dāng)驅(qū)動(dòng)器返回狀態(tài)數(shù)據(jù)包(CSW)時(shí),此字段的內(nèi)容被反饋到主機(jī)。包含字節(jié)8-11的第三個(gè)字段是數(shù)據(jù)傳輸長(zhǎng)度,并包含在命令執(zhí)行過(guò)程中主機(jī)希望在批量進(jìn)或批量出傳輸時(shí)傳輸?shù)臄?shù)據(jù)的字節(jié)數(shù)。如果此字段為零,則驅(qū)動(dòng)器和主機(jī)不傳輸任何數(shù)據(jù),設(shè)備將忽略方向位的值。下一字段包括字節(jié)12,該字節(jié)包含控制數(shù)據(jù)傳輸方向的CBW標(biāo)志。下一字段包含單字節(jié),該單字節(jié)中的頭4位預(yù)留,后4位包含與其進(jìn)行傳輸?shù)脑O(shè)備的邏輯單元號(hào)。下一字段包含預(yù)留的3個(gè)位,和五個(gè)位,用于表示命令塊長(zhǎng)度。最后一個(gè)字段包含字節(jié)15-30,包含命令塊,這是要由驅(qū)動(dòng)器執(zhí)行的命令。
通常,CBW的處理是通過(guò)使用硬件狀態(tài)機(jī)或通過(guò)使用軟件控制的微控制器(MCU)來(lái)實(shí)現(xiàn)的。硬件狀態(tài)機(jī)比軟件控制的微控制器快得多,通??梢栽趲孜⒚雰?nèi)執(zhí)行完此任務(wù)?;谟布顟B(tài)機(jī)的設(shè)備的缺點(diǎn)是,它不適合于可能沒有正確地遵循標(biāo)準(zhǔn)的ATA/ATAPI設(shè)備。制造商可能在他們的設(shè)備中選擇使用預(yù)留的寄存器來(lái)提供其他功能。這是比較常見的情況。這意味著,現(xiàn)有的基于硬件狀態(tài)機(jī)的控制器無(wú)法與非標(biāo)準(zhǔn)的設(shè)備一起使用,因?yàn)樗鼰o(wú)法處理非標(biāo)準(zhǔn)的情況。一旦硬件控制器以硅制造,則不可能改變狀態(tài)機(jī)的操作。然而,軟件控制的微控制器卻可以輕松地改變,因?yàn)檐浖绦蛲ǔ4鎯?chǔ)在電可重編程非易失性存儲(chǔ)器中,如快閃存儲(chǔ)器或EEPROM,以提供所需要的靈活性,以處理以后生產(chǎn)的非標(biāo)準(zhǔn)設(shè)備。然而,軟件解決方案比硬件解決方案慢得多,通常需要花500-700微秒才能執(zhí)行完任務(wù)。
表1-命令塊包裝

USB 2.0總線是向計(jì)算機(jī)添加更多存儲(chǔ)容量的一種方便的方式,特別是膝上型計(jì)算機(jī),USB 2.0連接的硬盤驅(qū)動(dòng)器隨時(shí)都可用。利用標(biāo)準(zhǔn)的基準(zhǔn)軟件對(duì)這樣的設(shè)備進(jìn)行的測(cè)試表明,它們比內(nèi)置的硬盤驅(qū)動(dòng)器慢?;谲浖目刂破鬟M(jìn)行數(shù)據(jù)傳輸所需要的500-700微秒的時(shí)間是相同的,不管所傳輸?shù)奈募拇笮∪绾?。如此,似乎,此時(shí)間對(duì)USB 2.0連接的硬盤驅(qū)動(dòng)器的性能造成嚴(yán)重的影響。因此,需要一種具有硬件狀態(tài)機(jī)的速度和軟件控制的微控制器的靈活性,并可以以比當(dāng)前可用的設(shè)備更高的速度執(zhí)行操作的USB 2.0控制器。

發(fā)明內(nèi)容
本發(fā)明的一般目的是提供高速度、高靈活性的橋控制器。
根據(jù)本發(fā)明的一個(gè)方面,用于在數(shù)據(jù)存儲(chǔ)設(shè)備和數(shù)據(jù)利用設(shè)備之間傳輸數(shù)據(jù)的橋控制器提供了本發(fā)明的此目的和其他目的和特征,該橋控制器接收用于控制數(shù)據(jù)傳輸?shù)拿钚畔?shù)據(jù)包。在向橋控制器傳輸數(shù)據(jù)包的過(guò)程中,狀態(tài)機(jī)在后臺(tái)模式下實(shí)時(shí)地接收命令信息,狀態(tài)機(jī)利用命令信息來(lái)設(shè)置用于進(jìn)行數(shù)據(jù)傳輸?shù)慕邮赵O(shè)備。在接收到命令信息數(shù)據(jù)包之后,可編程處理器連接到命令信息數(shù)據(jù)包,處理器在必要時(shí)對(duì)用于進(jìn)行傳輸?shù)慕邮赵O(shè)備的設(shè)置進(jìn)行更改,然后啟動(dòng)數(shù)據(jù)傳輸。
本發(fā)明的另一個(gè)方面包括USB到ATA/ATAPI橋。物理層從USB總線接收串行命令數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)換為并行格式。傳輸控制器接收并行數(shù)據(jù),并將數(shù)據(jù)傳輸?shù)骄彌_存儲(chǔ)器。對(duì)流過(guò)傳輸控制器的并行數(shù)據(jù)在后臺(tái)模式下進(jìn)行操作的狀態(tài)機(jī)實(shí)時(shí)對(duì)ATA或ATAPI設(shè)備進(jìn)行設(shè)置,以便進(jìn)行數(shù)據(jù)傳輸??删幊烫幚砥鬟B接到緩沖存儲(chǔ)器,并在所有命令信息都接收到之后中斷,以對(duì)所需要的ATA或ATAPI設(shè)備的任何設(shè)置數(shù)據(jù)分別進(jìn)行更改,然后啟動(dòng)數(shù)據(jù)傳輸。
本發(fā)明的第三個(gè)方面包括操作USB到ATA或ATAPI橋的方法。命令數(shù)據(jù)從數(shù)據(jù)利用設(shè)備通過(guò)USB總線傳輸?shù)綌?shù)據(jù)傳輸設(shè)備,再傳輸?shù)骄彌_存儲(chǔ)器。使用流過(guò)數(shù)據(jù)傳輸設(shè)備的數(shù)據(jù),在后臺(tái)模式下對(duì)狀態(tài)機(jī)實(shí)時(shí)地進(jìn)行操作,以提取設(shè)置數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)所需的與命令相關(guān)的寄存器中,以設(shè)置數(shù)據(jù)傳輸??删幊烫幚砥骼镁彌_存儲(chǔ)器中存儲(chǔ)的數(shù)據(jù),分別改變所需要的ATA或ATAPI設(shè)備的與命令相關(guān)的數(shù)據(jù)。然后,啟動(dòng)數(shù)據(jù)傳輸。


圖1是顯示了USB總線上的數(shù)據(jù)流的USB連接的大容量存儲(chǔ)驅(qū)動(dòng)器的方框圖;圖2是根據(jù)本發(fā)明的USB大容量存儲(chǔ)橋控制器的方框圖;圖3A和圖3B是用于檢測(cè)命令塊包裝(CBW)的狀態(tài)機(jī)的狀態(tài)圖;圖4是圖3A和3B所表示的狀態(tài)機(jī)的參數(shù)選擇邏輯電路的一部分的電路圖;圖5A和圖5B是圖3A和3B所表示的狀態(tài)機(jī)的參數(shù)選擇邏輯電路的其余部分的電路圖;以及圖6和7是軟件控制的微控制器的計(jì)算機(jī)程序的狀態(tài)機(jī)圖表。
具體實(shí)施例方式
圖2是顯示USB 2.0中的數(shù)據(jù)流的方框圖。ATA/ATAPI橋一般被顯示為200。圖1的USB總線104被顯示為204,ATA/ATAPI總線108被顯示為208。USB總線204上的串行數(shù)據(jù)進(jìn)入U(xiǎn)SB 2.0 UTM 214。UTM是符合UTMI的PHY,它從外部上游USB主機(jī)控制器(如主計(jì)算機(jī)102中的控制器)以高速度或全速模式接收串行數(shù)據(jù)。方框214中的PHY對(duì)串行數(shù)據(jù)流進(jìn)行處理,并基于USB 2.0規(guī)范和UTMI規(guī)范中的協(xié)議將其轉(zhuǎn)換為8位寬的并行數(shù)據(jù)總線信號(hào)。8位寬的數(shù)據(jù)通過(guò)總線216被傳遞到USB事務(wù)處理器218,該USB事務(wù)處理器利用USB數(shù)據(jù)包協(xié)議對(duì)數(shù)據(jù)進(jìn)行處理,并通過(guò)總線220將數(shù)據(jù)傳遞到USB緩沖區(qū)管理器222。對(duì)于CBW數(shù)據(jù)包,USB緩沖區(qū)管理器執(zhí)行地址解碼,并將數(shù)據(jù)包傳遞到CBW FIFO 232中的編址的緩沖區(qū)位置。USB緩沖區(qū)管理器還生成適當(dāng)?shù)闹袛嘁詫⑿聰?shù)據(jù)包到達(dá)的信息通知給微控制器。CBW FIFO232通過(guò)總線234連接到USB緩沖區(qū)管理器222,并通過(guò)總線238連接到ATA/ATAPI數(shù)據(jù)緩沖器控制器230??偩€234和238是32位寬,并傳輸所謂的“quadlet”。
ATA/ATAPI數(shù)據(jù)緩沖區(qū)控制器230具有硬件狀態(tài)機(jī)和微控制器以提供在控制時(shí)緩沖區(qū)控制器所需要的速度和靈活性。下面結(jié)合圖3-7詳細(xì)描述方框230。數(shù)據(jù)緩沖區(qū)控制器230通過(guò)16位寬的總線208將數(shù)據(jù)傳輸?shù)侥繕?biāo)ATA/ATAPI驅(qū)動(dòng)器,其中,利用數(shù)據(jù)來(lái)設(shè)置設(shè)備210中的寄存器,以便對(duì)將發(fā)生的數(shù)據(jù)傳輸進(jìn)行編程。一旦進(jìn)行了數(shù)據(jù)傳輸,目標(biāo)設(shè)備210就將通知橋控制器,而該橋控制器又將CSW狀態(tài)發(fā)回到主計(jì)算機(jī)102。
圖3是狀態(tài)機(jī)的狀態(tài)圖,該狀態(tài)機(jī)用于檢測(cè)命令塊包裝(CBW)數(shù)據(jù)包信息并提取ATA/ATAPI控制器所需要的參數(shù),或向ATA/ATAPI設(shè)備發(fā)出請(qǐng)求的命令。當(dāng)CBW FIFO 232正在被用數(shù)據(jù)填充時(shí),即,當(dāng)數(shù)據(jù)正在向緩沖區(qū)傳輸時(shí),狀態(tài)機(jī)接收數(shù)據(jù)。這就大大地提高了對(duì)命令數(shù)據(jù)進(jìn)行處理的速度。在隨后的圖形中,對(duì)數(shù)據(jù)的這種“運(yùn)行時(shí)”處理被稱為“嗅探”命令。在圖形中,狀態(tài)機(jī)的狀態(tài)用判斷方框左邊的文字作標(biāo)記,而判斷方框本身帶有編號(hào)。某些狀態(tài)包含一個(gè)以上的判斷方框。
狀態(tài)機(jī)中的第一個(gè)狀態(tài)是標(biāo)記為“CBW_IDLE”的空閑狀態(tài)。此狀態(tài)是等待發(fā)往此節(jié)點(diǎn)的輸出數(shù)據(jù)數(shù)據(jù)包的空閑狀態(tài),當(dāng)數(shù)據(jù)傳輸?shù)綐蚩刂破鲿r(shí),將實(shí)時(shí)獲取數(shù)據(jù)。如果此數(shù)據(jù)獲取模式被方框301中的標(biāo)記為“嗅探”CBW啟用的信號(hào)啟用,則狀態(tài)機(jī)接收第一個(gè)數(shù)據(jù)包,并在方框302中檢查第一個(gè)數(shù)據(jù)quadlet,以查看它是否匹配dCBWSignature。在此示例中,簽名將是“0x43425355”,這是ASCII代碼“CBSU”,表示USB大容量存儲(chǔ)類命令。如果此第一個(gè)數(shù)據(jù)quadlet匹配簽名,則機(jī)器進(jìn)入狀態(tài)“WAIT_TAG”。如果數(shù)據(jù)不匹配簽名,則狀態(tài)機(jī)將忽略此位數(shù)據(jù)包,并進(jìn)入狀態(tài)“WAIT_EOT”,以在方框354中等待事務(wù)的結(jié)束。
如果第一個(gè)quadlet匹配簽名,則機(jī)器傳遞到狀態(tài)304,等待CBW的第二個(gè)數(shù)據(jù)quadlet。第二個(gè)數(shù)據(jù)quadlet包含dCSWTag,這是命令塊標(biāo)記。這是目標(biāo)驅(qū)動(dòng)器將在關(guān)聯(lián)的CSW的dCSWTag字段中反饋到主機(jī)的代碼。狀態(tài)機(jī)忽略此標(biāo)記,這不與ATA/ATAPI命令參數(shù)相關(guān),控制進(jìn)入方框306??刂破鞔鎯?chǔ)目標(biāo)驅(qū)動(dòng)器的所有USB數(shù)據(jù),以便它可以被用來(lái)在狀態(tài)過(guò)程中向主機(jī)發(fā)送dCBWTag。
方框306是機(jī)器的WAIT_XFER_CNT狀態(tài)。在此狀態(tài)下,機(jī)器等待接收到第三個(gè)數(shù)據(jù)quadlet,該數(shù)據(jù)quadlet包含dCBWData TransferLength,這是傳輸字節(jié)統(tǒng)計(jì)。當(dāng)接收到此信號(hào)時(shí),信號(hào)“snoop_xfer_byte_cnt_en”被設(shè)置為“1”,以便ATA/ATAPI控制器可以將數(shù)據(jù)總線usb_rcv_data(31:0)上存在的第三quadlet數(shù)據(jù)加載到snoop_xfer_byte_cnt(31:0),(參見圖4),這將被用作ATA/ATAPI傳輸字節(jié)統(tǒng)。這將加載CBW的字節(jié)8-11,參見表1。在接收到到第三個(gè)數(shù)據(jù)quadlet之后,機(jī)器進(jìn)入方框310上的WAIT_FLAG狀態(tài)。
WAIT_FLAG狀態(tài)310等待接收第四個(gè)quadlet。當(dāng)接收到第四個(gè)quadlet時(shí),控制進(jìn)入方框312,檢查設(shè)備是否為ATAPI設(shè)備,如果是,將控制傳遞到方框314。判斷目標(biāo)設(shè)備是ATA還是ATAPI設(shè)備的操作是在系統(tǒng)初始化時(shí)由固件設(shè)置的。在方框314中,snoop_cbw_flag_en被設(shè)置為等于1,snoop_task_file0_en被設(shè)置為等于1。觸發(fā)器444在其數(shù)據(jù)輸入端接收信號(hào)usb_rcv_data(7:0),參見下面描述的圖4,在低態(tài)有效啟用輸入端ENZ施加信號(hào)snoop_cbw_flag_en。這將導(dǎo)致信號(hào)snoop_cbw_flag(7:0)在觸發(fā)器的Q輸出端輸出。位7包含CBW的bmCBW標(biāo)志的方向,用于設(shè)置ATA/ATAPI數(shù)據(jù)傳輸方向。第四個(gè)quadlet上的usb_rcv_data(31:24)包含CBWCB字節(jié)0,該CBWCB字節(jié)0將加載到task_file0,參見圖5,task_file0將寫入到發(fā)送到ATAPI設(shè)備的命令數(shù)據(jù)包中的第一個(gè)字節(jié)。然后,控制進(jìn)入方框318,這是狀態(tài)ATAPI_Q5。
如果在判斷方框312中的WAIT_FLAG狀態(tài),判斷設(shè)備不是ATAPI設(shè)備而是ATA設(shè)備,那么,控制進(jìn)入方框316中,在該方框中,snoop_cbw_flag_en被設(shè)置為等于1,snoop_taskfile7_en被設(shè)置為等于1。第四個(gè)數(shù)據(jù)quadlet的usb_rcv_data(7)中包含的信息包含CBW的bmCBW標(biāo)志的方向,用于設(shè)置ATA/ATAPI數(shù)據(jù)傳輸方向。第四個(gè)quadlet的usb_rcv_data(31:24)中存儲(chǔ)的數(shù)據(jù)包含CBW的操作碼。ATA設(shè)備的操作碼需要轉(zhuǎn)換為這樣的設(shè)備能夠理解的命令。這僅適用于ATA設(shè)備。操作碼等于28h的命令Read(10)和操作碼等于2Ah的Write(10)對(duì)于28位LBA地址,分別被轉(zhuǎn)換為具有操作碼C8h的ATA Read DMA,和具有命令CAh的Write DMA,或者,對(duì)于48位LBA地址,被轉(zhuǎn)換為等于25h的ATA Read DMA Ext,和等于35h的Write DMA Ext。編碼的和轉(zhuǎn)換的操作碼被加載到task_file_7,task_file_7將此數(shù)據(jù)(信息)寫入到ATA設(shè)備命令寄存器。在收到第四個(gè)數(shù)據(jù)quadlet之后,機(jī)器進(jìn)入狀態(tài)CHK_OP_CODE。
ATAPI_Q5狀態(tài)在方框318處檢查是否接收到第五個(gè)quadlet。一旦接收到quadlet,控制就進(jìn)入到方框320,在該方框中,信號(hào)snoop_task_file1_en、snoop_task_file2_en、snoop_task_file3_en和snoop_task_file4_en都被設(shè)置為等于1。下面將結(jié)合圖5說(shuō)明這些信號(hào)的使用。第五個(gè)quadlet的usb_rcv_data(31:24)中包含的數(shù)據(jù)將加載到task_file4,第五個(gè)quadlet的usb_rcv_data(23:16)中包含的數(shù)據(jù)將加載到task_file3,第五個(gè)quadlet的usb_rcv_data(15:8)中的數(shù)據(jù)將加載到task_file2,第五個(gè)quadlet的usb_rcv_data(7:0)中的數(shù)據(jù)將加載到task_file1。在收到第五個(gè)數(shù)據(jù)quadlet之后,控制進(jìn)入ATAPI_Q6狀態(tài)。
狀態(tài)ATAPI_Q6在方框322等候接收第六個(gè)數(shù)據(jù)quadlet。一旦接收到quadlet,控制就進(jìn)入到方框324,在該方框中,信號(hào)snoop_task_file5_en、snoop_taskfile6_en、snoop_task_file7_en_en和snoop_task_file8_en都被設(shè)置為等于1。第六個(gè)quadlet的usb_rcv_data(31:24)中的數(shù)據(jù)將加載到task_file8,第六個(gè)quadlet的usb_rcv_data(23:16)將加載到task_file7,第六個(gè)quadlet的usb_rcv_data(15:8)中的數(shù)據(jù)將加載到task_file6,第六個(gè)quadlet的usb_rcv-dat(7:0)中的數(shù)據(jù)將加載到task_file5。在接收到第六個(gè)數(shù)據(jù)quadlet之后,機(jī)器進(jìn)入ATAPI_Q7狀態(tài)。
在ATAPI_Q7狀態(tài),方框326等待接收第七個(gè)數(shù)據(jù)quadlet。當(dāng)接收到第七個(gè)數(shù)據(jù)quadlet時(shí),控制就進(jìn)入方框328,在該方框中,信號(hào)snoop_task_file9_en、snoop_task_file10_en、snoop_task_file11_en,和snoop_task_file12_en都被設(shè)置為等于1。第七個(gè)quadlet的usb_rcv_data(31:24)中的數(shù)據(jù)將加載到task_file12,第七個(gè)quadlet的usb_rcv_data(23:16)中的數(shù)據(jù)將加載到task_file11。第七個(gè)quadlet的usb_rcv_data(15:8)中的數(shù)據(jù)將加載到task_file10和第七個(gè)quadlet的usb_rcv_data(7:0)中的數(shù)據(jù)將加載到task_file9。在接收到第七個(gè)quadlet之后,狀態(tài)機(jī)進(jìn)入ATAPI_Q8狀態(tài)。
在ATAPI_Q8狀態(tài),方框330等待接收第八個(gè)數(shù)據(jù)quadlet。當(dāng)接收到第八個(gè)數(shù)據(jù)quadlet時(shí),控制進(jìn)入方框332,在該方框中,信號(hào)snoop_task_file13_en、snoop_task_file14_en、snoop_task_file15_en被設(shè)置為等于1,信號(hào)cbw_valid被設(shè)置為等于1(如果CBW字節(jié)統(tǒng)計(jì)等于31)。這將允許第八個(gè)quadlet的usb_rcv_data(23:16)加載到task_file15,允許第八個(gè)quadlet的usb_rcv_data(15:8)中的數(shù)據(jù)加載到task_file14。還將允許第八個(gè)quadlet的usb_rcv_data(7:0)加載到task_file13。當(dāng)cbw_valid被設(shè)置為1而數(shù)據(jù)包沒有CRC錯(cuò)誤,USB數(shù)據(jù)有效負(fù)載處理狀態(tài)機(jī)將生成到微控制器的cbw_valid中斷,以便微控制器將初始化ATAPI命令階段。在接收到第八個(gè)數(shù)據(jù)quadlet之后,狀態(tài)機(jī)進(jìn)入狀態(tài)WAIT_EOT。
現(xiàn)在回到方框334中的CHK_OP_CODE狀態(tài),如果第四個(gè)quadlet的usb_rcv_data(31:24)中的CBW的操作碼不匹配read(10)操作碼28h,或write(10)操作碼2Ah,則機(jī)器進(jìn)入WAIT_EOT。如果匹配,則狀態(tài)機(jī)進(jìn)入狀態(tài)ATA_Q5。在狀態(tài)ATA_Q5,方框336等待接收第五個(gè)數(shù)據(jù)quadlet。如果實(shí)現(xiàn)了48位LBA(邏輯塊地址),那么信號(hào)lba48_en將等于1,表明啟用了此功能。在此情況下,信號(hào)snoop_task_file_11_en、snoop_task_file_10_en和snoop_task_file_9_en都被設(shè)置等于1,以表明啟用了此功能。此外,信號(hào)snoop_task_file_6_en、snoop_task_file_5_en和snoop_task_file_4_en將都被設(shè)置為等于1。如果檢測(cè)到LBA地址錯(cuò)誤,狀態(tài)機(jī)將進(jìn)入狀態(tài)WAIT_EOT,否則狀態(tài)機(jī)將進(jìn)入狀態(tài)ATA_Q6。
狀態(tài)ATA_Q6在方框342等待接收第六個(gè)quadlet。一旦接收到此quadlet,控制就進(jìn)入方框344。在方框344中,如果啟用了48位尋址,則信號(hào)snoop_task_file_8_en將被設(shè)置為等于1,以表明啟用了此功能。此外,信號(hào)snoop_task_file_3_en、snoop_task_file_2_en、snoop_task_file_1_en和snoop_task_file_0_en將都被設(shè)置為等于1。如果發(fā)生扇區(qū)統(tǒng)計(jì)錯(cuò)誤,則狀態(tài)機(jī)將進(jìn)入WAIT_EOT狀態(tài),否則,它將進(jìn)入狀態(tài)ATA_Q7。
在繼續(xù)處理狀態(tài)機(jī)的操作之前,我們將討論ATA硬盤驅(qū)動(dòng)器的使用LBA 28位和48位尋址模式。28位尋址模式是對(duì)于較小的硬盤驅(qū)動(dòng)器很有用的比較舊的尋址模式。然而,當(dāng)今的較大的硬盤驅(qū)動(dòng)器需要更多的地址位。這些較新的驅(qū)動(dòng)器使用LBA 48位尋址模式。上文描述的寄存器是1字節(jié)寬的寄存器。對(duì)于48位LBA尋址,ATA接口利用2字節(jié)寬的寄存器。相應(yīng)地,必須執(zhí)行兩次寫入操作才能加載ATA接口的必需的寄存器。這在下面的表2中進(jìn)行了描述表2

當(dāng)利用LBA 28位尋址方案時(shí),task_file2包含sector count(7:0),并帶有來(lái)自第六個(gè)quadlet的usb_rcv_data(31:24)的數(shù)據(jù)。如果來(lái)自read(10)或wrlte(10)命令的transfer length(15:0)大于256或等于0,這就構(gòu)成了扇區(qū)統(tǒng)計(jì)錯(cuò)誤,狀態(tài)機(jī)將忽略數(shù)據(jù)包。task_file3包含LBA(7:0),并帶有來(lái)自第六個(gè)quadlet的usb_rcv_data(7:0)的數(shù)據(jù)。task_file4包含LBA(15:8),并帶有來(lái)自第五個(gè)quadlet的usb_rcv_data(31:24)的數(shù)據(jù)。task_file5包含LBA(23:16),并帶有來(lái)自第五個(gè)quadlet的usb_rcv_data(23:16)的數(shù)據(jù)。task_file6包含(″010″ & dev_sel & LBA(27:24)),其中,“010”表示LBA地址模式,dev_sel=0選擇沒備0,而dev_sel=1選擇設(shè)備1。LBA(27:24)來(lái)自第五個(gè)quadlet的usb_rcv_data(11:8)。如果第五個(gè)quadlet的usb_rcv_data(15:12)不等于0,這就是LBA地址錯(cuò)誤。Read(10)和write(10)將提供32位邏輯塊地址,但是較高的4位地址應(yīng)該是0,因?yàn)長(zhǎng)BA 28位尋址方案僅使用32位LBA地址的較低的28位。如果較高的4位地址是非0,則這就是LBA地址錯(cuò)誤。task_file7包含從read(10)轉(zhuǎn)換的read DMA(C8h)或從write(10)轉(zhuǎn)換的write DMA(CAh)。文件task_file2到task_file7值將被寫入到ATA設(shè)備,以發(fā)送ATA命令。在LBA 48位尋址方案中,task_file2包含sector count(7:0),并帶有來(lái)自第六個(gè)quadlet的usb_rcv_data(31:24)的數(shù)據(jù)。task_file8包含sector count(15:8),并帶有來(lái)自第六個(gè)quadlet的usb_rcv_data(23:16)的數(shù)據(jù)。sector count(15:0)是要傳輸?shù)目偟纳葏^(qū)統(tǒng)計(jì)。ATA狀態(tài)機(jī)將寫入到ATA扇區(qū)統(tǒng)計(jì)寄存器,task_file8值提供sectorcount(15:8)。然后,如前所述,必須進(jìn)行第二次寫入,以提供2字節(jié)寬的接口。ATA狀態(tài)機(jī)將再次寫入到ATA扇區(qū)統(tǒng)計(jì)寄存器,task_file2值提供sector count(7:0)。如果來(lái)自read(10)或write(10)命令的transfer length(15:0)等于0,這表示sector count(15:0)等于0,這是扇區(qū)統(tǒng)計(jì)錯(cuò)誤,狀態(tài)機(jī)將忽略數(shù)據(jù)包。task_file3包含LBA(7:0),并帶有來(lái)自第六個(gè)quadlet的usb_rcv_data(7:0)的數(shù)據(jù)。task_file9包含LBA(31:24),并帶有來(lái)自第五個(gè)quadlet的usb_rcv_data(15:8)的數(shù)據(jù)。ATA狀態(tài)機(jī)將寫入到ATA扇區(qū)編號(hào)寄存器,task_file9值提供LBA(31:24),然后ATA狀態(tài)機(jī)將再次寫入到ATA扇區(qū)編號(hào)寄存器,task_file3值提供LBA(7:0)。task_file4包含LBA(15:8),并帶有來(lái)自第五個(gè)quadlet的usb_rcv_data(31:24)的數(shù)據(jù)。task_file10包含LBA(39:32),但是來(lái)自read(10)和write(10)命令的邏輯塊地址將只有32位地址。因此,task_file10具有值00h。ATA狀態(tài)機(jī)將寫入到ATAcylinder low寄存器,task_file10中的值提供LBA(39:32),然后ATA狀態(tài)機(jī)將再次寫入到ATA cylinder low寄存器,task_file4中的值提供LBA(15:8)。
task_file5包含LBA(23:16),并帶有來(lái)自第五個(gè)quadlet的usb_rcv_data(23:16)的數(shù)據(jù)。task_file11包含LBA(47:32),但是來(lái)自read(10)和write(10)命令的邏輯塊地址(LBA)只有32位地址,這樣task_file11應(yīng)該具有值00h。ATA狀態(tài)機(jī)將寫入到ATAcylinder high寄存器,值task_file11提供LBA(47:40),然后ATA狀態(tài)機(jī)將再次寫入到ATA cylinder high寄存器,值task_file5提供LBA(23:16)。task_file6包含(″010″ & dev_sel & ″0000″),其中,“010”表示LBA地址模式,dev_sel為0表示選擇設(shè)備0,而為1表示選擇設(shè)備1。task_file7包含從read(10)轉(zhuǎn)換的read DMAExt.(25h)或從write(10)轉(zhuǎn)換的write DMA Ext.(35h)。task_file2到task_file7值將寫入到ATA設(shè)備,以發(fā)送ATA命令。
ATA_Q7狀態(tài)在方框348中等待第七個(gè)quadlet。當(dāng)接收到第七個(gè)quadlet時(shí),狀態(tài)機(jī)進(jìn)入狀態(tài)ATA_Q8。
在狀態(tài)ATA_Q8中,機(jī)器在350中等待接收第八個(gè)quadlet。當(dāng)接收到第八個(gè)quadlet時(shí),控制進(jìn)入方框352。在方框352中,當(dāng)接收到第八個(gè)quadlet時(shí),進(jìn)行檢查,以查看數(shù)據(jù)包字節(jié)統(tǒng)計(jì)是否等于31。如果等于31,則cbw_valid信號(hào)被設(shè)置為等于1。當(dāng)此信號(hào)被設(shè)置為等于1而數(shù)據(jù)包沒有CRC錯(cuò)誤時(shí),USB數(shù)據(jù)有效負(fù)載處理狀態(tài)機(jī)將生成到微控制器的cbw_valid中斷,以便微控制器可以初始化ATA命令階段。第七和第八個(gè)包含預(yù)留數(shù)據(jù),它們被狀態(tài)機(jī)忽略。在接收到第八個(gè)quadlet之后,狀態(tài)機(jī)進(jìn)入WAIT_EOT狀態(tài)。WAIT_EOT狀態(tài)在方框354等待事務(wù)結(jié)束,當(dāng)事務(wù)結(jié)束時(shí),它將狀態(tài)機(jī)返回到CBW_IDLE狀態(tài),處理再次開始。
現(xiàn)在請(qǐng)參看圖4,參數(shù)選擇邏輯一般被顯示為400。多路復(fù)用器414接收信號(hào)″010″& dev_sel & ″0000″,該信號(hào)來(lái)自task_file6,如上文結(jié)合圖3所描述的。線路404接收信號(hào)″010″& dev_sel &usb_rcv_data(11:8),該信號(hào)也來(lái)自task_file6,如上文結(jié)合圖3所描述的。信號(hào)lba48_en是選擇信號(hào),用于操作多路復(fù)用器414,以判斷是選擇402上的信號(hào)還是選擇404上的信號(hào)。線路402上的信號(hào)用于48位尋址方案,行404上的信號(hào)用于28位尋址方案。線路416上的多路復(fù)用器的輸出是snoop_ATA_task_file6,該信號(hào)發(fā)送到“設(shè)備頭”寄存器。op_code translator 410從上文結(jié)合圖3所描述的task_file7中接收usb_rcv_data(31:24),并將該信號(hào)轉(zhuǎn)換為線路412上的snoop_ATA_op_code,這是來(lái)自CBW的讀取或?qū)懭氪a。
參數(shù)邏輯還包括三個(gè)數(shù)據(jù)觸發(fā)器424、434和444,每一個(gè)觸發(fā)器都將其時(shí)鐘輸入通過(guò)線路430連接到線路442上的時(shí)鐘信號(hào)。觸發(fā)器424在輸入線路418上接收信號(hào)usb_rcv_data(31:0),這是要發(fā)送的數(shù)據(jù)的傳輸長(zhǎng)度。在方框308中線路420上的信號(hào)snoop_xfer_byte_cnt_en被設(shè)置為等于1,以啟用要使用的傳輸長(zhǎng)度以生成線路426上的信號(hào)snoop_xfer_byte_cnt。觸發(fā)器434接收信號(hào)432,這是usb_rcv_data(31:0)=0,告訴系統(tǒng)傳輸長(zhǎng)度等于0,因此,這是非數(shù)據(jù)命令。這就為線路436上的信號(hào)snoop_non_data_command生成數(shù)字1。觸發(fā)器444接收線路438上的信號(hào)usb_rcv_data(7:0),并啟用線路440上的snoop_cbw_flag_en信號(hào)。這允許位標(biāo)志(第7位)被提取,而其他位是預(yù)留的,以在線路448上生成信號(hào)snoop_cbw_flag(7:0)。圖5將多路復(fù)用電路一般顯示為500,該電路被用來(lái)加載執(zhí)行事務(wù)所需的十六個(gè)寄存器。多路復(fù)用器級(jí)a到p中的每一級(jí)都包括2位多路復(fù)用器502,該多路復(fù)用器具有連接到觸發(fā)器506的D輸入的輸出。啟用輸入ENZ(它們是低態(tài)有效)中的每一個(gè)都通過(guò)反相器504饋送。“e”級(jí)沒有多路復(fù)用器502,信號(hào)被直接饋送到觸發(fā)器506e的D輸入。所有多路復(fù)用器的選擇信號(hào)連接在一起,并連接到信號(hào)atapi_dev,這是ATAPI選擇信號(hào),1表示ATAPI,而0表示ATA驅(qū)動(dòng)器。所有觸發(fā)器506的時(shí)鐘輸入都一起連接到系統(tǒng)時(shí)鐘(clk)。許多多路復(fù)用器輸入都彼此連接。a、i和m級(jí)的“1”輸入和k、l、m、n、o和p級(jí)的“0”輸入連接在一起;b、f和n級(jí)的“1”輸入和d級(jí)的“0”輸入也連接在一起;到c、g、k和o的“1”輸入和j級(jí)的“0”輸入連接在一起;到d、h、l和p級(jí)的“1”輸入和到f和i級(jí)的“0”輸入連接在一起。到多路復(fù)用器502a的“0”輸入連接到“00h”。到502b的“1”輸入連接到usb_rcv_data(7:0)。到502c的“1”輸入連接到usb_rcv_data(15:8)。到502d的“1”輸入連接到usb_rcv_data(23:16)。e級(jí)具有直接連接到觸發(fā)器506e的D輸入的信號(hào)usb_rcv_data(31:24)。到502g的“0”輸入連接到snoop_ata_task_file6。到502h的“0”輸入連接到snoop_ata_op_code。到502k的“0”輸入連接到“00h”。所有其他輸入都連接到已經(jīng)描述的其中一個(gè)輸入。啟用輸入被標(biāo)記為″snoop_task_filex_en″,其中,x是0-15,以給16個(gè)寄存器task_files 0-15加載所需數(shù)據(jù)。上文結(jié)合圖3描述了啟用信號(hào)的生成和將被提取的數(shù)據(jù)。
圖6和7顯示了用于向ATA或ATAPI設(shè)備發(fā)送ATA或ATAPI命令的ATA/ATAPI命令狀態(tài)機(jī)。圖6將狀態(tài)機(jī)的第一部分一般顯示為600,圖7將狀態(tài)機(jī)的第二部分一般顯示為700。這些圖通過(guò)連接點(diǎn)A和B彼此連接在一起。ATA/ATAPI命令狀態(tài)機(jī)利用task_file0到task_file15中的信息作為命令參數(shù)。如果dev_sel等于0,命令將選擇設(shè)備0,如果dev_sel等于1,命令將選擇設(shè)備1。如果信號(hào)lba48_en等于1,則使用48位LBA地址來(lái)對(duì)ATA硬盤驅(qū)動(dòng)器進(jìn)行編址。然而,48位地址的十六位用0填充,因?yàn)镃BW命令只包含32位地址。如果信號(hào)lba48_en等于0,則使用28位LBA地址來(lái)對(duì)ATA硬盤驅(qū)動(dòng)器進(jìn)行編址。如果dma_mode信號(hào)等于1,則使用DMA數(shù)據(jù)傳輸作為傳輸階段。判斷是使用Multiword DMA還是使用Ultra DMA是在設(shè)備配置過(guò)程中確定的。
在圖3所示的狀態(tài)機(jī)檢測(cè)到有效CBW數(shù)據(jù)包之后,它將生成信號(hào)cbw_valid以中斷微控制器。在微控制器接收到cbw_valid中斷之后,它將啟動(dòng)ATA/ATAPI命令狀態(tài)機(jī)以向ATA或ATAPI設(shè)備發(fā)送命令。如果狀態(tài)機(jī)檢測(cè)到無(wú)效CBW數(shù)據(jù)包,則不生成cbw_valid中斷。在此情況下,當(dāng)CBW數(shù)據(jù)包不由針對(duì)ATA設(shè)備的圖3所示的狀態(tài)機(jī)解碼時(shí),在啟動(dòng)ATA/ATAPI狀態(tài)機(jī)之前,微控制器將修改task_file0到task_file15信息。
在圖6中一般顯示為600的狀態(tài)機(jī)在IDE_IDLE狀態(tài)601啟動(dòng),該狀態(tài)是等待微處理器啟動(dòng)ATA/ATAPI狀態(tài)機(jī)的空閑狀態(tài)。然后,控制進(jìn)入標(biāo)記為WR_TASK_REG的方框602,判斷設(shè)備是否為ATAPI設(shè)備。如果是,則控制進(jìn)入點(diǎn)A,和圖7,如下面所討論的。如果是ATA設(shè)備,控制進(jìn)入標(biāo)記為WR_TASK_REG的方框604,在該方框中,task_file6值被寫入到設(shè)備/頭寄存器。如果信號(hào)lba48_en等于1,則task_file6信息包含(″010″& dev_sel &″0000″)。“010”中的“1”表示LBA地址模式。如果lba48_en等于0,則task_file6包含(″010″& dev_sel & LBA(27:24))。值LBA(27:24)存儲(chǔ)在task_file6寄存器中,usb_rcv_data(11:8)的值來(lái)自CBW數(shù)據(jù)包的第五個(gè)quadlet??刂七M(jìn)入方框606,該方框讀取狀態(tài)寄存器,并將控制傳遞到方框608。方框608判斷狀態(tài)寄存器是否處于忙狀態(tài)。如果處于忙狀態(tài),則控制回到方框606,直到狀態(tài)寄存器不忙。一旦狀態(tài)寄存器不忙,控制就進(jìn)入方框610。在方框610中,task_file1值被寫入到功能寄存器。功能寄存器是預(yù)留的,不用于ATA設(shè)備命令。然后控制進(jìn)入方框612。在方框612中,檢查lba48_en的值,以查看它是否等于1。如果等于1,則控制進(jìn)入方框614,在該方框中,task_file8值被寫入到扇區(qū)統(tǒng)計(jì)寄存器。task_file8包含48位LBA地址的sector count(15:8)。控制進(jìn)入方框616。如果在方框612中對(duì)lba4_en的值是否等于1的測(cè)試失敗,則控制直接進(jìn)入方框616。在方框616中,task_file2中的值被寫入到扇區(qū)統(tǒng)計(jì)寄存器。task_file2包含sector count(7:0)。48位LBA為扇區(qū)統(tǒng)計(jì)使用16位,28 LBA尋址為扇區(qū)統(tǒng)計(jì)使用8位。
然后控制進(jìn)入方框618。在方框618中,對(duì)信號(hào)lba48_en再次進(jìn)行測(cè)試,以查看它是否等于1。如果是,則控制進(jìn)入方框620。在方框620中,值task_file9被寫入到扇區(qū)編號(hào)寄存器。task_file9包含LBA(31:24)。然后控制進(jìn)入方框622。如果在方框618中測(cè)試失敗,則控制直接進(jìn)入方框622。在方框622中,task_file3的值被寫入到扇區(qū)編號(hào)寄存器。task_file3包含LBA(7:0)。然后控制進(jìn)入方框624。如果值lba48_en等于1,則控制進(jìn)入方框626。在方框626中,值task_file10被寫入到cylinder low寄存器。Task_file10包含LBA(39:32)。由于CBW數(shù)據(jù)包只提供32位LBA地址,因此,task_file10的值將為0??刂七M(jìn)入方框628。如果在方框624中測(cè)試失敗,則控制直接進(jìn)入方框628。在方框628中,task_file4的值被寫入到cylinder low寄存器。task_file4包含LBA(15:8)??刂七M(jìn)入方框630。如果lba48_en等于1,則控制進(jìn)入方框632。在方框632中,值task_file11被寫入到cylinder high寄存器。Task_file11包含LBA(47:40)。由于CBW數(shù)據(jù)包只提供32位LBA地址,因此,task_file11的值將為0。控制進(jìn)入方框634。如果方框630的測(cè)試失敗,則控制直接進(jìn)入方框634。
在方框634中,task_file5的值被寫入到cylinder high寄存器。task_file5包含LBA(23:16)。然后控制進(jìn)入方框636。在方框636中,task_file7的值被寫入到命令寄存器。Task_file7包含ATA設(shè)備的命令碼。然后控制進(jìn)入方框638。在方框638中,過(guò)程這樣來(lái)完成將ATA命令寫入到ATA設(shè)備,然后返回到空閑狀態(tài),以等待下一個(gè)命令階段。
現(xiàn)在請(qǐng)看圖7,命令狀態(tài)機(jī)的第二部分一般顯示為700。命令狀態(tài)機(jī)從終端A開始,這是圖6所示的狀態(tài)機(jī)轉(zhuǎn)移到判斷設(shè)備是否為ATAPI設(shè)備。如果設(shè)備是ATAPI設(shè)備,則狀態(tài)機(jī)跳轉(zhuǎn)到狀態(tài)機(jī)的圖7顯示的部分??刂七M(jìn)入方框701,在該方框中,(″010″& dev_sel& ″0000″)被寫入到設(shè)備/頭寄存器以選擇連接的ATAPI設(shè)備的設(shè)備0或設(shè)備1??刂七M(jìn)入方框702。在方框702中,讀取狀態(tài)寄存器??刂七M(jìn)入方框704,在該方框中,就狀態(tài)寄存器是否處于忙狀態(tài)進(jìn)行判斷。如果處于忙狀態(tài),則控制回到方框702,直到狀態(tài)寄存器不忙。一旦狀態(tài)寄存器不忙,控制就進(jìn)入方框706。在方框706中,值(″0000000″& dma_mode)被寫入到功能寄存器。如果dma_mode是1,則數(shù)據(jù)傳輸通過(guò)Multiword DMA(直接存儲(chǔ)器訪問(wèn))或UltraDMA模式。如果dma_mode是0,則數(shù)據(jù)傳輸通過(guò)PIO(編程輸入/輸出)模式??刂七M(jìn)入方框708。在方框708中,00h被寫入到扇區(qū)統(tǒng)計(jì)寄存器??刂七M(jìn)入方框710。在方框710中,00h被寫入到扇區(qū)編號(hào)寄存器??刂七M(jìn)入方框712。在方框712中,F(xiàn)Eh被寫入到字節(jié)統(tǒng)計(jì)低(cylinder low)寄存器中??刂七M(jìn)入方框714。在方框714中,F(xiàn)Fh被寫入到字節(jié)統(tǒng)計(jì)高(cylinder high)寄存器中。字節(jié)統(tǒng)計(jì)限制的最大值為FFFEh??刂七M(jìn)入方框716。在方框716中,數(shù)據(jù)包命令碼A0h被寫入到命令寄存器中。控制進(jìn)入方框718。在方框718中,讀取另一個(gè)狀態(tài)寄存器以確保在讀取狀態(tài)寄存器被讀取之前設(shè)備不忙??刂七M(jìn)入方框720。在方框720中,如果另一個(gè)狀態(tài)寄存器處于忙狀態(tài),控制返回到方框718,直到另一個(gè)狀態(tài)寄存器不忙。一旦另一個(gè)狀態(tài)不忙,控制就進(jìn)入方框722。在方框722中,讀取狀態(tài)寄存器。控制進(jìn)入方框724。在方框724中,如果錯(cuò)誤位被設(shè)置為1,控制進(jìn)入方框746,在該方框中,設(shè)置ATAPI序列錯(cuò)誤中斷,控制進(jìn)入終端B,返回到圖6,并將狀態(tài)機(jī)返回到IDE_IDLE狀態(tài)601。否則,控制進(jìn)入方框726。在方框726中,讀取中斷原因(扇區(qū)統(tǒng)計(jì))寄存器。如果中斷原因寄存器值沒有指出命令寫入方向,則控制進(jìn)入方框746,在該方框中,設(shè)置ATAPI序列錯(cuò)誤,狀態(tài)機(jī)返回到空閑狀態(tài)。如果中斷原因寄存器值指出命令寫入方向,則控制進(jìn)入方框730。在方框730中,包含task_file1的命令數(shù)據(jù)包,然后包含task_file0的命令數(shù)據(jù)包被寫入到數(shù)據(jù)寄存器。然后控制進(jìn)入方框732。
在方框732中,task_file3和task_file2被寫入到數(shù)據(jù)寄存器??刂七M(jìn)入方框734。在方框734中,task_file5和task_file4被寫入到數(shù)據(jù)寄存器。控制進(jìn)入方框736。在方框736中,task_file7和task_file6被寫入到數(shù)據(jù)寄存器??刂七M(jìn)入方框738。在方框738中,task_file9和task_file8被寫入到數(shù)據(jù)寄存器。控制進(jìn)入方框740。在方框740中,task_file11和task_file10被寫入到數(shù)據(jù)寄存器。控制進(jìn)入方框742。在方框742中,task_file13和task_file12被寫入到數(shù)據(jù)寄存器。控制進(jìn)入方框744。在方框744中,task_file15和task_file14被寫入到數(shù)據(jù)寄存器。在此完成之后,控制進(jìn)入終端B,回到圖6,回到空閑狀態(tài)IDE_IDLE。
在本發(fā)明中,如上所述,數(shù)據(jù)是在傳輸?shù)捷斎刖彌_區(qū)中由硬件狀態(tài)機(jī)處理的,輸入緩沖區(qū)允許設(shè)置數(shù)據(jù)傳輸,以在少于10微秒的時(shí)間內(nèi)發(fā)生。在目標(biāo)驅(qū)動(dòng)器是非標(biāo)準(zhǔn)設(shè)備的情況下,微控制器可以對(duì)存儲(chǔ)在驅(qū)動(dòng)器寄存器中的值作出必需的更改,以允許數(shù)據(jù)傳輸即使在設(shè)備是非標(biāo)準(zhǔn)設(shè)備的情況下也可以進(jìn)行。雖然這會(huì)花費(fèi)更多的時(shí)間,但是,通常所需要的更改涉及一個(gè)或兩個(gè)寄存器,以便由硬件狀態(tài)機(jī)獲得的大部分節(jié)省的時(shí)間可以保留。對(duì)單個(gè)寄存器進(jìn)行更改所需的時(shí)間可能將處理時(shí)間延長(zhǎng)到70-80微秒。雖然這比只由硬件狀態(tài)機(jī)處理所獲得的結(jié)果慢,但是任何一種解決方案都比現(xiàn)有技術(shù)的控制器的500-700微秒有巨大的改進(jìn)。如此,本發(fā)明保留了硬件狀態(tài)機(jī)的速度快的優(yōu)點(diǎn),同時(shí)也保留了軟件狀態(tài)機(jī)的處理優(yōu)點(diǎn),并且比迄今為止任何一種解決方案都快得多。
盡管是參考優(yōu)選實(shí)施例顯示和描述本發(fā)明的,但是那些精通本技術(shù)的人員將理解,在不偏離如所附的權(quán)利要求所定義的本發(fā)明的精神和范圍的情況下,可以進(jìn)行各種修改。例如,雖然是針對(duì)USB總線說(shuō)明本發(fā)明的,但是,它也可以和基于其他串行總線鏈接的系統(tǒng)(如IEEE 1394系統(tǒng))一起使用。
權(quán)利要求
1.一種用于在數(shù)據(jù)存儲(chǔ)設(shè)備和數(shù)據(jù)利用設(shè)備之間傳輸數(shù)據(jù)的橋控制器,該橋控制器接收用于控制數(shù)據(jù)傳輸?shù)拿钚畔?shù)據(jù)包,包括狀態(tài)機(jī),在向橋控制器傳輸數(shù)據(jù)包的過(guò)程中,該狀態(tài)機(jī)在后臺(tái)模式下實(shí)時(shí)地接收命令信息,狀態(tài)機(jī)利用命令信息來(lái)設(shè)置用于進(jìn)行數(shù)據(jù)傳輸?shù)慕邮赵O(shè)備;以及可編程處理器,在接收到數(shù)據(jù)包之后,該可編程處理器連接到命令信息數(shù)據(jù)包,處理器在必要時(shí)對(duì)用于進(jìn)行傳輸?shù)慕邮赵O(shè)備的設(shè)置進(jìn)行更改,然后啟動(dòng)數(shù)據(jù)傳輸。
2.根據(jù)權(quán)利要求1所述的橋控制器,其中,命令信息數(shù)據(jù)包是從數(shù)據(jù)使用設(shè)備串行地接收的。
3.根據(jù)權(quán)利要求1所述的橋控制器,其中,命令信息數(shù)據(jù)包存儲(chǔ)在橋控制器中的緩沖存儲(chǔ)器中。
4.根據(jù)權(quán)利要求3所述的橋控制器,其中,隨著命令信息數(shù)據(jù)包被存儲(chǔ)在緩沖存儲(chǔ)器中,命令信息數(shù)據(jù)包的信息由狀態(tài)機(jī)實(shí)時(shí)地進(jìn)行處理。
5.根據(jù)權(quán)利要求4所述的橋控制器,其中,緩沖存儲(chǔ)器是先進(jìn)先出(FIFO)緩沖存儲(chǔ)器。
6.根據(jù)權(quán)利要求4所述的橋控制器,其中,一旦緩沖存儲(chǔ)器已滿,處理器就中斷。
7.根據(jù)權(quán)利要求1所述的橋控制器,其中,數(shù)據(jù)使用設(shè)備是計(jì)算機(jī),而數(shù)據(jù)存儲(chǔ)設(shè)備是ATA或ATAPI設(shè)備。
8.根據(jù)權(quán)利要求7所述的橋控制器,其中,橋和計(jì)算機(jī)之間的鏈接是通用串行總線(USB)鏈接。
9.根據(jù)權(quán)利要求7所述的橋控制器,其中,數(shù)據(jù)存儲(chǔ)設(shè)備是從包括ATA硬盤驅(qū)動(dòng)器、ATAPI CD驅(qū)動(dòng)器或ATAPI DVD驅(qū)動(dòng)器、小型閃卡或MO驅(qū)動(dòng)器的組中選擇的設(shè)備。
10.根據(jù)權(quán)利要求1所述的橋控制器,其中,狀態(tài)機(jī)是以ASIC制成的。
11.USB到ATA/ATAPI橋,包括物理層,它從USB總線接收串行命令數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)換為并行格式;傳輸控制器,它接收并行數(shù)據(jù),并將數(shù)據(jù)傳輸?shù)骄彌_存儲(chǔ)器;狀態(tài)機(jī),它在后臺(tái)模式下實(shí)時(shí)地對(duì)流過(guò)傳輸控制器的并行數(shù)據(jù)進(jìn)行操作,以對(duì)ATA或ATAPI設(shè)備進(jìn)行設(shè)置,從而進(jìn)行數(shù)據(jù)傳輸;以及可編程處理器,連接到緩沖存儲(chǔ)器,并在所有命令信息都接收到之后被中斷,以對(duì)所需要的ATA或ATAPI設(shè)備的任何設(shè)置數(shù)據(jù)分別進(jìn)行更改,然后啟動(dòng)數(shù)據(jù)傳輸。
12.根據(jù)權(quán)利要求11所述的橋,其中,串行數(shù)據(jù)位于USB 2.0總線上。
13.根據(jù)權(quán)利要求12所述的橋,其中,串行數(shù)據(jù)來(lái)自于計(jì)算機(jī)中的USB主機(jī)。
14.根據(jù)權(quán)利要求11所述的橋,其中,命令數(shù)據(jù)是命令塊包裝(CBW)的形式。
15.根據(jù)權(quán)利要求11所述的橋,其中,ATA設(shè)備是ATA硬盤驅(qū)動(dòng)器,而ATAPI設(shè)備是ATAPICD驅(qū)動(dòng)器或ATAPIDVD驅(qū)動(dòng)器。
16.根據(jù)權(quán)利要求11所述的橋,進(jìn)一步包括接收命令數(shù)據(jù)的橋中的多個(gè)任務(wù)寄存器,所述寄存器包含ATA或ATAPI設(shè)備設(shè)置數(shù)據(jù)傳輸所需要的數(shù)據(jù)。
17.根據(jù)權(quán)利要求16所述的橋,其中,處理器將多個(gè)寄存器中的數(shù)據(jù)傳輸?shù)紸TA或ATAPI設(shè)備以準(zhǔn)備進(jìn)行數(shù)據(jù)傳輸。
18.根據(jù)權(quán)利要求11所述的橋,其中,狀態(tài)機(jī)是以ASIC制成的。
19.一種操作USB到ATA或ATAPI橋的方法,包括將命令數(shù)據(jù)從數(shù)據(jù)利用設(shè)備借助USB總線通過(guò)數(shù)據(jù)傳輸設(shè)備傳輸?shù)骄彌_存儲(chǔ)器;使用流過(guò)數(shù)據(jù)傳輸設(shè)備的數(shù)據(jù),在后臺(tái)模式下實(shí)時(shí)地對(duì)狀態(tài)機(jī)進(jìn)行操作,以提取設(shè)置數(shù)據(jù),并存儲(chǔ)所述數(shù)據(jù)以設(shè)置數(shù)據(jù)傳輸;利用緩沖存儲(chǔ)器中存儲(chǔ)的數(shù)據(jù)操作可編程處理器,分別改變所需要的ATA或ATAPI設(shè)備的與命令相關(guān)的數(shù)據(jù);以及啟動(dòng)數(shù)據(jù)傳輸。
20.根據(jù)權(quán)利要求19所述的方法,其中,命令數(shù)據(jù)是針對(duì)USB2.0大容量存儲(chǔ)類協(xié)議的命令塊包裝(CBW),在數(shù)據(jù)傳輸開始之前,設(shè)置數(shù)據(jù)被傳輸?shù)綐蛑械亩鄠€(gè)寄存器,然后傳輸?shù)紸TA或ATAPI設(shè)備。
全文摘要
一種橋控制器控制USB總線與諸如ATA硬盤驅(qū)動(dòng)器或ATAPI CD或DVD驅(qū)動(dòng)器之類的ATA/ATAPI驅(qū)動(dòng)器之間的數(shù)據(jù)流。橋控制器具有狀態(tài)機(jī),該狀態(tài)機(jī)在數(shù)據(jù)包正在傳輸?shù)綐蚩刂破鞯倪^(guò)程中在后臺(tái)模式下實(shí)時(shí)地接收CBW。狀態(tài)機(jī)使用CBW設(shè)置數(shù)據(jù)傳輸。橋控制器還具有可編程處理器,一旦在緩沖存儲(chǔ)器中接收到CBW,該可編程處理器就連接到CBW??删幊烫幚砥髟诒匾獣r(shí)對(duì)接收設(shè)備的設(shè)置進(jìn)行更改,并啟動(dòng)數(shù)據(jù)傳輸。
文檔編號(hào)G06F13/36GK1595381SQ20041005795
公開日2005年3月16日 申請(qǐng)日期2004年8月27日 優(yōu)先權(quán)日2003年8月29日
發(fā)明者布賴恩·T·鄧, 丁輝·R·倪, 約瑟夫·M·艾利克森 申請(qǐng)人:得州儀器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1