全部博文(105)
分类: LINUX
2011-10-08 16:47:33
USB数据传输
在USB总线上,所有与USB设备功能单元的数据传输都是由客户软件启动的,而且必须经过主机的 USB系统软件和USB总线接口模块才能将数据发送到USB设备。其传输过程涉及4个软硬件实体:客户软件、USB总线驱动程序、USB主控制器驱动程序和USB主控制器。客户软件向USB设备发送数据的情况,其传输步骤如下。
(l)客户软件把要传输的数据放入数据缓冲区,并向USB总线驱动程序发出IRP,以请求数据传输。
(2)USB总线驱动程序响应客户软件发成的IRP,并将其中的数据转化为一个个具有USB格式的事务处理,然后将其向下传递。
(3)USB主控制器驱动程序负责为这些事务处理建立一系列以帧或小帧为单位的事务处理列表,并保证其不会超过USB的带宽。
(4)USB主控制器负责读取事务处理列表,并将其中的事务处理以信息包为单位发送到USB总线上,且传输速率可以是低速、全速或高速。
(5)USB设备在接收到这些信息包后,SIE自动将其解包并将数据放入指定端点的接收缓冲区内,由芯片固件对其进行处理。
同样,客户软件在接收USB设备发来的数据时也必须经过上述4个软件实体。
管道
USB系统的分层结构中,可认为数据传输是在主机软件和USB设备的各个端点之间直接进行的,它们之间的连接称为管道。管道用于客户软件和USB设备的功能单元之间进行通信,它们是在USB设备的配置过程中建立的,在配置完成后,客户软件就可以使用它们了。管道是对主机和USB设备间通信流的抽象,它表示主机的数据缓冲区和USB设备的端点之间存在着逻辑数据传输,而实际的数据传输是由USB总线接口层来完成的。
管道和USB设备中的端点一一对应。一个USB设备含有多个端点,其和主机进行通信时就使用多少条管道,且端点的类型决定了管道中数据的传输类型,如中断端点对应中断管道,且该管道只能进行中断传输。不论存在着多少条管道,在各个管道中进行的数据传输都是相互独立的。
由0号端口构成的管道称为缺省管道,它是双向的,既支持IN传输也支持OUT传输。在USB设备连接、上电或复位后,USB系统软件就可以使用该管道来和 USB逻辑设备进行配置通信。在USB设备被正确配置后,客户软件就会拥有对该管道的“使用权”,但其“所有权”仍属于USB系统软件,并由它来协调客户软件对该管道的访问。
无论是对USB系统软件还是对客户软件而言,其它非0号端点对应的管道都只有在USB设备被正确配置后才可使用。按管道中所传输数据结构的不同,可将其分为流管道和消息管道两种类型。在流管道中传输的数据不具有USB定义的结构,它可用作块传输、同步传输和中断传输,且通常是单向的。在消息管道中传输的数据具有USB定义的结构,它只能用作控制传输,且通常是双向的,既支撑IN传输又支持OUT传输。