博客專欄

EEPW首頁 > 博客 > USB系列之第六章:USB請求

USB系列之第六章:USB請求

發(fā)布人:電子資料庫 時間:2022-09-03 來源:工程師 發(fā)布文章
安裝包
  • 每個USB設(shè)備必須響應(yīng)默認(rèn)管道上的設(shè)置包。設(shè)置包用于設(shè)備的檢測和配置,并執(zhí)行諸如設(shè)置USB設(shè)備的地址、請求設(shè)備描述符或檢查端點狀態(tài)等常見功能。兼容USB的主機要求所有請求在最長5秒鐘內(nèi)得到處理。它還為特定請求規(guī)定了更嚴(yán)格的時間安排:

    • 沒有數(shù)據(jù)階段的標(biāo)準(zhǔn)設(shè)備請求必須在50ms內(nèi)完成。

    • 帶有數(shù)據(jù)階段的標(biāo)準(zhǔn)設(shè)備請求必須在請求500毫秒后開始返回數(shù)據(jù)。

      • 每個數(shù)據(jù)包必須在前一個數(shù)據(jù)包成功傳輸后500毫秒內(nèi)發(fā)送。

      • 狀態(tài)階段必須在最后一個數(shù)據(jù)包傳輸后50ms內(nèi)完成。

    • SetAddress命令(包含數(shù)據(jù)階段)必須處理該命令并在50ms內(nèi)返回狀態(tài)。在發(fā)送下一個請求之前,設(shè)備有2ms的時間更改地址。

  • 即使是最慢的設(shè)備也可以接受這些超時時間,但在調(diào)試期間可能會受到限制。50mS不允許在異步串行端口上以9600bps的速度發(fā)送許多調(diào)試字符,也不允許在線調(diào)試器/仿真器單步執(zhí)行或中斷執(zhí)行以檢查內(nèi)部寄存器。因此,USB接口的調(diào)試方法與其它單片機項目不同。

    • 隨便讀一下XP-DDK,你可能會注意到主機控制器驅(qū)動程序現(xiàn)在有一個USBUSER_OP_SEND_one_PACKET命令,注釋為“此API用于實現(xiàn)‘單步’USB事務(wù)開發(fā)工具”。雖然這樣的工具還沒有發(fā)布,但我們只能希望很快看到一個。

  • 每個請求以一個8字節(jié)長的設(shè)置包開始,其格式如下:,抵消場大小價值說明zeroBM請求類型one位圖D7數(shù)據(jù)相轉(zhuǎn)移方向
    0 = Host to Device1 = Device to Host
    D6..5型
    0 = Standard1 = Class2 = Vendor3 = Reserved
    D4..0收件人
    0 = Device1 = Interface2 = Endpoint3 = Other4..31 = Reservedone布雷奎斯特one價值請求twoWValuetwo價值價值four溫得克斯two索引或偏移量索引sixW長度two計數(shù)如果存在數(shù)據(jù)階段,要傳輸?shù)淖止?jié)數(shù)
    這個 BM請求類型字段將確定請求的方向、請求的類型和指定的收件人 布雷奎斯特字段確定正在發(fā)出的請求。bmRequestType通常被解析,執(zhí)行被分支到許多處理程序,例如標(biāo)準(zhǔn)設(shè)備請求處理程序、標(biāo)準(zhǔn)接口請求處理程序、標(biāo)準(zhǔn)端點請求處理程序、類設(shè)備請求處理程序等。如何解析安裝程序包完全取決于您的喜好。其他人可以選擇先解析bRequest,然后根據(jù)每個請求確定類型和接收者。所有USB設(shè)備的標(biāo)準(zhǔn)請求都是通用的,下一頁將詳細(xì)介紹。類請求對于驅(qū)動程序類是通用的。例如,所有符合HID類的設(shè)備都將有一組通用的類特定請求。這些將不同于符合通信類的設(shè)備,也不同于轉(zhuǎn)換為大容量存儲類的設(shè)備。最后是供應(yīng)商定義的請求。這些是你作為USB設(shè)備設(shè)計者可以分配的請求。這些通常因設(shè)備而異,但這完全取決于您的實現(xiàn)和想象。一個共同的請求可以被定向到不同的接收者,并根據(jù)接收者執(zhí)行不同的功能。例如,GetStatus標(biāo)準(zhǔn)請求可以定向到設(shè)備、接口或端點。當(dāng)定向到某個設(shè)備時,它將返回指示遠(yuǎn)程喚醒狀態(tài)以及設(shè)備是否自供電的標(biāo)志。但是,如果同一個請求被定向到接口,它總是返回零,或者如果它被定向到一個端點,它將返回該端點的halt標(biāo)志。這個WValue 溫得克斯字段允許參數(shù)隨請求一起傳遞。 W長度如果存在數(shù)據(jù)階段,則指定要傳輸?shù)淖止?jié)數(shù)。

