當(dāng)前位置:首頁 > 智能硬件 > 智能硬件
[導(dǎo)讀]主要介紹采用CBI傳輸結(jié)構(gòu)進行USB大容量存儲設(shè)備設(shè)計時應(yīng)該注意的問題;詳細說明對應(yīng)CBI結(jié)構(gòu)在設(shè)計時應(yīng)進行哪些設(shè)置和如何設(shè)置;給出用臺灣創(chuàng)品公司的T33510設(shè)計USB鍵盤的實例。

摘要:主要介紹采用CBI傳輸結(jié)構(gòu)進行USB大容量存儲設(shè)備設(shè)計時應(yīng)該注意的問題;詳細說明對應(yīng)CBI結(jié)構(gòu)在設(shè)計時應(yīng)進行哪些設(shè)置和如何設(shè)置;給出用臺灣創(chuàng)品公司的T33510設(shè)計USB鍵盤的實例。
關(guān)鍵詞:USB CBI 大容量存儲設(shè)備

引言

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

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

一、CBI結(jié)構(gòu)要點

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

 

 

 

 

1.數(shù)據(jù)傳輸?shù)恼f明

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

(1)USB端口重啟

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

(2)命令重啟

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

a.嘗試從正在執(zhí)行的命令或數(shù)據(jù)傳輸中退出;

b.清除等待執(zhí)行的其它命令;

c.清除設(shè)備緩沖區(qū)的數(shù)據(jù);

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

(3)非數(shù)據(jù)命令傳輸?shù)目偩€管理和與之相關(guān)的設(shè)備初始化等功能,詳細情況可參見USB協(xié)議。

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

表1 ADSC起始包結(jié)構(gòu)

字  節(jié) 命  名 大  小 說     明
0 bmRequestType Byte 21h 指明為USB類相關(guān)命令
1 bRequest Byte 00h 指明為ADSC命令
2 (LSB)
   wValue
        (MSB)
Word 00h 保留
3 00h
4 (LSB)
    wIndex
        (MSB)
Word ??h bInterfaceNumber指明設(shè)備用哪個端口接收命令
5 00h 保留
6 (LSB)
    wLength
        (MSB)
Word ????h 指明每次傳送命令時的數(shù)據(jù)大小
7

    需要注意的是,wLength的值由所設(shè)計的存儲設(shè)備所屬的子類決定,這可以在接口描述字中的bInterfaceSubClass域設(shè)置。WLength 設(shè)置好之后,每次傳輸命令數(shù)據(jù)時就必須嚴格按照這個值進行。如果不等,設(shè)備就將認為此次傳輸失敗并向主機發(fā)回相應(yīng)提示,而且CBI結(jié)構(gòu)的大容量存儲設(shè)備每次只能接收1個命令塊。在主機端,應(yīng)該把將要傳輸?shù)拿钜躁犃行问脚藕帽阌趥魉汀O旅媸莻€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ù)據(jù)輸入和數(shù)據(jù)輸出

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

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

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

CBI結(jié)構(gòu)存儲設(shè)備應(yīng)該支持下列USB描述字:

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

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

c.接口描述字(interface descriptor)。CBI存儲設(shè)備至少應(yīng)支持一個數(shù)據(jù)接口。

d.端點描述字(endpoint descriptor)。除用作初始化和命令傳輸?shù)目刂贫丝贓ndpoint 0外、CBI存儲設(shè)備還應(yīng)該支持批量輸入、批量輸出、中斷三種端點。

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

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

(2)接口描述字

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

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

(3)端點描述字

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

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

表2 端點描述字結(jié)構(gòu)

字  節(jié) 命  名 大  小 說    明
0 bLength Byte 07h 指明該描述字長度
1 bDescriptorType Byte 05h 指明該描述字為端點描述字
2 bEndpointAddress Byte 8?h或0?h 指明該描述字在設(shè)備上的端號,必須在1-15之間
Bit0..3 指明端口號
Bit4..6 保留,須設(shè)為0
Bit 7  0說明為輸出端口,1說明為輸入端口
3 bmAttributes Byte ??h 指明是什么端點描述字(批量端點為02h,中斷端點為03h)
4 wMaxPacketSize Word 00??h 最大數(shù)據(jù)傳輸長度
5
6 bInterval Byte ??h 數(shù)據(jù)傳輸間隔(對批量端點,設(shè)成00h)

表3 中斷端口狀態(tài)信息結(jié)構(gòu)

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

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

二、CBI結(jié)構(gòu)的USB存儲設(shè)備開發(fā)實例

    這里介紹我們在開發(fā)數(shù)字化家庭信息系統(tǒng)中的USB硬盤接口時一些簡單過程和經(jīng)驗。

1.T33510控制器

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

*內(nèi)嵌有和89C51兼容的8位單片機;

*32K×8片內(nèi)ROM;

*768×8片內(nèi)RAM;

*可用作DMA通道的兩個528×8片內(nèi)RAM;

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

*具有省電模式;

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

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

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

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

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

*使用3.3V工作電壓。

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

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

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

    T33510的通用控制寄存器USBIGEN對接口描述字中bInterfaceProtocol等域進行設(shè)置,其結(jié)構(gòu)如表4所列。

表4 通用控制寄存器結(jié)構(gòu)

- - - SYS_OK B_INTF_P I_INTF_SC B_INTF_C SUSP_n
- - - R/W R/W R/W R/W R
0 0 0 0 0 0 0 1
7 6 5 4 3 2 1 0

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

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

3.系統(tǒng)結(jié)構(gòu)和軟硬件設(shè)計

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

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

下面給出對硬盤一個扇區(qū)進行讀寫的C語言程序段。

讀扇區(qū):void ReadOneSecoter (Dword LBA)

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

IDE_WRITE_1F2(1); //扇區(qū)數(shù)

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); //命令:讀扇區(qū)

While(IdeRead1F7()!=0x58);

IdeReadData();

while(!cf_sfr_ready);

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

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

寫扇區(qū):void WriteOneSecoter(Dword LBA)

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

IDE_WRITE_1F2(1); //扇區(qū)數(shù)

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); //命令:寫扇區(qū)

while (IdeRead1F7()!0x58);

IdeWriteData( );

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

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

結(jié)束語

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

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

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

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