<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于CBI傳輸結構的USB硬盤(pán)接口應用設計

基于CBI傳輸結構的USB硬盤(pán)接口應用設計

作者: 時(shí)間:2007-06-27 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:主要介紹采用結構進(jìn)行大容量存儲設備設計時(shí)應該注意的問(wèn)題;詳細說(shuō)明對應結構在設計時(shí)應進(jìn)行哪些設置和如何設置;給出用臺灣創(chuàng )品公司的T33510設計鍵盤(pán)的實(shí)例。
關(guān)鍵詞: 大容量存儲設備

引言

USB是英文Universal Serial Bus的縮寫(xiě),中文含義是“通用串行總線(xiàn)”。它不是一種新的總線(xiàn)標準,而是應用在PC領(lǐng)域的新型接口技術(shù),具有使用方便、速度較快、連接靈活、獨立供電等特點(diǎn)。1998年后,隨著(zhù)微軟在Windows 98中內置了對USB接口的支持模塊,加上USB設備的日漸增多,USB逐步走進(jìn)了實(shí)用階段,USB協(xié)議已經(jīng)發(fā)展到2.0版本,最高速度可達480Mb/s。目前,廣泛使用的1.1版本也可達12Mb/s。

USB協(xié)議中,對USB設備按類(lèi)型進(jìn)行分類(lèi)。同類(lèi)型的設備擁有一些共同的行為特征和工作協(xié)議,這樣可以屏蔽不同硬件之間的差別,以便于主機(PC)對設備進(jìn)行方便、統一的管理。對USB大容量存儲設備(mass storage device)的設計,國際有關(guān)機構定義了兩種基本方式:CBI和BULK ONLY,并對各自開(kāi)發(fā)過(guò)程中應注意的問(wèn)題進(jìn)行了規定,開(kāi)發(fā)者必須遵循其中至少一種。

一、CBI結構要點(diǎn)

在CBI(Control/Bulk/Interrupt)結構中,要用到USB協(xié)議中說(shuō)到的控制(Control)、批量輸入/輸出(Bulk in/out)、中斷(Interrupt)四種端點(diǎn)(Endpoint)??刂贫它c(diǎn)用來(lái)在主機和設備間傳送USB標準命令和對硬盤(pán)的控制命令集;批量輸入/輸出端點(diǎn)用來(lái)數據;可選用的中斷端點(diǎn)用來(lái)通知命令的完成。

1.數據傳輸的說(shuō)明

主機和CBI存儲設備間的通訊通過(guò)命令/數據/狀態(tài)的傳輸來(lái)實(shí)現,就是說(shuō),協(xié)議從主機向設備傳送命令,在主機和設備間相互傳送數據,從設備向主機傳送命令執行狀態(tài),并允許主機對設備進(jìn)行重啟。USB大容量存儲設備應可接收2類(lèi)重啟命令和3類(lèi)命令塊(command block)。2類(lèi)重啟命令是:USB端口重啟和命令重啟;3類(lèi)命令塊是:非數據(nondata)、數據輸入(data-in)和數據輸出(data- out)。本文只對各類(lèi)命令中和CBI存儲設備設計相關(guān)的加以說(shuō)明,其余屬于普通USB總線(xiàn)傳輸的內容可參考USB協(xié)議。

(1)USB端口重啟

通常用在設備死機等情況。通過(guò)主機USB端口強制設備重啟,詳細情況可參見(jiàn)USB協(xié)議。

(2)命令重啟

在使用端口重啟之前,主機也可以通過(guò)發(fā)送重啟命令來(lái)使設備重啟。在接收到該命令后,設備將依次執行如下動(dòng)作:

a.嘗試從正在執行的命令或數據傳輸中退出;

b.清除等待執行的其它命令;

c.清除設備緩沖區的數據;

d.按照設備所使用的子類(lèi)相應協(xié)議執行重啟,例如執行自檢測、對設備進(jìn)行初始化并恢復到缺省狀態(tài)。

