usb全接触之usb function----usb传输(2)
简介:本节介绍usb full speed function的四种传输类型。
上节中我们了解到了usb host 与usb function 之间采用的是一种“非对称”的传输,也就是说,无论usb接受数据还是发送数据,都是由usb host首先发起。即传输的第一个packet总是由usb host发出的。这个packet将声明本次即将进行的数据传输方向,数据传输地址和数据传输类型。
1 控制式传输(Control Transfers)
: 或许你已经注重到了,一个usb host端口并不是仅仅支持一个Usb function.如图1,
通过usb hub,一个usb host端口可以连接usb鼠标,usb键盘,Usb写字板......。要连接这么多东西在同一个usb host上,我们通常会有一个基本问题,即usb host如何识别这些被连接在它的端口上的设备呢。正如通常的主从式通讯系统一样,如rs485多机通讯,我们通常是用一个特定的地址标志每一个从设备。对这里的usb,我们采用同样的方法,将为每个挂接在该usb host上的usb function指定一个特定地址,通过这个特定地址来识别每个usb function.看来这将是一个usb function在数据传输之前必须解决的问题--得到它的地址分配。
这个“地址指定”的过程需要usb host通知usb function才能完成,这个交互过程就是一个控制式传输。通过这个“控制式传输”,usb host将指定地址给usb function ,以为即将进行的正式通讯做好预备工作。这里细心的读者可能已经注重到了,既然usb host总要分配地址给usb function才能进行正式的数据传输工作,那么usb host将如何与一个初始时未分配地址的usb function进行交互来分配地址呢。这里,是这样解决的:usb协议保留了一个“通用地址”0,usb host 通过这个地址0来和初始未分配地址的usb function进行通讯,进行一些初始的预备工作,诸如这里的为它非配一个特定地址。后面我们就会了解到,usb除了配置地址外,还有一些其它参数需要事先主从双方达成共识。这些参数也都是通过控制式传输完成的。一个Usb 的控制式传输如图二示:
一个Usb的控制式传输总是分为两个或三个阶段进行传输:setup stage,data stage(视情况而定),status stage。
- 首先是setup stage,联系上节所说的Usb传输模式,usb Host总是先发起第一个packet--这里它
- 首先发起setup,
- 之后发起以data0为起始的setup data,
- 最后usb function回应ack结束一次交互。
- 其次假如有data stage,类似的,还是按照上节说的usb传输模式,
-
- usb host总是先发起第一个Packet--Out(或in),
- 之后usb host(或usb function)发起以data1为起始的payload data,
- 最后Usb fuction(或usb host)回应ack结束一次交互。
- 假如数据未传完,继续data stage,同上继续。
-
- 最后是status stage,类似的,
- usb host首先发起第一个Packet--in(或out),
- 之后usb function(或usb host)发起以data1为起始的Null data(0长度),
- 最后Usb host(或usb function)回应ack结束一次交互。
M开发论坛
如此,整个控制式传输结束。 你或许有疑问,data stage为什么进行了多次而非一次完成?实际上,usb总是将一批大量的数据分成了许多小段来进行传输,称为一个pay load。这样传输的目的是轻易对传输进行控制。既然一次大量的数据总是被分成一段一段来分次传输,那么这里就出现了一个需要事先确定的参数(wMaxPacketSize):即每次这个小段有多大。这个参数如地址指派一样,正式传输之前需要事先达成共识。通过控制式传输,现在我们已经完成了usb function的地址指定等参数的设置工作,下一步可以进行正式的数据传输了。
注:文章图片来源于cypress EZ-USB FX2 Manual Technical Reference ARM



