USB通信协议理解笔记

 USB接口是有协议的传输,业务层的数据不能直接放到总线上传输,需要封包后传输。而且通信方式总是主机发起,设备应答,设备不能主动传输数据。

包是USB传输的基本单元,其结构由四部分组成:SOP、SYNC、Packet Content、EOP。(个人理解:有始有终,由发送方一次性驱动。发送方可以是主机,也可以是设备。)

其实,SOP就是SYNC的第一位,从下图可以很直观的看出来。之所以单独提出来,是因为其有特定功能:通知接收端口——数据分组开始传输。


Packet Content由 PID域、地址域、端点域、数据域、帧号域、CRC域 组成。

 其中 PID域 是所有Packet Content必有的域,且位于起始位置。Packet Content剩余部分根据PID不同而有所不同。

USB发送顺序:同步域按MSb到LSb顺序发送;Packet Content部分,以域为单元,先定义的单元先发送,单元内按LSb到MSb顺序发送,对于数据域,低地址字节先发送,字节内按LSb到MSb顺序发送。

PID定义如下:

PID域的低四位为PID值,高四位为PID按位取反的校验位,如下图所示:

常用到的包就以下8个:

 
事务:一次完整的基本数据传输交互。

事务是不能被穿插打断的。穿插是指事务中间不能出现非本事务的包;打断是指事务不能跨帧,如果事务不足以完整安排到当前可用帧,则必须将其全部安排到下一个可用帧。

事务通常由三个包组成:令牌包、数据包、握手包。

事务总是以令牌包开始,所以令牌包的类型决定事务的类型,因此事务主要有如下三种:

SETUP事务——向设备发送控制命令;


IN事务——从设备读取数据;

OUT事务——向设备发送数据;


SETUP事务中的数据包必须使用DATA0,IN事务及OUT事务的数据包使用DATA0还是DATA1,跟事务在传输中的序列有关,具体参看传输相关说明。 

由于数据包长度有限,过多的数据会分成多个事务来处理。

USB协议对SETUP事务的数据包内容,定义了一个8字节的标准请求:

以下标准请求是所有设备必须支持的:

USB协议定义了四种传输:控制传输、中断传输、同步传输、批量传输。

其中控制传输是所有设备必须支持的传输。

控制传输分为三种类型:控制写、控制读、无数据控制;

传输过程分为三个阶段:建立阶段、数据阶段(可选)、状态阶段,每个阶段由一个或多个事务组成,事务的数据包需要在DATA0与DATA1之间翻转,具体参看下图:

注意:状态阶段,事务的数据包不能省略,但该数据包的数据域长度为0。


所有USB设备在连接之初,必须经过枚举过程,以便主机了解连接的是什么设备,并加载对应驱动程序,进行后续一系列的数据通信。

枚举过程如下:

1、检测到J状态,等待100ms设备电气特性稳定。

2、执行复位至少10ms,以便设备能检测到;再驱动总线空闲10ms,以便设备复位完成。

3、获取设备描述符(缺省地址)。

4、第二次复位(可选)。

5、分配地址(后续都是通过新地址通信)。

6、再次获取设备描述符。

7、获取配置描述符集合。

8、获取字符串描述符(可选)。

9、选择配置。


最后上一张逻辑分析仪抓取的波形及解码图,以便对USB通信有一个直观的感受。

图中包括一次完整的【控制传输】过程,该控制传输处于设备枚举时的两次复位之间,主机通过此传输获取设备描述符。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值