(3)非數據命令傳輸的總線(xiàn)管理和與之相關(guān)的設備初始化等功能,詳細情況可參見(jiàn)USB協(xié)議。

b.類(lèi)相關(guān)命令。采用CBI結構的存儲設備應該在控制端點(diǎn)上支持的USB類(lèi)相關(guān)命令為:Accept Device-Specific Command(ADSC)。由ADSC從主機向設備傳送命令塊。ADSC命令的起始包由表1所示8個(gè)字節組成。

表1 ADSC起始包結構

字 節命 名大 小說(shuō) 明
0bmRequestTypeByte21h指明為USB類(lèi)相關(guān)命令
1bRequestByte00h指明為ADSC命令
2(LSB)
wValue
(MSB)
Word00h保留
300h
4(LSB)
wIndex
(MSB)
Word??hbInterfaceNumber指明設備用哪個(gè)端口接收命令
500h保留
6(LSB)
wLength
(MSB)
Word????h指明每次傳送命令時(shí)的數據大小
7

需要注意的是,wLength的值由所設計的存儲設備所屬的子類(lèi)決定,這可以在接口描述字中的bInterfaceSubClass域設置。WLength 設置好之后,每次傳輸命令數據時(shí)就必須嚴格按照這個(gè)值進(jìn)行。如果不等,設備就將認為此次傳輸失敗并向主機發(fā)回相應提示,而且CBI結構的大容量存儲設備每次只能接收1個(gè)命令塊。在主機端,應該把將要傳輸的命令以隊列形式排好便于傳送。下面是個(gè)ADSC命令的舉例:

1 SOF(xA5)

2 SETUP(xB4) ADDR(x7F) ENDP(x0)

3 DATA0(xC3)DATA(x21 00 00:00 00:00 0C:00)

4 ACK(x4B)

5 SOF(xA5)

6 OUT(x87)ADDR(x7F)ENDP(x0)

7 DATA1(xD2) DATA(x 2A 00 00:01:23:45 00 00:)

8 NAK(x5A)

9 SOF(xA5)

10 OUT(x87) ADDR(x7F) ENDP(x0)

11 DATA1(xD2) DATA(x 2A 00 00:01:23:45 00 00:)

12 ACK(x4B)

13 SOF(xA5)

14 DATA0(xC3) DATA(x 00 00 00:00)

15 NAK(x5A)

16 SOF(xA5)

17 OUT(x87) ADDR(x7F) ENDP(x0)

18 DATA0(xC3) DATA(x 00 00 00:00)

19 ACK(x4B)

20 SOF(xA5)

21 IN(x96) ADDR(x7F) ENDP(x0)

22 NAK(x5A)

23 SOF(xA5)

24 IN(x96) ADDR(x7F) ENDP(x0)

25 DATA1(xD2) DATA ( )

26 ACK(x4B)

(4)數據輸入和數據輸出

主機和存儲設備之間交換數據時(shí)所用。當主機通過(guò)控制端點(diǎn)發(fā)出數據輸入或數據輸出命令并向設備批量輸入端點(diǎn)或發(fā)出IN PID或OUT PID后,設備開(kāi)始向主機輸出數據或從主機輸入數據直至達到主機要求的量為止。

2.CBI存儲設備相關(guān)描述字設置

按照USB協(xié)議,每一個(gè)USB設備都有一個(gè)或多個(gè)配置,每個(gè)配置對應相應設備的一項功能。配置是口的集合,通過(guò)接口指定設備如何進(jìn)行USB總線(xiàn)互聯(lián),而接口又是一系列端點(diǎn)的集合。從設備到端口都有相應的描述字進(jìn)行設備,對它們的一般信息進(jìn)行說(shuō)明。

CBI結構存儲設備應該支持下列USB描述字:

a.設備描述字(device descriptor)。

b.配置描述字(configuration descriptor)。

c.接口描述字(interface descriptor)。CBI存儲設備至少應支持一個(gè)數據接口。

