USB基础知识3

一、USB 专业术语中英对照表

英文中文
ACK确认信号
Active Device正在使用的设备
Asynchronous Data异步数据
Asynchronous RA异步自适应速率
Asynchronous SRC异步抽样转换率
Audio Device音频设备
AWG#(American Wire Gauge)美国电线标准
Babble帧传输中的总线动作
Bandwidth带宽
Big Endian大端
Bit比特
Bit Stuffing数据填充,以使PLL可以提取时钟信号
b/s每秒多少比特
B/s每秒多少字节
Buffer缓冲区
Bulk Transfer批量传送
Bus Enumeration总线标号
Byte字节
Capabilities能力
Characteristics特征
Client客户端
Configuring Software配置软件
Control Endpoint控制端口
Control Pipe控制通道
Control Transfer控制传送
CTI计算机电信组织
Cyclic Redundancy Check(CRC)循环冗余校验
Default Address缺省地址
Default Pipe缺省通道
Device设备、器件
Device Address设备地址
Device Endpoint设备端口
Device Resource设备资源
Device Software设备软件
Downstream下行
Driver驱动
DWORD双字
Dynamic Insertion and Removal动态插入与拆除
Electrically Erasable Programmable Read Only Memory EEPROM电擦写可编程只读存储器
End User终端用户
Endpoint端口
Endpoint Address端口地址
Endpoint Direction端口指向
Endpoint Number端口号
EOF帧结束
EOP包结束
External Port外设端口
False EOP错误的包结束标志
Frame
Frame Pattern帧结构
Full-duplex全双工
Function功能、功能部件
Handshake Packet握手包
Host主机
Host Controller主机控制器
Host Controller Driver(HCD)主机控制驱动
Host Resourses主机资源
Hub集线器
Hub TierHub层
Interrupt Request(IRQ)中断请求
Interrupt Transfer中断传送
I/O Request Packet(IRP)输出/输入请求包
Isochronous Data同步数据
Isochronous Device同步设备
Isochronous Sink Endpoint同步接收端
Isochronous Sourse Endpoint同步源端
Isochronous Transfer同步传送
Jiffer抖动
kb/s传送速率每秒几千比特
Little Endian小端
LOA有始无终的总线传输
LSb最低比特
LSB最低字节
Mb/s \ MB/s传送速率每秒几兆比特
Message PipeMessage Pipe 消息通道
MSb最高比特
MSB最高字节
NAK不确认
Non Return to Zero Invert(NRZI)非归零翻转码
Object对象
Packet数据包
Packet Buffer数据包缓冲区
Packet ID(PID)数据包标示位
Phase时项、相位
Phase Locked Loop(PLL)锁相环
Physical Device物理部件
Pipe通道
Polling查询
Port口、端口
Power On Reset(POR)电源复位
Programmable Data Rate可编程数据速率
Protocol协议
Rate Adaption(RA)自适应速率
Request请求、申请
Retire取消、终止
Root Hub根集线器、主机Hub
Root Port根集线器的下游端口
Sample取样、抽样
Sample Rate(Fs)抽样速率
Sample Rate Conversion(SRC)抽样转换率
Service服务
Sevice Interval服务间隙
Service Jitter服务质量的抖动参数
Sevice Rate指定端口每单位时间的服务数目
SOP包开始
Stage控制传输的某个阶段
Start-of-Frame(SOF)帧开始
Stream Pipe流通道
Synchronization Type同步类型
Synchronous RA同步的RA
Synchronous SRC同步的SRC
Sysem Programming Interface(SPI)系统可编程接口
Terminaton Time Division Multiplexing(TDM)时分复用
Timeout超时
Token Packet标志包
Transaction处理事务
Transfer传送
Transfer Type传送类型
Turn-around TimeUSB传输中包与包之间的间隔时间,以防止传输冲突
Universal Serial Bus Driver(USBD)USB驱动器
Univeral Serial Bus ResourcesUSB提供的资源
Upstream上行
Virtual Device虚拟设备
Word字(16位)

二、USB的标准请求

