看了书按自己对usb协议的理解写的,不一定正确!
Usb控制传输:
每次通讯分为三个阶段:设置阶段,数据阶段,状态阶段。
设置阶段:(SYNC-SETUP-ADDR-ENDP-CYC5)-(SYNC-DATA0-8字节SETUP数据-CRC16)-(SYNC-ACK)
注:()内表示一个包,第一个包为令牌包,由主机(HOST)发出。第二个包为数据包,可以是读取设备描述(DECIVE发出),此时DECEIVE与HOST第一次连接令牌包内的ADDR=0,ENDP=0,只读取设备描述的前八个字节;也可以是设置设备新地址(HOST发出)。最后一个包为握手包,当读取设备描述时由HOST发出,当是设置设备新地址时由DECEIVE发出。
数据阶段:(SYNC-IN[OUT]-ADDR-ENDP-CRC5)-(SYNC-DATA1-传输的数据-CRC16)-(SYNC-ACK)
第一个包是令牌包,确定数据传输的方向(IN或者OUT),第二个为数据包,第三个为握手包。在数据阶段可以以多个(令牌包-数据包-握手包)的形式传送多个数据,但是在令牌包内的PID必须全为IN或者OUT,当令牌包内的PID变为OUT或者IN的时候进入状态阶段。
状态阶段:
(SYNC-OUT[IN]-ADDR-END