When a device receives an In command that is addressed to it from the host, data for the host that is stored in the endpoint is sent to the host. The host is considered to be the master in most all cases. One exception is when a device issues a remote wakeup to the host as discussed above. There are time limits for both the host and device to respond to each other. For example, if the host requests data from a device using an In command, the device must send the data back to the host within 500mS, in some cases.
Data transfer involves quite a bit of error-checking and handshaking.
The different types of data packets sent and received use different ways to verify correct data transfer. A logical connection link needs to be set up between the host and a device before a transaction can occur. This connection is referred to as a Pipe. It is set up as soon as possible after a host has recognized a device as being connected. When the host responds to a connect signal from the device, one of the parameters that is sent to the host is the device's required data transfer type and speed.