USB基础知识1中已经介绍过枚举是由一系列标准请求组成。

USB定义了8个字节的标准请求,通过这些请求,可以对设备的状态进行更改或对设备进行枚举。
USB的标准请求的数据传输方式都是控制传输方式,所以使用的端点是设备的默认端点0。

USB这8个字节的的控制请求包括传输过程中的数据,但包括了控制请求的数据长度。当数据长度为不为0时,设备或主机向对方传输相应长的数据。这些数据有可能是设备返回给主机的回应数据,也可能是主机发给设备的控制参数。

为什么USB的标准请求命令(不包括数据)的长度是8呢?
这是因为USB协议规定,端点0的最大包长度至少为8字节,所以任何设USB备都可能通过端点0接收字节的标准请求。
括号中的数字表示字节数,首字母bm,b,w分别表示位图、字节,双字节

2.1 USB标准请求的数据结构

USB标准请求的个字节分为5个部分,其变量分别定义为: 1字节的bmRequestType,1 字节的bReqest,2字节的wValue,2字节的wIndex和2字节的wLength.
在这里插入图片描述

2.1.1 bmRequestType字段(1字节)
  • D7,下一步数据的传输方向
    0 = 主机到设备(SET请求)
    1 = 设备到主机(GET请求)
  • D6-D5,命令的类型
    00 = 标准请求命令
    01 = 类请求命令(UVC规范中的请求属于类请求命令)
    10 = 用户定义的请求命令
    11 = 保留
  • D4-D0,命令接受者的类型
    00000 = 接受者为设备
    00001 = 接收者为接口
    00010 = 接受者为端点
    00011 = 其它
    4…31 = 保留
    其他值保留。
2.1.1.1 bmRequestType字段的USB标准请求(USB基本请求)
  • 凡是以0x00开头的bmRequestType,都是主机向设备发送数据。
  • 凡是以0x01开头的bmRequestType,都是主机向接口发送数据。
  • 凡是以0x02开头的bmRequestType,都是主机向端点发送数据。
  • 凡是以0x03开头的bmRequestType,都是主机向设备的其它类型发送数据,软件开发者可以自由定义。
  • 凡是以0x80开头的bmRequestType,都是设备向主机发送数据,且返回的数据来源于设备。
  • 凡是以0x81开头的bmRequestType,都是设备的接口向主机发送数据。
  • 凡是以0x82开头的bmRequestType,都是设备中某个接口的端点向主机发送数据。
  • 凡是以0x83开头的bmRequestType,这个是USB标准未规范的,可以自由定义,是其它类型向向主机发送数据
2.1.1.2 bmRequestType字段的类特定请求(HID,UVC,UAC,BOT)

类特定请求是在bmRequestType的基础上加0x20,所以是:

  • 凡是以0x20开头的bmRequestType,都是主机向设备发送数据。
  • 凡是以0x21开头的bmRequestType,都是主机向接口发送数据。
  • 凡是以0x22开头的bmRequestType,都是主机向端点发送数据。
  • 凡是以0x23开头的bmRequestType,都是主机向设备的其它类型发送数据,软件开发者可以自由定义。
  • 凡是以0xa0开头的bmRequestType,都是设备向主机发送数据,且返回的数据来源于设备。
  • 凡是以0xa1开头的bmRequestType,都是设备的接口向主机发送数据。
  • 凡是以0xa2开头的bmRequestType,都是设备中某个接口的端点向主机发送数据。
  • 凡是以0xa3开头的bmRequestType,这个是USB标准未规范的,可以自由定义,是其它类型向向主机发送数据
2.1.1.3 bmRequestType字段的厂商自定义请求(自定义,不常见)

