USB一些解释说明
2016-11-07 10:05
609 查看
1、USB的重要关键字:
端点(Endpoint):
位于USB设备或主机上的一个数据缓冲区,是USB设备中可以进行数据收发的最小单元,支持单向或者双向的数据传输,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点)。设备支持端点的数量是有限制的,除默认端点外低速设备最多支持2组端点(2 个输入,2 个输出),高速和全速设备最多支持15组端点。
帧:
时间概念,在USB中,一帧就是1MS,它是一个独立的单元,包含了一系列总线动作,USB将1帧分为好几份,每一份是一个USB的传输动作。
上行:
设备到主机为上行
下行:
主机到设备为下行。
USB数据传输方法
数据在USB线里传送是由低位到高位发送的。
USB采用不归零取反来传输数据,
当传输线上的差分数据输入0时就取反,输入1时就保持原值,
为了确保信号发送的准确性,当在USB总线上发送一个包时,传输设备就要进行位插入操作(即在数据流中每连续6个1后就插入一个0),从而强迫NRZI码发生变化。
这些是由专门硬件处理的。
域:
USB数据最小的单位
由若干位组成(多少位由具体的域决定),域可分为七个类型:
a)同步域(SYNC)
所有的USB包都由SYNC开始,高速包的SYNC宽度为32bit,全速/低速包的SYNC段度为8bit。
实际接收到的SYNC长度由于USB HUB的关系,可能会小于该值。八位的值固定为0000 0001,用于本地时钟与输入同步。
b)标识域(PID)
由四位标识符 + 四位标识符反码构成,表明包的类型和格式。
USB的标识码有16种。USB2.0使用了十六种标识码,标识码的作用是用来说明包的属性的,标识码是和包联系在一起的,标识码分别有以下十六种:
令牌包 :
0x01:输出(OUT)启动一个方向为主机到设备的传输,并包含了设备地址和标号。
0x09:输入(IN) 启动一个方向为设备到主机的传输,并包含了设备地址和标号。
0x05:帧起始(SOF)表示一个帧的开始,并且包含了相应的帧号。
0x0d:设置(SETUP)启动一个控制传输,用于主机对设备的初始化。
数据包 :
0x03:偶数据包(DATA0)。
0x0b:奇数据包(DATA1)。
0x07:在一个微帧内高速,高宽带同步传输
0x0F:高速分组、高宽带同步传输
握手包:
0x02:确认接收到无误的数据包(ACK)。
0x0a:无效,接收(发送)端正在忙而无法接收(发送)信息。
0x0e:错误,端点被禁止或不支持控制管道请求。
0x06:无响应返回(No response yet from receive)
特殊包
0x00:保留PID
0x0C:
0x0C:
0x08:
0x04:(Token)
0x0C前导,用于启动下行端口的低速设备的数据传输。
c)地址域(ADDR):
七位地址,代表了设备在主机上的地址
地址000 0000被命名为零地址,是任何设备第一次连接到主机时,在被主机配置、枚举前的默认地址,由此可以知道为什么一个USB主机只能接127个设备的原因。
d)端点域(ENDP)
四位,由此可知一个USB设备端点数量最大为16个
e)帧号域(FRAM)
11位,每一个帧都有一个特定的帧号,帧号域最大容量0x800,对于同步传输有重要意义。
f)数据域(DATA):
长度为0~1023字节,在不同的传输类型中,数据域的长度各不相同,但必须为整数个字节的长度。
2、事物
有IN、OUT和SETUP三大事务,每一种事务都由令牌包、数据包、握手包三个阶段构成。
这里用阶段的意思是因为这些包的发送是有一定的时间先后顺序的,事务的三个阶段如下:
1、令牌包阶段:启动一个输入、输出或设置的事务。
2、数据包阶段:按输入、输出发送相应的数据。
3、握手包阶段:返回数据接收情况。在同步传输的IN和OUT事务中没有这个阶段,这是比较特殊的。
1)、 IN事务:
令牌包阶段——主机发送一个PID为IN的输入包给设备,通知设备要往主机发送数据;
数据包阶段——设备根据情况会作出三种反应(要注意:数据包阶段也不总是传送数据的,根据传输情况还会提前进入握手包阶段)。
1) 设备端点正常:设备往主机里面发出数据包(DATA0与DATA1交替);
2) 设备正在忙:无法往主机发出数据包就发送NAK无效包,IN事务提前结束,到了下一个IN事务才继续;
3) 相应设备端点被禁止:发送错误包STALL包,事务也就提前结束了,总线进入空闲状态。
握手包阶段——主机正确接收到数据之后就会向设备发送ACK包。
2)、 OUT事务:
令牌包阶段——主机发送一个PID为OUT的输出包给设备,通知设备要接收数据;
数据包阶段——比较简单,就是主机会往设备送数据,DATA0与DATA1交替
握手包阶段——设备根据情况会作出三种反应
1) 设备端点接收正确,设备给主机返回ACK,通知主机可以发送新的数据,如果数据包发生了CRC校验错误,将不返回任何握手信息;
2) 设备正在忙,无法给主机返回ACK,就发送NAK无效包,通知主机再次发送数据;
3) 相应设备端点被禁止,发送错误包STALL包,事务提前结束,总线直接进入空闲状态。
3)、SETUT事务:
令牌包阶段——主机发送一个PID为SETUP的输出包给设备,通知设备要接收数据;
数据包阶段——比较简单,就是主机往设备送数据,注意,这里只有一个固定为8个字节的DATA0包,这8个字节的内容就是标准的USB设备请求命令,详见2.4。
握手包阶段——设备接收到主机的命令信息后,返回ACK,此后总线进入空闲状态,并准备下一个传输(在SETUP事务后通常是一个IN或OUT事务构成的传输)。
端点(Endpoint):
位于USB设备或主机上的一个数据缓冲区,是USB设备中可以进行数据收发的最小单元,支持单向或者双向的数据传输,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点)。设备支持端点的数量是有限制的,除默认端点外低速设备最多支持2组端点(2 个输入,2 个输出),高速和全速设备最多支持15组端点。
帧:
时间概念,在USB中,一帧就是1MS,它是一个独立的单元,包含了一系列总线动作,USB将1帧分为好几份,每一份是一个USB的传输动作。
上行:
设备到主机为上行
下行:
主机到设备为下行。
USB数据传输方法
数据在USB线里传送是由低位到高位发送的。
USB采用不归零取反来传输数据,
当传输线上的差分数据输入0时就取反,输入1时就保持原值,
为了确保信号发送的准确性,当在USB总线上发送一个包时,传输设备就要进行位插入操作(即在数据流中每连续6个1后就插入一个0),从而强迫NRZI码发生变化。
这些是由专门硬件处理的。
域:
USB数据最小的单位
由若干位组成(多少位由具体的域决定),域可分为七个类型:
a)同步域(SYNC)
所有的USB包都由SYNC开始,高速包的SYNC宽度为32bit,全速/低速包的SYNC段度为8bit。
实际接收到的SYNC长度由于USB HUB的关系,可能会小于该值。八位的值固定为0000 0001,用于本地时钟与输入同步。
b)标识域(PID)
由四位标识符 + 四位标识符反码构成,表明包的类型和格式。
USB的标识码有16种。USB2.0使用了十六种标识码,标识码的作用是用来说明包的属性的,标识码是和包联系在一起的,标识码分别有以下十六种:
令牌包 :
0x01:输出(OUT)启动一个方向为主机到设备的传输,并包含了设备地址和标号。
0x09:输入(IN) 启动一个方向为设备到主机的传输,并包含了设备地址和标号。
0x05:帧起始(SOF)表示一个帧的开始,并且包含了相应的帧号。
0x0d:设置(SETUP)启动一个控制传输,用于主机对设备的初始化。
数据包 :
0x03:偶数据包(DATA0)。
0x0b:奇数据包(DATA1)。
0x07:在一个微帧内高速,高宽带同步传输
0x0F:高速分组、高宽带同步传输
握手包:
0x02:确认接收到无误的数据包(ACK)。
0x0a:无效,接收(发送)端正在忙而无法接收(发送)信息。
0x0e:错误,端点被禁止或不支持控制管道请求。
0x06:无响应返回(No response yet from receive)
特殊包
0x00:保留PID
0x0C:
0x0C:
0x08:
0x04:(Token)
0x0C前导,用于启动下行端口的低速设备的数据传输。
c)地址域(ADDR):
七位地址,代表了设备在主机上的地址
地址000 0000被命名为零地址,是任何设备第一次连接到主机时,在被主机配置、枚举前的默认地址,由此可以知道为什么一个USB主机只能接127个设备的原因。
d)端点域(ENDP)
四位,由此可知一个USB设备端点数量最大为16个
e)帧号域(FRAM)
11位,每一个帧都有一个特定的帧号,帧号域最大容量0x800,对于同步传输有重要意义。
f)数据域(DATA):
长度为0~1023字节,在不同的传输类型中,数据域的长度各不相同,但必须为整数个字节的长度。
2、事物
有IN、OUT和SETUP三大事务,每一种事务都由令牌包、数据包、握手包三个阶段构成。
这里用阶段的意思是因为这些包的发送是有一定的时间先后顺序的,事务的三个阶段如下:
1、令牌包阶段:启动一个输入、输出或设置的事务。
2、数据包阶段:按输入、输出发送相应的数据。
3、握手包阶段:返回数据接收情况。在同步传输的IN和OUT事务中没有这个阶段,这是比较特殊的。
1)、 IN事务:
令牌包阶段——主机发送一个PID为IN的输入包给设备,通知设备要往主机发送数据;
数据包阶段——设备根据情况会作出三种反应(要注意:数据包阶段也不总是传送数据的,根据传输情况还会提前进入握手包阶段)。
1) 设备端点正常:设备往主机里面发出数据包(DATA0与DATA1交替);
2) 设备正在忙:无法往主机发出数据包就发送NAK无效包,IN事务提前结束,到了下一个IN事务才继续;
3) 相应设备端点被禁止:发送错误包STALL包,事务也就提前结束了,总线进入空闲状态。
握手包阶段——主机正确接收到数据之后就会向设备发送ACK包。
2)、 OUT事务:
令牌包阶段——主机发送一个PID为OUT的输出包给设备,通知设备要接收数据;
数据包阶段——比较简单,就是主机会往设备送数据,DATA0与DATA1交替
握手包阶段——设备根据情况会作出三种反应
1) 设备端点接收正确,设备给主机返回ACK,通知主机可以发送新的数据,如果数据包发生了CRC校验错误,将不返回任何握手信息;
2) 设备正在忙,无法给主机返回ACK,就发送NAK无效包,通知主机再次发送数据;
3) 相应设备端点被禁止,发送错误包STALL包,事务提前结束,总线直接进入空闲状态。
3)、SETUT事务:
令牌包阶段——主机发送一个PID为SETUP的输出包给设备,通知设备要接收数据;
数据包阶段——比较简单,就是主机往设备送数据,注意,这里只有一个固定为8个字节的DATA0包,这8个字节的内容就是标准的USB设备请求命令,详见2.4。
握手包阶段——设备接收到主机的命令信息后,返回ACK,此后总线进入空闲状态,并准备下一个传输(在SETUP事务后通常是一个IN或OUT事务构成的传输)。
相关文章推荐
- 【人脸识别】关于识别识别的一些名词解释以及函数说明
- usb各个描述符的解释说明
- 有关ASP.NET的一些基本说明,解释
- [ Java ] [ Spring ] Spring 一些配置项 及 <context:annotation-config/> 專文解释说明
- TCP/IP、UDP、HTTP、SPDY等的一些解释说明
- 菜鸟入门篇---有关ASP.NET的一些基本说明,解释. [页面标识]
- 一些常用的框架相关名词解释与说明
- 本期期刊的一些补充说明
- 关于Windows内核空间操作的一些说明
- .Net的Collection类的一些使用说明
- Eclipse中一些图例的说明
- StreamTokenizer类的一些说明
- C++的一些基本功,包括对常量成员函数的一些特殊说明
- 关于本专栏文章的起因和素材来源的一些说明
- 用于双目视觉的程序框架,里面是代码和一些说明
- 签名的一些说明
- 编写完成端口网络服务器的一些说明 (1)
- XPCOM--LINUX下的组件开发技术的一些补充与说明
- Windows服务的一些解释
- 关于WEB使用media player的一些说明