虽然USB定义了数据在总线上传输的基本单位是包,但是我们还不能随意地使用包来传输数据。必须按照一定的关系把这些不同的包组织成事务(Transaction)才能传输数据
一、USB事务
那么事务是什么呢?事务通常由两三个包组成:令牌包,数据包 和握手包。
- 令牌包用来启动一个事务,总是由主机发送。
- 数据包传送数据,可以从主机到设备,也可以从设备到主机,方向由令牌包决定。
- 握手包的发送者通常为数据接收者,当数据接收正确后,发送握手包。设备也可以用NAK握手来决定数据还未准备好。
USB协议规定了4种传输类型:批量传输、等时传输、中断传输和控制传输。其中批量传输、等时传输和中断传输每传输一次数据都是一个事务;控制传输包括三个过程,建立过程和状态过程分别是一个事务,数据过程则可能包含多个事务。
二、批量传输
批量传输是使用批量事务(Bulk Transactions)来传输数据。一次批量事务有三个阶段:令牌包阶段,数据包阶段和握手包阶段。批量传输分为批量读和批量写。批量读使用批量输入事务,霹雳啊写使用批量输出事务。
批量传输没有规定数据包中数据的意义和结构,具体的数据结构要由设备自己定义。批量传输通常在数据量大、对数据的实时性要求不高的场合,例如USB打印机、扫描仪、大容量存储设备等。
首先介绍批量输出事务。主机发出一个OUT令牌包,这个令牌中包含了设备地址、端点地址。然后再发送一个DATA包,这时地址和端点匹配的设备就会手下这个数据包。然后主机切换到接收模式,等待设备返回握手包。设备解码令牌包、数据包都准确