USB包概念介绍

USB 全速和低速设备

1、同步域(SYNC) 8bit 0000 0001
2、标识域(PID)    8bit bit3~bit0有用,bit7~bit4是bit3~bit0的取反用来校验PID。
3、地址域(ADDR) 7bit地址,代表设备在主机上的地址。
4、端点域(ENDP)    4bit,一个USB设备端点最大数量为16个
5、帧号域(FRAM) 11bit,每一个帧都有一个特定的帧号,
6、数据域(DATA) 长度为0~1023字节
7、校验域(CRC)    5bit ,只校验PID后面的数据不包括PID,
8、包结束(EOP)  2个数据位宽度的单端0(SE0)信号。SE0(D+和D-同时拉低)

1、令牌包:OUT、IN、SOF、SETUP
OUT: (1110 0001)通知设备将要输出数据
IN:  (0110 1001)通知设备将要输入数据
SOF:  (1010 0101)通知设备这是一个帧起始包,全速每ms产生一个SOF包,高速设备每125us产生一个微帧,(高速设备每ms有8个微帧,这8个微帧的帧号一样,即相同的SOF),SOF包之后不跟随数据传输
SETUP:(0010    1101)通知设备将要开始一个控制传输,SETUP令牌包后只能使用DATA0数据包,且只能发送到控制端点,设备必须要接收

2、数据包:DATA0、DATA1、DATA2、MDATA
DATA0:(1100 0011)数据包
DATA1:(0100 1011)
DATA2:(1000 0111)
MDATA:(0000 1111)
3、握手包:ACK、NAK、STALL、NYET
ACK:  (1101 0010)确认
NAK:  (0101 1010)不确认,表示没有数据需要返回,或者数据正确接收没有足够空间容纳
STALL:(0001 1110)挂起,表示设备无法执行这个请求
NYET: (1001 0110)未准备好,USB2.0的高速设备输出事务,表示本次数据成功接收,但是没有足够空间接收下次数据,主机在下次输出数据时,将使用PING令牌包试探设备是否有空间接收数据。
4、特殊类:PRE、ERR、SPLIT、PING
PRE:  (0011 1100)前导这是一个令牌包
ERR   (0011 1100)错误这是一个握手包
SPLIT (0111 1000)分裂事务这是一个令牌包
PING  (1011 0100)PING测试这时一个令牌包

/*****************************************令牌包结构**********************************************************/
1、SOF包结构:
[同步域]    [8位包标识PID]    [11位帧号]        [5位CRC5校验]    [EOP]
[0000 0001]    [1010 0101]        [000 0000 0000]    [x xxxx]        [D+和D-同时拉低]