d.端點(diǎn)描述字(endpoint descriptor)。除用作初始化和命令傳輸的控制端口Endpoint 0外、CBI存儲設備還應該支持批量輸入、批量輸出、中斷三種端點(diǎn)。

(1)設備描述字和配置描述字

有關(guān)這兩類(lèi)描述字的結構和含義在USB協(xié)議有關(guān)這兩類(lèi)描述字的結構和含義在USB協(xié)議有詳細介紹,本文不再作更多說(shuō)明,設計時(shí)根據實(shí)際情況加以設置即可。

(2)接口描述字

CBI存儲設備至少應支持1個(gè)數據接口。此數據口包括最多4個(gè)端點(diǎn),即前面提到的:控制、批量輸入/輸出、中斷。其中中斷端點(diǎn)可設置為用或不用。

接口描述字的結構和含義在USB協(xié)議中也有介紹。這里需要說(shuō)明的有3點(diǎn):第一是描述字中的bInterfaceClass域,必須設成08h,用來(lái)說(shuō)明該設備為大容量存儲系統。第二是bInterfaceSubClass域,用來(lái)指明設計時(shí)所使用的對設備進(jìn)行控制的標準命令集。如01h指明是Reduced Block Commands,06h指明是SCSI transparent command set,設計時(shí)可根據需要選用。這些在USB Mass Storage Class Specification Overview中有詳細說(shuō)明。第三是bInterfaceProtocol域,指明存儲設備的設計使用體積結構。00h和01h說(shuō)明使用CBI結構。不同的是前者說(shuō)明設備需使用中斷端口告知系統命令的完成與否。

(3)端點(diǎn)描述字

接口所用的每一個(gè)除控制端口之外的端口都有自己的描述字。這些端口描述字總是作為配置信息的一部分在回應GetDescriptor命令時(shí)由設備發(fā)給主機的。

CBI存儲設備所支持的批量輸入/輸出和中斷端點(diǎn)描述字結構相同。不同的是具體設置,如表2所列。

表2 端點(diǎn)描述字結構

字 節命 名大 小說(shuō) 明
0bLengthByte07h指明該描述字長(cháng)度
1bDescriptorTypeByte05h指明該描述字為端點(diǎn)描述字
2bEndpointAddressByte8?h或0?h指明該描述字在設備上的端號,必須在1-15之間
Bit0..3 指明端口號
Bit4..6 保留,須設為0
Bit 7 0說(shuō)明為輸出端口,1說(shuō)明為輸入端口
3bmAttributesByte??h指明是什么端點(diǎn)描述字(批量端點(diǎn)為02h,中斷端點(diǎn)為03h)
4wMaxPacketSizeWord00??h最大數據傳輸長(cháng)度
5
6bIntervalByte??h數據傳輸間隔(對批量端點(diǎn),設成00h)

表3 中斷端口狀態(tài)信息結構

字 節命 名大 小說(shuō) 明
0bTypeByte??h00h:指明為命令完成情況中斷
01h-FFh:保留
1bValueByte??h當bType為00hjf ,
Bit7..4:由設計者指定
Bit3..2:保留,需設成0
Bit1..0:命令完成狀態(tài)
00=通過(guò)
01=失敗
10=相位錯誤
11=永久失敗

中斷端點(diǎn)可由接口描述字的bInterfaceProtocol域的設置決定用否。如果設成00h,就需用中斷端點(diǎn)來(lái)提示命令的完成情況。當設備需要產(chǎn)生中斷時(shí),CBI設備應該在中斷端點(diǎn)返回2個(gè)字節的狀態(tài)信息,主機系統使用接口描述字的bInterfaceSubClass域的值來(lái)判別這2個(gè)字節的含義,并做出相應的處理,這2個(gè)字節定義如表3所列。

二、CBI結構的USB存儲設備開(kāi)發(fā)實(shí)例

