¿Por qué la función de host no se puede implementar con hardware solo para dispositivos? Porque el USB no es simétrico con respecto al host y los dispositivos.
En el lado del dispositivo, la función USB es compatible con el protocolo USB básico llamado "SIE", Serial Interface Engine. Este motor incluye la capacidad del dispositivo para RECIBIR solicitudes de host, comenzando con "canalización predeterminada", y responder correctamente obteniendo datos con respuesta ACK, o enviando datos y esperando que ACK del host complete las transacciones. Debido a las limitaciones de tiempo de USB (tiempo de respuesta 1.7us), la etapa final de la transacción de control no se puede implementar por medios de software, y la mayoría de las partes de los motores SIE del dispositivo están codificados en hardware. Otras funciones de SIE son aceptar la asignación de direcciones y aceptar / habilitar la configuración, lo que concluye la fase de enumeración del protocolo de conexión USB. Luego, el SIE admite IN / OUT básico / otras tuberías, dentro de las mismas restricciones de protocolo. En resumen, la función del dispositivo es RESPONDER.
Debido a estas limitaciones de hardware, es imposible utilizar el motor del dispositivo para la función de host, principalmente porque las funciones del host son totalmente opuestas a las funciones del dispositivo. El manejo del bus sigue muy diferentes máquinas de estado. El host debe GENERAR paquetes de marcos periódicos e INICIAR todas las transacciones. Y luego, proporcione un flujo de datos sin problemas, todo por lo general utilizando el hardware de acceso directo a la memoria. El host debe proporcionar la función de alimentación de puerto y la función de restablecimiento de puerto, que no se encuentra en las implementaciones de dispositivos.
Estas son las razones principales por las que las MCU están diseñadas con hardware de host y controladores de hardware de dispositivo separados.