2、OUT包结构:
[同步域]    [8位包标识PID]    [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]
[0000 0001] [1110 0001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

3、IN包结构:
[同步域]    [8位包标识PID]    [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]
[0000 0001] [0110 1001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

4、SETUP包结构:
[同步域]    [8位包标识PID]    [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]
[0000 0001] [0010 1101]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

/*****************************************数据包结构**********************************************************/
5、DATA0包结构:
[同步域]    [8位包标识PID]    [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]
[0000 0001] [1100 0011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]

6、DATA1包结构:
[同步域]    [8位包标识PID]    [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]
[0000 0001] [0100 1011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]

/*****************************************握手包结构**********************************************************/
7、ACK包结构:
[同步域]    [8位包标识PID]    [EOP]
[0000 0001] [1101 0010]        [D+和D-同时拉低]

8、NAK包结构:
[同步域]    [8位包标识PID]    [EOP]
[0000 0001] [0101 1010]        [D+和D-同时拉低]

9、STALL包结构:
[同步域]    [8位包标识PID]    [EOP]
[0000 0001] [0001 1110]        [D+和D-同时拉低]


1、批量传输:
批量传输使用批量事务传输数据。
批量事务:令牌包阶段、数据包阶段、握手包阶段。

批量输出事务:OUT令牌包--DTAT包--握手包

批量输入事务:IN令牌包---DATA包---握手包

一次正确的批量输入事务:
[同步域]    [IN PID]        [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]                主机发送
[0000 0001] [0110 1001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

[同步域]    [DATA0 PID]        [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]                设备返回
[0000 0001] [1100 0011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]

[同步域]    [ACK PID]        [EOP]                                                                主机返回
[0000 0001] [1101 0010]        [D+和D-同时拉低]

一次正确的批量输出事务:
[同步域]    [OUT PID]        [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]                主机发送
[0000 0001] [1110 0001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

[同步域]    [DATA0 PID]        [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]                主机发送
[0000 0001] [1100 0011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]
    
[同步域]    [ACK PID]        [EOP]                                                                设备返回
[0000 0001] [1101 0010]        [D+和D-同时拉低]


2、中断传输
中断传输是一种保证查询频率的传输,中断端点在端点描述符种要报告它的查询间隔,主机会保证在小于这个时间间隔内安排一次传输。
中断传输使用中断事务。
中断传输和批量传输的结构基本一致
一次正确的中断输入事务:
[同步域]    [IN PID]        [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]                主机发送
[0000 0001] [0110 1001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

[同步域]    [DATA0 PID]        [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]                设备返回
[0000 0001] [1100 0011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]

[同步域]    [ACK PID]        [EOP]                                                                主机返回
[0000 0001] [1101 0010]        [D+和D-同时拉低]

一次正确的中断输出事务:
[同步域]    [OUT PID]        [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]                主机发送
[0000 0001] [1110 0001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

[同步域]    [DATA0 PID]        [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]                主机发送
[0000 0001] [1100 0011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]
    
[同步域]    [ACK PID]        [EOP]                                                                设备返回
[0000 0001] [1101 0010]        [D+和D-同时拉低]


3、等时传输
等时传输(同步传输)用在数据量大、对实时性要求高的场合。

等时传输使用等时事务。
一次正确的等时输入事务:
[同步域]    [IN PID]        [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]                主机发送
[0000 0001] [0110 1001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

[同步域]    [DATA0 PID]        [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]                设备返回
[0000 0001] [1100 0011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]

一次正确的等时输出事务:
[同步域]    [OUT PID]        [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]                主机发送
[0000 0001] [1110 0001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

[同步域]    [DATA0 PID]        [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]                主机发送
[0000 0001] [1100 0011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]


4、控制传输
控制传输分为三个过程:建立过程、数据过程(可选)、状态过程。

建立过程使用建立事务:建立事务是输出数据过程,令牌包使用SETUP令牌包,数据包类型只使用DATA0包,握手包设备只能使用ACK应答

建立过程
一次正确的建立事务:
[同步域]    [SETUP PID]        [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]                主机发送
[0000 0001] [0010 1101]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

[同步域]    [DATA0 PID]        [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]                主机发送
[0000 0001] [1100 0011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]
    
[同步域]    [ACK PID]        [EOP]                                                                设备返回
[0000 0001] [1101 0010]        [D+和D-同时拉低]

数据过程:(可选) --- 数据过程可以包含1笔或多笔数据事务,控制传输的数据事务与批量传输的批量事务是一致的。注意:在数据过程中,所有的数据事务必须是同一个传输方向,
也就是说在控制写过程中,数据过程的所有数据事务都是输出的。一旦数据传输方向发生改变,就会认为进入了状态过程。
数据过程的第一个数据包必须是DATA1,然后每次正缺传输一个数据包后就在DATA0和DATA1之间交替。

控制写数据过程:

[同步域]    [OUT PID]        [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]                主机发送
[0000 0001] [1110 0001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

[同步域]    [DATA1 PID]        [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]                主机发送
[0000 0001] [0100 1011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]
    
[同步域]    [ACK PID]        [EOP]                                                                设备返回
[0000 0001] [1101 0010]        [D+和D-同时拉低]

[同步域]    [OUT PID]        [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]                主机发送
[0000 0001] [1110 0001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

[同步域]    [DATA0 PID]        [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]                主机发送
[0000 0001] [1100 0011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]
    
[同步域]    [ACK PID]        [EOP]                                                                设备返回
[0000 0001] [1101 0010]        [D+和D-同时拉低]
                        。。。。。。。。。。。

控制读数据过程:

[同步域]    [IN PID]        [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]                主机发送
[0000 0001] [1110 0001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

[同步域]    [DATA1 PID]        [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]                设备返回
[0000 0001] [0100 1011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]
    
[同步域]    [ACK PID]        [EOP]                                                                主机发送
[0000 0001] [1101 0010]        [D+和D-同时拉低]

[同步域]    [IN PID]        [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]                主机发送
[0000 0001] [1110 0001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

[同步域]    [DATA0 PID]        [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]                设备返回
[0000 0001] [1100 0011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]
    
[同步域]    [ACK PID]        [EOP]                                                                主机发送
[0000 0001] [1101 0010]        [D+和D-同时拉低]
                        。。。。。。。。。。。


状态过程:(状态过程也是一笔批量事务),它的传输方向与前面的数据阶段相反,
即控制写传输在状态过程使用一个批量输入事务;
控制读传输在状态过程使用一个批量输出事务;
状态过程只能使用DATA1包。


控制写的状态过程:

[同步域]    [IN PID]        [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]                主机发送
[0000 0001] [1110 0001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

[同步域]    [DATA1 PID]        [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]                设备返回
[0000 0001] [0100 1011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]
    
[同步域]    [ACK PID]        [EOP]                                                                主机发送
[0000 0001] [1101 0010]        [D+和D-同时拉低]

控制读的状态过程:

[同步域]    [OUT PID]        [7位地址位]        [4位端点号]        [5位CRC5校验]    [EOP]                主机发送
[0000 0001] [1110 0001]        [A0~A6]            [xxxx]            [x xxxx]        [D+和D-同时拉低]

[同步域]    [DATA1 PID]        [BYTE0]        [BYTE1]        ......    [16位CRC16校验]    [EOP]                主机发送
[0000 0001] [0100 1011]        [d0~d7]        [d0~d7]        ......     [c15~c0]        [D+和D-同时拉低]
    
[同步域]    [ACK PID]        [EOP]                                                                设备返回
[0000 0001] [1101 0010]        [D+和D-同时拉低]

几种控制传输:


控制写:建立过程            数据过程                状态过程
        SETUP            OUT1   OUT0        。。。。。     IN1
        DATA0            DATA1  DATA0    。。。。。    DATA1
    
控制读:建立过程            数据过程                状态过程
        SETUP            IN1        IN0        。。。。。    OUT1
        DATA0            DATA1    DATA0                DATA1
        
无数据
控制写
传输:    建立过程            状态过程
        SETUP                IN1
        DATA0                DATA1
        
        
1、端点类型与传输类型的关系:
一个具体的端点,只能工作在一种传输模式下。通常,把工作在什么模式下的端点,就叫什么端点。例如,控制端点、批量端点等。
端点0是每个USB设备都必须具备的默认控制端点,它一上电就存在并且可用。
设备的各种描述符以及主机发送的一些命令,都是通过端点0传输的。其他端点是可选的,需要根据具体的设备来决定。
非0端点只有在Set Config之后才能使用。


2、传输类型与端点支持的最大包长:
每个端点描述符中都规定了端点所支持的最大数据包长。主机每次发送数据,都不能超过端点的最大包长。
控制传输的端点:低速模式最大包长固定为8字节,高速模式最大包长固定为64字节,而全速模式可在8、16、32、64字节中选择。
等时传输的端点:全速模式最大包长上限为1023字节,高速模式最大包长上限为1024字节,低速模式不支持等时传输。
中断传输的端点:低速模式最大包长上限为8字节,全速模式最大包长上限为64字节,高速模式最大包长上限为1024字节。
批量传输的端点:高速模式固件为512字节,全速模式最大包长可在8、16、32、64字节中选择,低速模式不支持批量传输。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值