usb 包

一个传输由多个事务组成

一个事务由一个或多个包组成

数据在主机和端点之间被传输,逐渐与端点的关联叫pipes。一个usb设备可以有多个管道。

包只能在帧内传输。高速usb总线的帧周期位125us,全速和低速位1ms。帧起始为SOF,帧末尾为EOF。EOF不是一个包,是一种电平状态,EOF期间不允许有数据传输。

包不能被打断或干扰。属于一次事务传输的几个包必须连续,不能跨帧完成,一次传输由一次到多次事务传输构成,可以跨帧完成。

包组成:同步字段SYNC、包标识符字段PID、数据字段、循环冗余校验字段CRC、包结尾字段EOP。

SYNC:全速/低速8位、高速32位

lsb二进制最低有效位 msb二进制最高有效位

PID 数据传输方向

低速设备每个功能最多支持三根管道:端点为零的控制管道+两根额外的管道(一个控制管道和一个中断端点或两个中断端点)。全速和高速最多可以支持16个IN和OUT端点。

帧号达到7FFH后,将归零重新开始计数。在每帧的帧首传输一次SOF包。
DATA0和DATA1被定义位支持数据切换同步

p0-p3,p4-p7是p0-p3的取反,校验PID

PID1~0:01令牌包、11数据包、10握手包、00特殊包

令牌包

由PID组成,指定IN,OUT或SETUP数据包类型以及ADDR和ENDP字段。

一个IN PID定义从设备到主机的数据事务。

OUT和SETUP PID定义从主机到设备的数据事务。

PING PID定义从函数到主机的握手事务。

建立(SETUP)令牌包:只用在控制传输中,和输出令牌包作用一样,也是通知设备将要输出一个数据包,两者区别在于:SETUP令牌包后只使用DATA0数据包,且只能发送到设备的控制端点,并且设备必须要接收,而OUT令牌包没有这些限制。

CRC不包括PID,在3字节的分组字段数据之后,令牌和SOF分组由EOP分隔。

IN OUT SETUP (PING)这三个令牌包的地址字段都是设备地址+端点地址的形式组成。

为拆分事务定义了一个特殊令牌:SPLIT,4字节令牌包。

拆分事务令牌用于支持主机控制器与高速运行的集线器之间的分离事务,
其中全速/低速设备与其下游的一些端口进行通信。

启动拆分事务(SSPLIT)、完全拆分事务(CSPLIT)。

SPLIT特殊标记中的字段指示特定的拆分事务。

高速拆分事务有两部分:start-split 4个字节和complete-split 4个字节。

拆分事务仅定义在主机控制器和集线器之间使用

FS全速 LS低速

SPLIT交易仅来自主机

帧起始数据包
由主机以全速1ms±0.0005ms发出一次,高速总线125us±0.0625us。
所有高速/全速都接受SOF数据包。

数据包

由PID、数据字段、CRC组成
有四种类型的数据包,由不同的PID识别:DATA0,DATA1,DATA2和MDATA。

握手包:

仅由PID组成,握手包用于报告数据事务的状态。
支持流控制的事务类型才能返回握手,握手总是在事务的握手阶段返回。

握手包四种类型:

ACK: 表示在数据字段上没有比特填充或CRC错误的情况下接收到数据包。对于IN事务,它将由host发出;对于OUT、SETUP和PING事务,它将由device发出。

NAK: 在数据阶段,对于IN事务,它将由device发出;在握手阶段,对于OUT和PING事务,它也将由device发出;host从不发送NAK包

STALL由函数返回,相应IN令牌或在OUT数据阶段之后响应PING事务。STALL表示函数无法传输或接收数据,或者不支持管道请求。

NYET是一种高速握手,由高速端点返回。NYET也可以由集线器返回以响应拆分事务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值