標(biāo)準(zhǔn)請求
  • USB規(guī)范第9.4節(jié)詳細(xì)說明了每個USB設(shè)備需要實現(xiàn)的“標(biāo)準(zhǔn)設(shè)備”請求。該標(biāo)準(zhǔn)提供了按請求對項目分組的單個表。考慮到大多數(shù)固件將按接收者解析設(shè)置包,我們將選擇按接收者分解請求,以便于檢查和實現(xiàn)。

標(biāo)準(zhǔn)設(shè)備請求
  • 目前有8個標(biāo)準(zhǔn)設(shè)備請求,下表詳細(xì)說明了這些請求。BM請求類型布雷奎斯特WValue溫得克斯W長度數(shù)據(jù)1000萬B獲取狀態(tài)(0x00)零零二設(shè)備狀態(tài)0000萬B清除功能(0x01)功能選擇器零零沒有0000萬B設(shè)置功能(0x03)功能選擇器零零沒有0000萬B設(shè)置地址(0x05)設(shè)備地址零零沒有1000萬B獲取描述符(0x06)描述符類型和索引零或語言ID描述符長度描述符0000萬B集合描述符(0x07)描述符類型和索引零或語言ID描述符長度描述符1000萬B獲取配置(0x08)零零one配置值0000萬B設(shè)置配置(0x09)配置值零零沒有

    • 這個獲取狀態(tài)針對設(shè)備的請求將在數(shù)據(jù)階段返回兩個字節(jié),格式如下:,15號公路第14天第13天第12天第11天第10天第9天D8型D7型D6型D5型D4號D3D2號D1D0號保留遠(yuǎn)程喚醒自供電如果設(shè)置了D0,則表示設(shè)備為自供電。如果清除,則設(shè)備為總線供電。如果設(shè)置了D1,則設(shè)備已啟用遠(yuǎn)程喚醒,并且可以在掛起期間喚醒主機。遠(yuǎn)程喚醒位可以通過SetFeature和ClearFeature請求,并使用DEVICE_remote_wakeup(0x01)的功能選擇器進(jìn)行

    • 清除特征設(shè)置功能請求可用于設(shè)置布爾特征。當(dāng)指定的接收者是設(shè)備時,只有兩個可用的功能選擇器是device_REMOTE_WAKEUP和TEST_MODE。測試模式允許設(shè)備顯示各種條件。這些在USB規(guī)范修訂版2.0中有進(jìn)一步的記錄。

    • 設(shè)置地址在枚舉期間用于為USB設(shè)備分配唯一地址。地址是用wValue指定的,最大只能是127。此請求的唯一性在于設(shè)備在完成狀態(tài)階段之后才設(shè)置其地址。(參見控制權(quán)轉(zhuǎn)讓)所有其他請求必須在狀態(tài)階段之前完成。

    • 設(shè)置描述符/獲取描述符用于返回wValue中的指定描述符。對配置描述符的請求將在一個請求中返回設(shè)備描述符以及所有接口和端點描述符。終結(jié)點描述符無法由GetDescriptor/SetDescriptor請求直接訪問。接口描述符無法由GetDescriptor/SetDescriptor請求直接訪問。字符串描述符在wIndex中包含一個語言ID,以支持多種語言。

    • 獲取配置/設(shè)置配置用于請求或設(shè)置當(dāng)前設(shè)備配置。在Get配置請求的情況下,將在數(shù)據(jù)階段返回一個字節(jié),指示設(shè)備狀態(tài)。零值表示設(shè)備未配置,非零值表示設(shè)備已配置。設(shè)置配置用于啟用設(shè)備。它應(yīng)該包含所需的bConfigurationValue的值配置描述符在wValue的低字節(jié)中選擇要啟用的配置。

