USB信息传输总结.docVIP

  • 4
  • 0
  • 约2.13千字
  • 约 4页
  • 2017-06-07 发布于重庆
  • 举报
USB信息传输总结

USB信息传输 说明 这是关于USB信息传输的说明,总结自《圈圈教你玩USB》以及《基于STM32的USB程序开发笔记》,如有错误之处,在所难免。 传输解析 图-1 如上所示控制传输,当有大量数据不能在一包传完的时候,采用的传输方式是:主机IN令牌包-(设备返回数据包(1)(主机ACK(主机IN令牌包(设备返回数据包(2)( 主机ACK(……主机IN令牌包(设备返回数据包(n)( 主机ACK(主机OUT令牌包(设备返回空数据(主机ACK。这样,所有数据传输完成,注意,最后主机要发个OUT令牌,表示数据已经传输完成。 控制传输的描述 总体步骤是:设置事务(数据事务(状态事务,如下图: 图-2 第一步: 设置事务:首先主机发SETUP令牌包 然后主机发送数据包DATA0 最后由设备响应ACK(握手包) 在设置事务中,当设备程序发生SETUP中断的时候,数据包DATA0已经存储在了相应的接收缓冲区,可以取出数据来。数据包DATA0告诉了设备接下来主机要干什么,设备提前做好准备,下面就是DATA0的8字节解析: 偏移量/字节 域 大小/字节 取值 描述 0 bmRequerstType 1 位图 请求的特性 D7:数据传输方向 0=主机到设备 1=设备到主机 D6-5:请求的类型 0=标准 1=类 2=厂商 3=保留 D4-0:请求的接收者 0=设备 1=接口 2=端点 3=其他 4-31=保留 1 bRequest 1 数值 请求代码 2 wValue 2 数值 该域的意义由具体请求而定 4 wIndex 2 索引或偏移量 该域的意义由具体请求而定 6 wLength 2 字节数 数据过程(如果有)所需要传输的字节数 表-1 USB标准设备请求的数据结构 bRequest Value bRequest Value GET_STATUS 0 GET_CONFIGURATION 8 CLEAR_FEATURE 1 SET_CONFIGURATION 9 SET_FEATURE 3 GET_INTERFACE 10 SET_ADDRESS 5 SET_INTERFACE 11 GET_DESCRIPTOR 6 SYNCH_FRAME 12 SET_DESCRIPTOR 7 表-2 标准请求以及代码 bmRequestType bRequest wValue wIndex wLength 数据过程 CLEAR_FEATURE 特性选择 0 接口号 端点号 0 没有 GET_CONFIGURATION 0 0 1 配置值 GET_DESCRIPTOR 描述符类型和索引 0或者语言ID 描述符的长度 描述符 GET_INTERFACE 0 接口号 1 备用接口号 GET_STATUS 0 0 接口号 端点号 2 设备、接口或者端点状态 SET_ADDRESS 设备地址 0 0 没有 SET_CONFIGURATION 配置值 0 0 没有 SET_DESCRIPTOR 描述符类型和索引 0或者语言ID 描述符的长度 描述符 SET_FEATURE 特性选择 0 接口号 端点号 0 没有 SET_INTERFACE 备用接口号 接口号 0 没有 SYNCH_FRAME 0 端点号 0 帧号 表-3 各种标准请求的结构及需要传输的数据 第二步: 设置事务后,根据设置事务数据的要求,紧接着做数据事务,以图-2为例,数据事务(这里是输入事务,输出事务一样的方式)的步骤是: 首先,主机发送IN令牌 然后设备收到令牌后产生中断,根据设置事务的数据请求,把数据返回给主机 最后主机收到数据后返回ACK 注意:如果数据一包发不完,则主机会继续发送IN令牌,直到数据发完。当最后一包的数据小于允许最大包字节数的时候,则主机认为数据已经传输完成。 第三步: 在设置事务后,主机要主动发起状态事务,以结束这次通信。以图-2为例,状态事务的步骤是: 首先,主机发送OUT令牌 然后,设备在收到OUT令牌后,返回空数据包 最后,主机在收到设备的空数据包后回复ACK结束这次事务,同时也结束了本次控制传输。要输入或者输出其他的信息,则又要按步骤重新开始所有步骤。 注意:状态事务需要注意的是,当数据事务如果是

文档评论(0)

1亿VIP精品文档

相关文档