這里介紹我們在開(kāi)發(fā)數字化家庭信息系統中的USB時(shí)一些簡(jiǎn)單過(guò)程和經(jīng)驗。

1.T33510控制器

開(kāi)發(fā)時(shí)采用的T33510是臺灣創(chuàng )品公司生產(chǎn)的以89C51為內核,集成有USB和IDE存儲設備接口的控制芯片。由于集成度較高,因此在成本和開(kāi)發(fā)難度上較低。它擁有很靈活的體系結構,能夠滿(mǎn)足設計需要,具體說(shuō)明如下:

*內嵌有和89C51兼容的8位單片機;

*32K8片內ROM;

*7688片內RAM;

*可用作DMA通道的兩個(gè)5288片內RAM;

*擁有和89C51相似的P0、P1、P2和P3口,支持存儲器的外部擴展;

*具有省電模式;

*擁有5個(gè)中斷源,其中復用有USB中斷源;

*支持全速(12Mb/s)和低速(1.5Mb/s)的USB數據傳輸速率;

*擁有Control endpoint、Bulk in/out endpoint、Interrupt endpoint等USB通訊端口。

*和Compact Flash Specificeation Rev.1.3兼容的IDE設備接口;

*內置有ECC(Error Correction Code)功能;

*使用3.3V工作電壓。

2.T33510中有關(guān)USB寄存器設置

為方便設備的開(kāi)發(fā),對一些常用的USB參數,T33510已經(jīng)設置好,開(kāi)發(fā)時(shí)只要對其它一些比較靈活的部分在相應寄存器中加以設置即可。這里結合本文前面討論的CBI部分加以說(shuō)明。

對控制端點(diǎn),T33510提供了1個(gè)8位控制寄存器USBICX和4個(gè)字節的控制端點(diǎn)數據寄存器USBICMD。對中斷端點(diǎn),T33510提供8位的控制寄存器USBICR和最少2個(gè)字節最多8個(gè)字節的數據寄存器(USBICRD1~USBICRD8)。對批量輸入/輸出端點(diǎn),也有控制寄存器 USBIBULK和64個(gè)字節的FIFO提供使用。

T33510的通用控制寄存器USBIGEN對接口描述字中bInterfaceProtocol等域進(jìn)行設置,其結構如表4所列。

表4 通用控制寄存器結構

---SYS_OKB_INTF_PI_INTF_SCB_INTF_CSUSP_n
---R/WR/WR/WR/WR
00000001
76543210

SYS_OK 用來(lái)通知主機所需各種描述字已準備好,可以進(jìn)行訪(fǎng)問(wèn)。B_INTF_P用來(lái)設置bInterfaceProtocol域,當為1時(shí),設該域為00h;當為 0時(shí),設該域為01h。我們在設計時(shí)設為1,指明使用中斷端口來(lái)說(shuō)明命令完成情況。I_INTF_SC用來(lái)設定iInterfaceSubClass域,當為1時(shí),設該域為FFh;當為0時(shí),設該域為01h。我們在設計時(shí)設為0,指明使用RBC命令集。B_INTF_C用來(lái)設定 bInterfaceClass域,當為1時(shí),設該域為FFh;當為0時(shí),設該域為08h,指明為容量存儲系統。我們在設計時(shí)將該位置0。SUSP_n為系統掛起標記。

T33510支持CBI結構所需的4種端點(diǎn),按控制端點(diǎn)、批量輸入、批量輸出、中斷端點(diǎn)的順序依次分配端點(diǎn)號為0、1、2、3。在中斷端點(diǎn)速率寄存器USBIINTR中,可對速度進(jìn)行設置。開(kāi)發(fā)時(shí)我們設為FFh。端點(diǎn)寄存器其它域已由T33510預先設置好。

3.系統結構和軟硬件設計