类特定请求是在bmRequestType的基础上加0x40,所以是:

  • 凡是以0x40开头的bmRequestType,都是主机向设备发送数据。
  • 凡是以0x41开头的bmRequestType,都是主机向接口发送数据。
  • 凡是以0x42开头的bmRequestType,都是主机向端点发送数据。
  • 凡是以0x43开头的bmRequestType,都是主机向设备的其它类型发送数据,软件开发者可以自由定义。
  • 凡是以0xc0开头的bmRequestType,都是设备向主机发送数据,且返回的数据来源于设备。
  • 凡是以0xc1开头的bmRequestType,都是设备的接口向主机发送数据。
  • 凡是以0xc2开头的bmRequestType,都是设备中某个接口的端点向主机发送数据。
  • 凡是以0xc3开头的bmRequestType,这个是USB标准未规范的,可以自由定义,是其它类型向向主机发送数据
2.1.2 bRequest字段(1)

标准请求的及代码

bRequestValue
GET_STATUS0
CLEAR_FEATURE1
SET_FEATURE3
SET_ADDRESS5
GET_DESCRIPTOR6
SET_DESCRIPTOR7
GET_CONFIGURATION8
SET_CONFIGURATION9
GET_INTERFACE10
SET_INTERFACE11
SYNCH_FRAME12
SET_ENCRYPTION13 (USB2.0以后)
GET_ENCRYPTION14
SET_HANDSHAKE15
GET_HANDSHAKE16
SET_CONNECTION17
SET_SECURITY_DATA18
GET_SECURITY_DATA19
SET_WUSB_DATA20
LOOPBACK_DATA_WRITE21
LOOPBACK_DATA_READ22
SET_INTERFACE_DS23
SET_SEL48
SET_ISOCH_DELAY49
2.1.3 设备请求
bmRequestTypebRequest描述
1000 0000bGET_STATUS (0)返回设备的状态。主要用于确定设备是否能够远程唤醒,以及设备是自供电还是总线供电。
0000 0000bCLEAR_FEATURE (01)禁用 DEVICE_REMOTE_WAKEUP 或 TEST_MODE 功能。
0000 0000bSET_FEATURE (03)启用 DEVICE_REMOTE_WAKEUP 或 TEST_MODE 功能。
0000 0000b设置地址(05)在枚举期间,该指令用于为设备分配地址 (1 -127)。
1000 0000bGET_DESCRIPTOR (06)返回由 wValue 参数选择的描述符表。
0000 0000bSET_DESCRIPTOR (07)设置指定的描述符值。
1000 0000bGET_CONFIGURATION (08)返回活动设备配置的索引值。
0000 0000b设置配置(09)使指定的设备配置变为活动状态。
2.1.4 接口请求
bmRequestTypebRequest描述
1000 0001bGET_STATUS (0)返回接口的状态。目前,两个返回的字节都“保留以备将来使用”。
0000 0001bCLEAR_FEATURE (01)禁用界面功能。
0000 0001bSET_FEATURE (03)启用指定的接口功能。
1000 0001bGET_INTERFACE (0A)检索当前活动接口的索引。
0000 0001bSET_INTERFACE (11)用界面指示激活。
2.1.5 端点请求
bmRequestTypebRequest描述
1000 0010bGET_STATUS (0)返回端点的状态。
0000 0010bCLEAR_FEATURE (01)禁用端点功能
0000 0010bSET_FEATURE (03)启用端点功能
1000 0010bSYNCH_FRAME (12)用于上报端点同步帧。
2.1.6 集线器请求
  • Get Hub Status (GET_STATUS)
  • Get Port Status (GET_STATUS)
  • Clear Hub Feature (CLEAR_FEATURE)
  • Clear Port Feature (CLEAR_FEATURE)
  • Get Bus State (GET_STATE) obsolete since USB 2.0
  • Set Hub Feature (SET_FEATURE)
  • Set Port Feature (SET_FEATURE)
  • Get Hub Descriptor (GET_DESCRIPTOR)
  • Set Hub Descriptor (SET_DESCRIPTOR)
  • Clear TT Buffer (CLEAR_TT_BUFFER)
  • Reset TT (RESET_TT)
  • Get TT State (GET_TT_STATE)
  • Stop TT (STOP_TT)

2.2 USB 读取状态GetStatus

GetStatus请求主要用于USB主机读取USB设备、接口或端点的状态。USB设备返回2字节的设备状态。

2.2.1 读取设备

请求数据

