久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3163|回復: 1
打印 上一主題 下一主題
收起左側

USB描述符之詳細解說

[復制鏈接]
跳轉到指定樓層
樓主
ID:94349 發表于 2015-11-10 01:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
USB 描述符詳解
概念:
a.USB協議本身很復雜,但方便在提供了統一的接口方式,使得驅動程序在使用設備的時候,工作簡化到了類似操作串行接口。
b.USB設備可以看作提供了多個串口的設備,依據USB的規范,我們將每個串口稱作端點(Endpoint),要和這個端點通信,我們就要打開到這個端點的連接,這個連接就是管道(Pipe)。
c.打開端點之后,就可以像串口一樣進行數據傳輸了。USB有4種不同類型的傳輸方式:控制傳輸(ControlTransfer),批量傳輸(Bulk Transfer),中斷傳輸(InterruptTransfer)和實時傳輸(IsochTransfer)。
d.由于一個設備可能要適應多種情況,端點的設置會有多套,以備使用。端點設置稱為接口(Interface)。USB設備展現給我們能夠找到的東西就是這些Interface,我們選擇要用的Interface,就可以找到Endpoint,再打開Endpoint,就可以傳輸數據了。所以,在驅動程序開始的時候,需要記錄下這些Interface。
e.例如:OV511+的端點0是控制端點,用來設置參數以及起停設備;端點1是實時傳輸端點,用來傳輸視頻。端點1有8套不同的設置,主要區別就在于一次傳輸的數據幀的大小,所以在USBDeviceAttach的時候,要記錄這些設置到驅動程序中,后面才能夠選用。

描述符:
 標準的USB設備有5種USB描述符:設備描述符,配置描述符,字符串描述符,接口描述符,端點描述符。下面詳解:
1、設備描述符:一個設備只有一個設備描述符

typedef struct _USB_DEVICE_DESCRIPTOR_
{
   BYTE       bLength,
   BYTE       bDescriptorType,
   WORD     bcdUSB,
   BYTE       bDeviceClass,
   BTYE       bDeviceSubClass,
   BYTE       bDeviceProtol,
   BYTE       bMaxPacketSize0,
   WORD     idVenderI,
   WORD     idProduct,
   WORD     bcdDevice,
   BYTE       iManufacturer,
   BYTE       iProduct,
   BYTE       iSerialNumber,
   BYTE       iNumConfiguations
}USB_DEVICE_DESCRIPTOR;

bLength : 描述符大小.固定為0x12.
bDescriptorType : 設備描述符類型.固定為0x01.
bcdUSB : USB 規范發布號.表示了本設備能適用于那種協議,如2.0=0200,1.1=0110等.
bDeviceClass :類型代碼(由USB指定)。當它的值是0時,表示所有接口在配置描述符里,并且所有接口是獨立的。當它的值是1到FEH時,表示不同的接口關聯的。當它的值是FFH時,它是廠商自己定義的.
bDeviceSubClass :子類型代碼(由USB分配).如果bDeviceClass值是0,一定要設置為0.其它情況就跟據USB-IF組織定義的編碼.
bDeviceProtocol :協議代碼(由USB分配).如果使用USB-IF組織定義的協議,就需要設置這里的值,否則直接設置為0。如果廠商自己定義的可以設置為FFH.
bMaxPacketSize0 : 端點0最大分組大小(只有8,16,32,64有效).

idVendor : 供應商ID(由USB分配).
idProduct : 產品ID(由廠商分配).由供應商ID和產品ID,就可以讓操作系統加載不同的驅動程序.

bcdDevice : 設備出產編碼.由廠家自行設置.
iManufacturer : 廠商描述符字符串索引.索引到對應的字符串描述符. 為0則表示沒有.
iProduct : :產品描述符字符串索引.同上.
iSerialNumber : 設備序列號字符串索引.同上.
bNumConfigurations : 可能的配置數.指配置字符串的個數

2、配置描述符:配置描述符定義了設備的配置信息,一個設備可以有多個配置描述符

typedef struct _USB_CONFIGURATION_DESCRIPTOR_
{
   BYTE     bLength,
   BYTE     bDescriptorType,
   WORD   wTotalLength,
   BYTE     bNumInterfaces,
   BYTE     bConfigurationValue,
   BYTE     iConfiguration,
   BYTE     bmAttributes,
   BYTE     MaxPower
}USB_CONFIGURATION_DESCRIPTOR;

