USB通信协议深入理解( 二 )


USB通信协议深入理解

文章插图
 
  • 【设备忙时】的输出事务处理

USB通信协议深入理解

文章插图
 
  • 【设备出错】的输出事务处理

USB通信协议深入理解

文章插图
 
2.3 设置(SETUP)事务处理
  • 【正常】的设置事务处理

USB通信协议深入理解

文章插图
 
  • 【设备忙时】的设置事务处理

USB通信协议深入理解

文章插图
 
  • 【设备出错】的设置事务处理

USB通信协议深入理解

文章插图
 
3. USB传输类型在USB的传输中,定义了4种传输类型:
  • 控制传输 (Control Transfer)
  • 中断传输 (Interrupt Transfer)
  • 批量传输 (Bulk Transfer)
  • 同步传输 (Isochronous)
3.1 控制传输 (Control Transfer)控制传输由2~3个阶段组成:
  1. 建立阶段(Setup)
  2. 数据阶段(无数据控制没有此阶段)(DATA)
  3. 状态阶段(Status)
每个阶段都由一次或多次(数据阶段)事务传输组成(Transaction) 。
控制数据由USB系统软件用于配置设备(在枚举时),其它的驱动软件可以选择使用control transfer实现具体的功能,数据传输是不可丢失的 。
3.1.1 建立阶段主机从USB设备获取配置信息,并设置设备的配置值 。建立阶段的数据交换包含了SETUP令牌封包、紧随其后的DATA0数据封包以及ACK握手封包 。它的作用是执行一个设置(概念含糊)的数据交换,并定义此控制传输的内容(即:在Data Stage中IN或OUT的data包个数,及发送方向,在Setup Stage已经被设定) 。
USB通信协议深入理解

文章插图
 
3.1.2 数据阶段根据数据阶段的数据传输的方向,控制传输又可分为3种类型:
  1. 控制读取(读取USB描述符)
  2. 控制写入(配置USB设备)
  3. 无数据控制
数据传输阶段:用来传输主机与设备之间的数据 。
  • 控制读取
是将数据从设备读到主机上,读取的数据USB设备描述符 。该过程如下图的【Control Read】所示 。对每一个数据信息包而言,首先,主机会发送一个IN令牌信息包,表示要读数据进来 。然后,设备将数据通过DATA1/DATA0数据信息包回传给主机 。最后,主机将以下列的方式加以响应:当数据已经正确接收时,主机送出ACK令牌信息包;当主机正在忙碌时,发出NAK握手信息包;当发生了错误时,主机发出STALL握手信息包 。
  • 控制写入
是将数据从主机传到设备上,所传的数据即为对USB设备的配置信息,该过程如下的图【Control Wirte】所示 。对每一个数据信息包而言,主机将会送出一个OUT令牌信息包,表示数据要送出去 。紧接着,主机将数据通过DATA1/DATA0数据信息包传递至设备 。最后,设备将以下列方式加以响应:当数据已经正确接收时,设备送出ACK令牌信息包;当设备正在忙碌时,设备发出NAK握手信息包;当发生了错误时,设备发出STALL握手信息包 。
USB通信协议深入理解

文章插图
 
3.1.3 状态阶段状态阶段:用来表示整个传输的过程已完全结束 。
状态阶段传输的方向必须与数据阶段的方向相反,即原来是IN令牌封包,这个阶段应为OUT令牌封包;反之,原来是OUT令牌封包,这个阶段应为IN令牌封包 。
对于【控制读取】而言,主机会送出OUT令牌封包,其后再跟着0长度的DATA1封包 。而此时,设备也会做出相对应的动作,送ACK握手封包、NAK握手封包或STALL握手封包 。
相对地对于【控制写入】传输,主机会送出IN令牌封包,然后设备送出表示完成状态阶段的0长度的DATA1封包,主机再做出相对应的动作:送ACK握手封包、NAK握手封包或STALL握手封包 。
3.2 批量传输 (Bulk Transfer)用于传输大量数据,要求传输不能出错,但对时间没有要求,适用于打印机、存储设备等 。
批量传输是可靠的传输,需要握手包来表明传输的结果 。若数据量比较大,将采用多次批量事务传输来完成全部数据的传输,传输过程中数据包的PID 按照 DATA0-DATA1-DATA0-…的方式翻转,以保证发送端和接收端的同步 。


推荐阅读