nak是默认就发了,
GET_REPORT三个阶段,setup,data,status
当你收到setup时,硬件会答ack,然后置setup标志位。
紧接着主机会进入data阶段,开始发in包,如果此时程序还没有对setup包进行处理并准备数据的话,硬件需要自动应答nak,等程序介入准备好数据并写入data寄存器后,硬件再次收到in包时会把数据发过去,主机收到数据后答复ack。设备收到ack后,会产生tx完成标志,再次呼叫程序介入。(数据阶段的传输事务需要重复多次,直到出现短包为止(有些奇葩主机也有其他判定规则))
当设备和主机都认识到数据传输完成了,主机会发0长度out包,如果设备未准备好收status传输事务,会答nak,准备好了就答ack。
至此,GET_REPORT完成。
|