基于T33510的USB硬盤(pán)結構如圖1所示。系統可分為兩部分:主機端和單片機端。USB設計分硬件和軟件兩部分。硬件包括電路設計和固件程序的編寫(xiě),通常用匯編或C語(yǔ)言;軟件分USB設備驅動(dòng)程序和USB客戶(hù)軟件。固件的編寫(xiě)可采用分塊的方法,比如Main模塊、Interrupt模塊、Vector模塊、Timer模塊、Declare模塊等。通過(guò)編譯連接以.hex文件的格式寫(xiě)到芯片里面去。固件主要解決以下幾個(gè)問(wèn)題:一是描述符的確定與建立;二是中斷請求的功能實(shí)現;三是命令請求的解析;四是初始化的設置。設備驅動(dòng)程序和客戶(hù)軟件位于主機端。

T3351 所支持的RBC命令集包括INQUIRY、READ FORMAT CAPASCITIES、READ、WTITE等等,有關(guān)RBC命令可從相應協(xié)議中得到。系統通過(guò)READ命令讀取硬盤(pán)的啟動(dòng)扇區,并分析其文件系統結構,然后讀取其它扇區進(jìn)行文件的操作。T33510的IDE接口設計有對硬盤(pán)操作所需的各個(gè)寄存器,符合Compact Flash Specification Rev.1.3協(xié)議,給程序編制帶來(lái)了很大方便。由于所有的文件系統和數據的分析都交由PC端來(lái)執行,因此在IDE接口上,只需提供基本的 “Sectors Read”和“Sectors Write”等命令就可以了。主程序流程如圖2所示。

下面給出對硬盤(pán)一個(gè)扇區進(jìn)行讀寫(xiě)的C語(yǔ)言程序段。

讀扇區:void ReadOneSecoter (Dword LBA)

{IDE_WRITE_1F6(0xE0); Master LBA模式

IDE_WRITE_1F2(1); //扇區數

IDE_WRITE_1F3(LBA%0x100);//LBA_7_0位

IDE_WRITE_1F4((LBA/0x100)%0x100);//LBA_15_8位

IDE_WRITE_1F5((LBA/0x10000)%0x100);

// LBA_23_16位

IDE_WRITE_1F7(0x20); //命令:讀扇區

While(IdeRead1F7()!=0x58);

IdeReadData();

while(!cf_sfr_ready);

while(IdeRead1F7()!=0x50);}

//--------------------------------------------------------------------

寫(xiě)扇區:void WriteOneSecoter(Dword LBA)

{IDE_WRITE_1F6(0xE0); //Master LBA模式

IDE_WRITE_1F2(1); //扇區數

IDE_WRITE_1F3(LBA%0x100); //LBA_7_0位

IDE_WRITE_1F4((LBA/0x100)%0x100);

//LBA_15_8位

IDE_WRITE_1F5((LBA/0x10000)%0x100);

//LBA_23_16位

IDE_WRITE_1F7(0x30); //命令:寫(xiě)扇區

while (IdeRead1F7()!0x58);

IdeWriteData( );

while (!cf_sfr_ready); //等待結束

while (IdeRead1F7() !=0x50);}

結束語(yǔ)

CBI結構只是USB存儲設備設計時(shí)可供選擇的一種,此外還有BULK-ONLY結構。應該說(shuō),USB硬盤(pán)的開(kāi)發(fā)除結構的選擇,還涉及許多其它東西,比如RBC命令集的合作、ISE接口的協(xié)議、主機端驅動(dòng)程序等很多因素。本文在此不能一一詳述。

USB硬盤(pán)驅動(dòng)器為小型辦公、家庭辦公、個(gè)為及網(wǎng)絡(luò ),提供了一種快速方便地解決存儲問(wèn)題的途徑。

由于USB技術(shù)連接方式和速度上相對傳統的并口、串口等方式的優(yōu)勢,必將極大改變計算機外設的設計方式。新出臺的USB的速度可達480Mb/s,可以改善以前版本速度不是很快的缺憾,將進(jìn)一步擴展USB應用的范圍。



關(guān)鍵詞: CBI USB 傳輸 硬盤(pán)接口

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>