当USB插入USB总线时,USB控制器会自动为该USB设备分配一个数字来标示这个设备。另外,在设备的每个端点都有一个数字来表明这个端点。
USB设备驱动向USB控制器驱动请求的每次传输被称为一个事务(Transaction),事务有四种类型,分别是Bulk Transaction、Control Transaction、Interrupt Transaction和Isochronous Transaction。每次事务都会分解成若干个数据包在USB总线上传输。每次传输必须历经两个或三个部分,第一部分是USB控制器向USB设备发出命令,第二部分是USB控制器和USB设备之间传递读写请求,其方向主要看第一部分的命令是读还是写,第二部分有时候可以没有。第三部分是握手信号。以下针对这四种传输,分别进行讲解。
1.Bulk传输事务
顾名思义,改种事务传输主要是大块的数据,传送这种事务的管道叫做Bulk管道。这种事务传输的时候分为三部分,如图17-10所示。第一部分是Host端发出一个Bulk的令牌请求,如果令牌是IN请求则是从Device到Host的请求,如果是OUT令牌,则是从Host到Device端的请求。
第二部分是传送数据的阶段,根据先前请求的令牌的类型,数据传输有可能是IN方向,也有可能是OUT方向。传输数据的时候用DATA0和DATA1令牌携带着数据交替传送。
第三部分是握手信号。如果数据是IN方向,握手信号应该是Host端发出,如果是OUT方向,握手信号应该是Device端发出。握手信号可以为ACK,表示正常响应,也可以是NAK表示没有正确传送。STALL表示出现主机不可预知的错误。
在第二部分,即传输数据包的时候,数据传送由DATA0和DATA1数据包交替发送。数据传输格式DATA1和DATA0,这两个是重复数据,确保在1数据丢失时0可以补上,不至于数据丢失。
2.控制传输事务
控制传输是负责向USB设置一些控制信息,传送这种事务的管道是控制管道。在每个USB设备中都会有控制管道,也就是说控制管道在USB设备中是必须的。控制传输也分为三个阶段,即令牌阶段、数据传送阶段、握手阶段,如
3.中断传输事务
在USB设备中,有种处理机制类似于PCI中断的机制,这就是中断事务。中断事务的数据量很小,一般用于通知Host某个事件的来临,例如USB鼠标,鼠标移动或者鼠标单击等操作都会通过中断管道来向Host传送事件。在中断事务中,也分为三个阶段,即令牌阶段、数据传输阶段、握手阶段,如图17-13所示。
4.同步传输事务
USB设备中还有一种事务叫同步传输事务,这种事务能保证传输的同步性。例如,在USB摄像头中传输视频数据的时候会采用这种事务,这种事务能保证每秒有固定的传输量,但与Bulk传输不同,它允许有一定的误码率,这样符合视频会议等传输的需求,因为视频会议首先要保证实时性,在一定条件下,允许有一定的误码率。同步传输事务有只有两个阶段,即令牌阶段、数据阶段,因为不关心数据的正确性,故没有握手阶段,如图17-14所示。
USB endpoint 有四种类型,也就分别对应了四种不同的数据传输方式。它们是控制传输
11(Control Transfers),中断传输(Interrupt Data Transfers),批量传输(Bulk Data
Transfers),等时传输(Isochronous Data Transfers)。控制传输用来控制对 USB 设备
不同部分的访问,通常用于配置设备,获取设备信息,发送命令到设备,或者获取设备的状
态报告。总之就是用来传送控制信息的,每个 USB 设备都会有一个 endpoint 0 的控制端
点,内核里的 USB core 使用它在设备插入时进行设备的配置。这么说吧,君士坦丁旁边
有非常信赖的这么一个人,往往通过他来对其它人做些监控迫害什么的,虽然他最后被判了
君士坦丁,但我们的 endpoint 0 不会,它会一直在那里等待着 USB core 发送控制命令。
最不忠诚的往往是人心,不是么。
中断传输用来以一个固定的速率传送少量的数据,USB 键盘和 USB 鼠标使用的就是这种方
式,USB 的触摸屏也是,传输的数据包含了坐标信息。
批量传输用来传输大量的数据,确保没有数据丢失,并不保证在特定的时间内完成。U 盘使
用的就是批量传输,咱们用它备份数据时需要确保数据不能丢,而且也不能指望它能在一个
固定的比较快的时间内拷贝完。
等时传输同样用来传输大量的数据,但并不保证数据是否到达,以稳定的速率发送和接收实
时的信息,对传送延迟非常敏感。显然是用于音频和视频一类的设备,这类设备期望能够有
个比较稳定的数据流,比如你在网上 QQ 视频聊天,肯定希望每分钟传输的图像/声音速率
是比较稳定的,不能说这一分钟对方看到你在向她向你深情表白,可是下一分钟却看见画面
停滞在那里,只能看到你那傻样一动不动,你说这不浪费感情嘛。