標(biāo)準(zhǔn)接口請求
  • 該規(guī)范目前定義了五個標(biāo)準(zhǔn)接口請求,詳細(xì)信息見下表。有趣的是,只有兩個請求可以做任何可以理解的事情。

BM請求類型

布雷奎斯特

WValue

溫得克斯

W長度

數(shù)據(jù)

1000 0001b

獲取狀態(tài)(0x00)

接口

接口狀態(tài)

0000 0001b號

清除功能(0x01)

功能選擇器

接口

沒有

0000 0001b號

設(shè)置功能(0x03)

功能選擇器

接口

沒有

1000 0001b

獲取接口(0x0A)

接口

備用接口

0000 0001b號

SET U接口(0x11)

替代設(shè)置

接口

沒有

  • 溫得克斯通常用于為指向接口的請求指定引用接口。其格式如下所示。15號公路第14天第13天第12天第11天第10天第9天D8型D7型D6型D5型D4號D3D2號D1D0號保留接口編號

  • 獲取狀態(tài)用于返回接口的狀態(tài)。對接口的這種請求應(yīng)該返回兩個字節(jié)0x00、0x00。兩個字節(jié)都保留供將來使用

  • 清除特征設(shè)置功能請求可用于設(shè)置布爾特征。當(dāng)指定的接收者是接口時,當(dāng)前的USB規(guī)范修訂版2沒有指定接口特性。

  • 獲取接口設(shè)置接口設(shè)置替代接口設(shè)置,在接口描述符 .

標(biāo)準(zhǔn)終結(jié)點請求
  • 標(biāo)準(zhǔn)端點請求有以下四種類型。BM請求類型布雷奎斯特WValue溫得克斯W長度數(shù)據(jù)1000 0010b獲取狀態(tài)(0x00)零終結(jié)點二終結(jié)點狀態(tài)0000 0010b清除功能(0x01)功能選擇器終結(jié)點零沒有0000 0010b設(shè)置功能(0x03)功能選擇器終結(jié)點零沒有1000 0010b同步幀(0x12)零終結(jié)點二框架

    • 這個 溫得克斯字段通常用于指定指向端點的請求的引用端點和方向。其格式如下所示。15號公路第14天第13天第12天第11天第10天第9天D8型D7型D6型D5型D4號D3D2號D1D0號保留去吧保留終結(jié)點編號

    • 獲取狀態(tài)返回兩個字節(jié),指示終結(jié)點的狀態(tài)(暫停/暫停)。返回的兩個字節(jié)的格式如下所示。15號公路第14天第13天第12天第11天第10天第9天D8型D7型D6型D5型D4號D3D2號D1D0號保留停止

    • 清除特征設(shè)置功能用于設(shè)置端點特征。該標(biāo)準(zhǔn)目前定義了一個端點特性選擇器endpoint_HALT(0x00),它允許主機暫停和清除一個端點。建議只有默認(rèn)端點以外的端點具有此功能。

    • A 同步幀請求用于報告端點同步幀。


*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞: USB

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