在上一篇博客里面涉及到USB的四种传输方式,每种传输方式都包括三个阶段,第一个阶段是setup阶段,执行该传输的初始化。另外两个阶段分别是in阶段和out阶段。
每一个阶段都有三种包,令牌包+数据包+握手包
setup事务:
令牌包:主机发送一个PID为setup的包给device,通知设备有setup包到来 (主机=》设备)
数据包:发送8个字节的data0包,为64个字节(主机=》设备)
握手包:设备接收到数据之后向主机发送ACK包(设备到主机)
IN事务:
令牌包: 主机发送一个PID为out的包给device,通知设备有数据发送给主机
数据包:
1.端点正常,向主机发出数据包,DATA0或DATA1
2.设备正忙,发送NAK无效包
3.端点被禁止,发送错误STALL包
握手包:主机正确接收到数据后向设备发送一个ACK包
OUT事务:
令牌包:主机发送一个PID为IN的包给设备,通知设备接收数据
数据包:主机向设备发送数据,DATA0与DATA1交替
握手包:
1.设备端点接收正常,向主机返回ACK
2.设备在忙,发送NAK无效包
3.端点被禁用,发送STALL包