bmRequestType(1)bRequest(1)wValue(2)wIndex(2)wLength(2)
8000000000000002
  • bmRequestType:0x80表示从设备到主机,请求标准命令,接收者为设备
  • bRequest:0x00表示获取状态
  • wLength:0x02,表示返回数据为2字节。

返回数据

D15-D2D1D0
保留为0远程唤醒自供电
2.2.2 读取接口

请求数据

bmRequestType(1)bRequest(1)wValue(2)wIndex(2)wLength(2)
80000000接口ID0002
  • bmRequestType:0x81表示从设备到主机,请求标准命令,接收者为接口
  • bRequest:0x00表示获取状态
  • wIndex:配置描述符续中的接口ID
  • wLength:0x02,表示返回数据为2字节。

返回数据

D15-D0
保留为0
2.2.3 读取端点

请求数据

bmRequestType(1)bRequest(1)wValue(2)wIndex(2)wLength(2)
80000000端点地址0002
  • bmRequestType:0x82表示从设备到主机,请求标准命令,接收者为端点
  • bRequest:0x00表示获取状态
  • wIndex:配置描述符中的端点地址
  • wLength:0x02,表示返回数据为2字节。

返回数据

D15-D1D0
保留为0是否端点已经停止(1停止,0未停止)

2.3 USB获取描述符GetDescriptor

GetDescriptor用于USB主机读取设备的描述符,在请求数据阶段,USB设备将向主机返回指定的描述符。

bmRequestType(1)bRequest(1)wValue(2)wIndex(2)wLength(2)
8006类型(高字节)和索引(低字节)0或语言ID接收的描述符长度
  • bmRequestType:x80表示从设备到主机,请求标准命令,接收者为设备。
  • bRequest:0x06,表示读取描述符。
  • wValue表示要获取描述符的索类型。(高字节为描述符类型,低字节为描述符索引)

    描述符的类型有:
    1——设备描述符
    2——配置描述符
    3——字符串描述符
    4——接口描述符 //随配置描述符一并获取
    5——端点描述符 //随配置描述符一并获取

  • wIndex字段表示字符串描述符的语言ID,其它描述符为0
  • wLength指定了描述符的字节数。

一个配置描述符的请求将在一个请求事务中返回设备描述符和所有的接口、端点描述符。

  • 端点描述符:不能直接通过 SetDescriptor/GetDescriptor 请求访问;
  • 接口描述符:不能直接通过 SetDescriptor/GetDescriptor 请求访问;
  • 字符串描述符:wIndex 中包含语言 ID,支持多语言。

2.4 USB 读取配置GetConfiguration

GetConfiguration用于主机读取USB设备当前的配置值,在 GetConfiguration的数据阶段,USB设备将向主机返回一个字节的配置值。

bmRequestType(1)bRequest(1)wValue(2)wIndex(2)wLength(2)
8008001
  • bmRequestType:x80表示从设备到主机,请求标准命令,接收者为设备。
  • bRequest:0x08,表示读取配置。
  • wLength:01,表示设备应向主机报告1个字节的配置值。

在USB设备的不同状态,GetConfiguration请求具有不同的响应:

  • USB设备处于地址状态,GetConfiguration请求返回0.
  • USB设备处于配置状态时,GetConfiguration请求返回当前配置描述符中bGetConfigurationValue字段的值。
  • USB设备处于默认状态时,GetConfiguration请求无效。

2.5 USB 读取接口GetInterface

GetInterface请求用于USB主机读取指定接口的设置值,即获取接口描述符中bAlternateSetting。
字段中的值。在GetInterface请求的数据阶段,USB设备向USB主机返回1个字节的可替换设置值。

bmRequestType(1)bRequest(1)wValue(2)wIndex(2)wLength(2)
800A0接口1
  • bmRequestType:x80表示从设备到主机,请求标准命令,接收者为设备。
  • bRequest:0x0A,表示读取接口。
  • WIndex表示要获取接口的ID。
  • wLength 为1,表示USB设备向主机报告1个字节,即指定日剧口ID中的bAlternateSetting。

参考

USB 标准请求

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值