USB协议精读

1.1.枚举

1.1.1.上电连接过程

1.1.2.设备识别过程

1.1.3.枚举过程

1.1.3.1.获取设备描述符(只关注设备描述符中最大数据包长度)

1.1.3.2.设置设备针对主机的唯一从机地址

1.1.3.3.获取完整设备描述符

1.1.3.4.获取配置描述符

  • 先获取标准配置描述符(主要获取配置描述符集合长度属性根据其获取配置描述符集合)

  • 获取配置描述符集合

    • 标准配置描述符

    • 接口描述符

    • 端点描述符

    • 如为HID设备

      • HID描述符

      • 报告描述符

      • 物理描述符

1.1.3.5.获取字符串描述符

1.2.传输

1.2.1.事务

1.2.1.1.事务的组成

  • 令牌包(以SETUP令牌包为例)

  • 数据包(以控制传输中SETUP设置阶段DATA0为例)

  • 握手包(以ACK为例)同步传输下的事务没有握手包

1.2.1.2.事务分类(以控制传输为例)

  • SETUP事务

  • DATA IN事务

  • DATA OUT事务

1.2.2.传输分类

1.2.2.1.控制传输:

  • 第一阶段:设置阶段(一个SETUP事务)

  • 第二阶段:可选有或没有的数据阶段(0个或者多个IN/OUT事务)

  • 第三阶段:状态阶段(一个IN/OUT事务)

1.2.2.2.同步传输

  • 1个或多个IN/OUT事务

1.2.2.3.批量传输:传输图像

  • 1个或多个IN/OUT事务

1.2.2.4.中断传输:传输IMU数据

  • 1个IN/OUT事务

1.2.3.数据包同步与重传机制

1.2.3.1.正确数据传输同步原理

  • 初始在发送数据之前,假设主机和设备状态都是0。

  • 主机会根据当前状态先发送DATA0类型数据包给设备,当设备正确收到数据包后会对自己的状态进行反转(变为1),并给主机发送应答数据包,当主机正确接收到应答包后会对自己的状态进行反转(变为1)

  • 如果还需要发送数据包,则主机会发送DATA1类型的数据包(根据自己的当前状态为1决定的),当设备收到正确收到数据包后会进行对自己的状态进行反转(变为0),并给主机发送应答数据包,当主机正确接收到应答包后会对自己的状态进行反转(变为0)。

1.2.3.2.数据被破坏的传输原理(重传机制)

  • 初始在发送数据之前,假设主机和设备状态都是0。

  • 机制就是初始在发送数据之前,主机和设备状态都是0,主机会先发送DATA0类型数据包给设备,当设备发现数据存在问题后不会对自己的状态进行切换,并给主机发送非应答数据包,当主机接收到非应答数据包后,不会对自己的状态进行切换。

  • 主机会在适当的时刻对DATA0数据包进行重传(Retry),直到设备接收正常,设备发现数据包正常了会把自己的状态进行反转,并返回应答数据包,主机在收到应答包后会反转自己的状态。

1.2.3.3.应答包故障的传输原理

  • 初始在发送数据之前,假设主机和设备状态都是0。

  • 主机会先发送DATAO类型数据包给设备,当设备正确收到数据包后会进行对自己的状态进行反转为1,并给主机发送应答数据包,但是,但是应答包在链路上出故障了,怎么办?当主机收到一个校验有问题应答包,主机不会对自己的状态进行反转,主机该怎么办?往

  • 主机会在合适的时间对DATA0数据包进行重发,但是当前设备的状态是1,因此设备会忽略该数据包并保持现在的状态,然后设备会给主机重新在发送一次应答包,当主机正确收到设备的应答包后对自己的状态进行反转。

  • 当还需要发送数据包时,主机会根据自己当前的状态(假设为1),会发送DATA1数据包,设备在正确收到DATA1数据包后,会对自己的状态进行反转,并给主机发送应答数据包,当主机正确接收到应答包后会对自己的状态进行反转。文章来源地址https://uudwc.com/A/0rqq9

原文地址:https://blog.csdn.net/Iamsonice/article/details/132223799

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年08月11日 10:37
Flutter:文件上传与下载(下载后预览)
下一篇 2023年08月11日 10:37