一、基本概念
1、USB协议自身很杂乱,但方便在供给了一致的接口方法,使得驱动程序在运用设备的时分,作业简化到了相似操作串行接口。
2、USB设备能够看作供给了多个串口的设备,根据USB的标准,咱们将每个串口称作端点(Endpoint),要和这个端点通讯,咱们就要翻开到这个端点的衔接,这个衔接便是管道(Pipe)。
3、翻开端点之后,就能够像串口相同进行数据传输了。USB有4种不同类型的传输方法:操控传输(Control Transfer),批量传输(Bulk Transfer),中止传输(Interrupt Transfer)和实时传输(IsochTransfer)。
4、因为一个设备或许要习惯多种状况,端点的设置会有多套,以备运用。端点设置称为接口(Interface)。USB设备展示给咱们能够找到的东西便是这些Interface,咱们挑选要用的Interface,就能够找到Endpoint,再翻开Endpoint,就能够传输数据了。所以,在驱动程序开端的时分,需求记载下这些Interface。
5、例如:OV511+的端点0是操控端点,用来设置参数以及起停设备;端点1是实时传输端点,用来传输视频。端点1有8套不同的设置,首要差异就在于一次传输的数据帧的巨细,所以在USBDeviceAttach的时分,要记载这些设置到驱动程序中,后边才能够选用。
二、描绘符介绍
标准的USB设备有5种USB描绘符:设备描绘符,装备描绘符,字符串描绘符,接口描绘符,端点描绘符。下面详解:
1、设备描绘符:一个设备只要一个设备描绘符
typedef struct _USB_DEVICE_DESCRIPTOR_
{
BYTEbLength,
BYTEbDescriptorType,
WORDbcdUSB,
BYTEbDeviceClass,
BTYEbDeviceSubClass,
BYTEbDeviceProtol,
BYTEbMaxPacketSize0,
WORDidVenderI,
WORDidProduct,
WORDbcdDevice,
BYTEiManufacturer,
BYTEiProduct,
BYTEiSerialNumber,
BYTEiNumConfiguations
}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编码字符串.
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/233081.html