bLength : 描述符大小.固定為0x09.
bDescriptorType : 配置描述符類型.固定為0x02.
wTotalLength : 返回整個數據的長度.指此配置返回的配置描述符,接口描述符以及端點描述符的全部大小.
bNumInterfaces : 配置所支持的接口數.指該配置配備的接口數量,也表示該配置下接口描述符數量.
bConfigurationValue : 作為Set Configuration的一個參數選擇配置值.
iConfiguration : 用于描述該配置字符串描述符的索引.
bmAttributes : 供電模式選擇.Bit4-0保留,D7:總線供電,D6:自供電,D5:遠程喚醒.
MaxPower : 總線供電的USB設備的最大消耗電流.以2mA為單位.

3、接口描述符:接口描述符說明了接口所提供的配置,一個配置所擁有的接口數量通過配置描述符的bNumInterfaces決定

typedef struct _USB_INTERFACE_DESCRIPTOR_
{
   BYTE     bLength,
   BYTE     bDescriptorType,
   BYTE     bInterfaceNumber,
   BYTE     bAlternateSetting,
   BYTE     bNumEndpoint,
   BYTE     bInterfaceClass,
   BYTE     bInterfaceSubClass,
   BYTE     bInterfaceProtocol,
   BYTE     iInterface
}USB_INTERFACE_DESCRIPTOR;

bLength : 描述符大小.固定為0x09.
bDescriptorType : 接口描述符類型.固定為0x04.
bInterfaceNumber: 該接口的編號.
bAlternateSetting : 用于為上一個字段選擇可供替換的位置.即備用的接口描述符標號.
bNumEndpoint : 使用的端點數目.端點0除外.
bInterfaceClass : 類型代碼(由USB分配).
bInterfaceSunClass : 子類型代碼(由USB分配).
bInterfaceProtocol : 協議代碼(由USB分配).
iInterface : 字符串描述符的索引

4、端點描述符:USB設備中的每個端點都有自己的端點描述符,由接口描述符中的bNumEndpoint決定其數量

typedef struct _USB_ENDPOINT_DESCRIPTOR_
{
   BYTE       bLength,
   BYTE       bDescriptorType,
   BYTE       bEndpointAddress,
   BYTE       bmAttributes,
   WORD     wMaxPacketSize,
   BYTE       bInterval
}USB_ENDPOINT_DESCRIPTOR;

bLength : 描述符大小.固定為0x07.
bDescriptorType : 接口描述符類型.固定為0x05.
bEndpointType :USB設備的端點地址.Bit7,方向,對于控制端點可以忽略,1/0:IN/OUT.Bit6-4,保留.BIt3-0:端點號.
bmAttributes : 端點屬性.Bit7-2,保留.BIt1-0:00控制,01同步,02批量,03中斷.
wMaxPacketSize : 本端點接收或發送的最大信息包大小.
bInterval :輪訓數據傳送端點的時間間隔.對于批量傳送和控制傳送的端點忽略.對于同步傳送的端點,必須為1,對于中斷傳送的端點,范圍為1-255.

5、字符串描述符:其中字符串描述符是可選的.如果不支持字符串描述符,其設備,配置,接口描述符內的所有字符串描述符索引都必須為0

typedef struct _USB_STRING_DESCRIPTION_
{
   BYTE     bLength,
   BYTE     bDescriptionType,
   BYTE     bString[1];
}USB_STRING_DESCRIPTION;

bLength : 描述符大小.由整個字符串的長度加上bLength和bDescriptorType的長度決定.
bDescriptorType : 接口描述符類型.固定為0x03.
bString[1] : Unicode編碼字符串.

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:433680 發表于 2018-12-25 11:50 | 只看該作者
學習了,感謝樓主了!!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级在线| 黄 色 毛片免费 | 成人免费观看视频 | 日韩在线观看 | 中文一区 | 久久久视 | 成年女人免费v片 | 日日操网站 | 99久热 | 成人欧美一区二区三区黑人孕妇 | 九九免费视频 | 青青草在线播放 | 欧美日韩视频在线第一区 | 四虎影音 | av色在线| 日韩一区二区三区在线观看视频 | h在线播放 | 色噜噜色综合 | 91av在线免费观看 | 精品视频国产 | 91视频一区| 色偷偷人人澡人人爽人人模 | 欧美不卡网站 | 欧美日韩精品久久久免费观看 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 中文字幕视频一区二区 | 国产日韩免费观看 | 国产精品一卡 | 精品国产欧美一区二区 | 成人毛片视频免费 | 九色在线观看 | 亚洲欧洲一区 | 成人小视频在线观看 | 97av视频在线 | 欧美日韩国产精品激情在线播放 | 久久久久国产 | 青青草一区 | 国产精品成人一区 | 国产精品大片在线观看 | 人人干人人舔 | 精品免费 |