每個(gè)USB設備必須響應默認管道上的設置包。設置包用于設備的檢測和配置,并執行諸如設置USB設備的地址、請求設備描述符或檢查端點(diǎn)狀態(tài)等常見(jiàn)功能。兼容USB的主機要求所有請求在最長(cháng)5秒鐘內得到處理。它還為特定請求規定了更嚴格的時(shí)間安排:
沒(méi)有數據階段的標準設備請求必須在50ms內完成。
帶有數據階段的標準設備請求必須在請求500毫秒后開(kāi)始返回數據。
每個(gè)數據包必須在前一個(gè)數據包成功傳輸后500毫秒內發(fā)送。
狀態(tài)階段必須在最后一個(gè)數據包傳輸后50ms內完成。
SetAddress命令(包含數據階段)必須處理該命令并在50ms內返回狀態(tài)。在發(fā)送下一個(gè)請求之前,設備有2ms的時(shí)間更改地址。
即使是最慢的設備也可以接受這些超時(shí)時(shí)間,但在調試期間可能會(huì )受到限制。50mS不允許在異步串行端口上以9600bps的速度發(fā)送許多調試字符,也不允許在線(xiàn)調試器/仿真器單步執行或中斷執行以檢查內部寄存器。因此,USB接口的調試方法與其它單片機項目不同。
隨便讀一下XP-DDK,你可能會(huì )注意到主機控制器驅動(dòng)程序現在有一個(gè)USBUSER_OP_SEND_one_PACKET命令,注釋為“此API用于實(shí)現‘單步’USB事務(wù)開(kāi)發(fā)工具”。雖然這樣的工具還沒(méi)有發(fā)布,但我們只能希望很快看到一個(gè)。
每個(gè)請求以一個(gè)8字節長(cháng)的設置包開(kāi)始,其格式如下:,抵消場(chǎng)大小價(jià)值說(shuō)明zeroBM請求類(lèi)型one位圖D7數據相轉移方向
0 = Host to Device1 = Device to HostD6..5型
0 = Standard1 = Class2 = Vendor3 = ReservedD4..0收件人
0 = Device1 = Interface2 = Endpoint3 = Other4..31 = Reservedone布雷奎斯特one價(jià)值請求twoWValuetwo價(jià)值價(jià)值four溫得克斯two索引或偏移量索引sixW長(cháng)度two計數如果存在數據階段,要傳輸的字節數這個(gè) BM請求類(lèi)型字段將確定請求的方向、請求的類(lèi)型和指定的收件人 布雷奎斯特字段確定正在發(fā)出的請求。bmRequestType通常被解析,執行被分支到許多處理程序,例如標準設備請求處理程序、標準接口請求處理程序、標準端點(diǎn)請求處理程序、類(lèi)設備請求處理程序等。如何解析安裝程序包完全取決于您的喜好。其他人可以選擇先解析bRequest,然后根據每個(gè)請求確定類(lèi)型和接收者。所有USB設備的標準請求都是通用的,下一頁(yè)將詳細介紹。類(lèi)請求對于驅動(dòng)程序類(lèi)是通用的。例如,所有符合HID類(lèi)的設備都將有一組通用的類(lèi)特定請求。這些將不同于符合通信類(lèi)的設備,也不同于轉換為大容量存儲類(lèi)的設備。最后是供應商定義的請求。這些是你作為USB設備設計者可以分配的請求。這些通常因設備而異,但這完全取決于您的實(shí)現和想象。一個(gè)共同的請求可以被定向到不同的接收者,并根據接收者執行不同的功能。例如,GetStatus標準請求可以定向到設備、接口或端點(diǎn)。當定向到某個(gè)設備時(shí),它將返回指示遠程喚醒狀態(tài)以及設備是否自供電的標志。但是,如果同一個(gè)請求被定向到接口,它總是返回零,或者如果它被定向到一個(gè)端點(diǎn),它將返回該端點(diǎn)的halt標志。這個(gè)WValue和 溫得克斯字段允許參數隨請求一起傳遞。 W長(cháng)度如果存在數據階段,則指定要傳輸的字節數。
USB規范第9.4節詳細說(shuō)明了每個(gè)USB設備需要實(shí)現的“標準設備”請求。該標準提供了按請求對項目分組的單個(gè)表??紤]到大多數固件將按接收者解析設置包,我們將選擇按接收者分解請求,以便于檢查和實(shí)現。
目前有8個(gè)標準設備請求,下表詳細說(shuō)明了這些請求。BM請求類(lèi)型布雷奎斯特WValue溫得克斯W長(cháng)度數據1000萬(wàn)B獲取狀態(tài)(0x00)零零二設備狀態(tài)0000萬(wàn)B清除功能(0x01)功能選擇器零零沒(méi)有0000萬(wàn)B設置功能(0x03)功能選擇器零零沒(méi)有0000萬(wàn)B設置地址(0x05)設備地址零零沒(méi)有1000萬(wàn)B獲取描述符(0x06)描述符類(lèi)型和索引零或語(yǔ)言ID描述符長(cháng)度描述符0000萬(wàn)B集合描述符(0x07)描述符類(lèi)型和索引零或語(yǔ)言ID描述符長(cháng)度描述符1000萬(wàn)B獲取配置(0x08)零零one配置值0000萬(wàn)B設置配置(0x09)配置值零零沒(méi)有
這個(gè)獲取狀態(tài)針對設備的請求將在數據階段返回兩個(gè)字節,格式如下:,15號公路第14天第13天第12天第11天第10天第9天D8型D7型D6型D5型D4號D3D2號D1D0號保留遠程喚醒自供電如果設置了D0,則表示設備為自供電。如果清除,則設備為總線(xiàn)供電。如果設置了D1,則設備已啟用遠程喚醒,并且可以在掛起期間喚醒主機。遠程喚醒位可以通過(guò)SetFeature和ClearFeature請求,并使用DEVICE_remote_wakeup(0x01)的功能選擇器進(jìn)行
清除特征和設置功能請求可用于設置布爾特征。當指定的接收者是設備時(shí),只有兩個(gè)可用的功能選擇器是device_REMOTE_WAKEUP和TEST_MODE。測試模式允許設備顯示各種條件。這些在USB規范修訂版2.0中有進(jìn)一步的記錄。
設置地址在枚舉期間用于為USB設備分配唯一地址。地址是用wValue指定的,最大只能是127。此請求的唯一性在于設備在完成狀態(tài)階段之后才設置其地址。(參見(jiàn)控制權轉讓)所有其他請求必須在狀態(tài)階段之前完成。
設置描述符/獲取描述符用于返回wValue中的指定描述符。對配置描述符的請求將在一個(gè)請求中返回設備描述符以及所有接口和端點(diǎn)描述符。終結點(diǎn)描述符無(wú)法由GetDescriptor/SetDescriptor請求直接訪(fǎng)問(wèn)。接口描述符無(wú)法由GetDescriptor/SetDescriptor請求直接訪(fǎng)問(wèn)。字符串描述符在wIndex中包含一個(gè)語(yǔ)言ID,以支持多種語(yǔ)言。
獲取配置/設置配置用于請求或設置當前設備配置。在Get配置請求的情況下,將在數據階段返回一個(gè)字節,指示設備狀態(tài)。零值表示設備未配置,非零值表示設備已配置。設置配置用于啟用設備。它應該包含所需的bConfigurationValue的值配置描述符在wValue的低字節中選擇要啟用的配置。
該規范目前定義了五個(gè)標準接口請求,詳細信息見(jiàn)下表。有趣的是,只有兩個(gè)請求可以做任何可以理解的事情。
BM請求類(lèi)型 | 布雷奎斯特 | WValue | 溫得克斯 | W長(cháng)度 | 數據 |
1000 0001b | 獲取狀態(tài)(0x00) | 零 | 接口 | 二 | 接口狀態(tài) |
0000 0001b號 | 清除功能(0x01) | 功能選擇器 | 接口 | 零 | 沒(méi)有 |
0000 0001b號 | 設置功能(0x03) | 功能選擇器 | 接口 | 零 | 沒(méi)有 |
1000 0001b | 獲取接口(0x0A) | 零 | 接口 | 一 | 備用接口 |
0000 0001b號 | SET U接口(0x11) | 替代設置 | 接口 | 零 | 沒(méi)有 |
溫得克斯通常用于為指向接口的請求指定引用接口。其格式如下所示。15號公路第14天第13天第12天第11天第10天第9天D8型D7型D6型D5型D4號D3D2號D1D0號保留接口編號
獲取狀態(tài)用于返回接口的狀態(tài)。對接口的這種請求應該返回兩個(gè)字節0x00、0x00。兩個(gè)字節都保留供將來(lái)使用
清除特征和設置功能請求可用于設置布爾特征。當指定的接收者是接口時(shí),當前的USB規范修訂版2沒(méi)有指定接口特性。
獲取接口和設置接口設置替代接口設置,在接口描述符 .
標準端點(diǎn)請求有以下四種類(lèi)型。BM請求類(lèi)型布雷奎斯特WValue溫得克斯W長(cháng)度數據1000 0010b獲取狀態(tài)(0x00)零終結點(diǎn)二終結點(diǎn)狀態(tài)0000 0010b清除功能(0x01)功能選擇器終結點(diǎn)零沒(méi)有0000 0010b設置功能(0x03)功能選擇器終結點(diǎn)零沒(méi)有1000 0010b同步幀(0x12)零終結點(diǎn)二框架
這個(gè) 溫得克斯字段通常用于指定指向端點(diǎn)的請求的引用端點(diǎn)和方向。其格式如下所示。15號公路第14天第13天第12天第11天第10天第9天D8型D7型D6型D5型D4號D3D2號D1D0號保留去吧保留終結點(diǎn)編號
獲取狀態(tài)返回兩個(gè)字節,指示終結點(diǎn)的狀態(tài)(暫停/暫停)。返回的兩個(gè)字節的格式如下所示。15號公路第14天第13天第12天第11天第10天第9天D8型D7型D6型D5型D4號D3D2號D1D0號保留停止
清除特征和設置功能用于設置端點(diǎn)特征。該標準目前定義了一個(gè)端點(diǎn)特性選擇器endpoint_HALT(0x00),它允許主機暫停和清除一個(gè)端點(diǎn)。建議只有默認端點(diǎn)以外的端點(diǎn)具有此功能。
A 同步幀請求用于報告端點(diǎn)同步幀。