博客專(zhuān)欄

EEPW首頁(yè) > 博客 > USB系列之第六章:USB請(qǐng)求

USB系列之第六章:USB請(qǐng)求

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

BM請(qǐng)求類(lèi)型

布雷奎斯特

WValue

溫得克斯

W長(zhǎng)度

數(shù)據(jù)

1000 0001b

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

接口

接口狀態(tài)

0000 0001b號(hào)

清除功能(0x01)

功能選擇器

接口

沒(méi)有

0000 0001b號(hào)

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

功能選擇器

接口

沒(méi)有

1000 0001b

獲取接口(0x0A)

接口

備用接口

0000 0001b號(hào)

SET U接口(0x11)

替代設(shè)置

接口

沒(méi)有

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

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

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

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

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

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

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

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

    • A 同步幀請(qǐng)求用于報(bào)告端點(diǎn)同步幀。


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



關(guān)鍵詞: USB

相關(guān)推薦

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

關(guān)閉