USB一些解释说明

来源:互联网 发布:淘宝网韩都衣舍 编辑:程序博客网 时间:2024/05/24 05:48

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事务构成的传输)。

  



0 0
原创粉丝点击