本文目的是对Android底层USB通信做辅助理解
1.USB协议层次
USB协议层次从大到小为:Transfer、Transaction、Packet。Packet是基本的传输单元,一个Transaction包含数个Packet,一个Transfer又包含数个Transaction。
2.USB最顶层协议---Transfer
四种
- 控制(Control)传输
- 中断(Interrupt)传输
- 批量(Bulk)传输
- 同步(Isochronous)传输
控制传输: 功能是通过控制管道向USB设置控制信息。控制管道是USB设备中必须拥有的部分。控制管道分为令牌阶段、数据传送阶段、握手阶段三个部分。
中断传输: 传输数据流量很小,主要是用来通知Host事件的发生,如USB键盘按键按下释放等操作,可通过中断通道传送到Host。中断事务也分为令牌阶段、数据传输阶段、握手阶段三部分。
批量传输: 用于传输大流量数据,如U盘等大容量存储器,也有令牌阶段、数据传输阶段、握手阶段三部分。
同步传输: 为了保证传输信息的同步性,通常在USB摄像头传输视频数据时会采用。同步事务能够保证每秒中的固定传输量,能够允许细微的误码存在,保持实时性。由于对数据正确性的要求较低,同步传输事务仅有令牌阶段、数据阶段两个部分
3.Transaction分为:Setup transaction、In transaction、Out transaction
设置事务 Setup transaction: setup packet(H->D)、data packet(H->D)、handshake packet(D->H)
输入事务 In transaction: in packet(H->D)、data packet(D->H)、handshake packet(H->D)
输出事务 Out transaction: out packet(H->D)、data packet(H->D)、handshake packet(D->H)
4.Packet分为: Token packet、Data packet、Handshake packet、Special packet,packet 以包标识字段PID来区分
- Token packet: SETUP packet、OUT packet、IN packet、SOF packet
- Data packet: DATA0 packet、DATA1 packet、DATA2 packet、MDATA packet
- Handshake packet: ACK packet、NAK packet、STALL packet、NYET packet
- Special: PRE packet、ERR packet、SPLIT packet、PING packet
Setup Packet、Data Packet、Handshake Packet、SOF Packet 包标识字段(PID)长度为8bit,由低4bit的类型字段和高4bit的校验字段组成。校验字段是类型字段的反码。
- Setup packet:
- Data packet
- Handshake packet
- SOF packet
PID Types
5.例子
Control Transfer(Get Descriptor)实例
Interrupt Transfer(In Transaction)实例
对原文进行了一些删减,留下需要部分,详细的看原文
顺便放上Android文档链接,方便自己查看哈哈哈哈
Android:tool.oschina.net/uploads/api…
原文链接:blog.csdn.net/killf_123/a…