USB tiene varias capas, que se describen en la especificación USB 2.0 . Si está familiarizado con el modelo de red en capas OSI, puede pensarlo así:
- Capa de sesión = Capítulo 10 Hardware y software de host USB (controladores de dispositivo)
- Capa de transporte = Capítulo 9 Marco del dispositivo USB
- Capa de red = Capítulo 8 Capa de protocolo (flujo de bits)
- Capa de enlace de datos = Capítulo 7 Eléctrico (circuito)
- Capa física = Capítulo 6 Mecánico (cable y conector)
Conceptualmente, el USB se basa en flujos de datos, denominados puntos finales , que pueden ser IN (para el host) o OUT (desde el host). Cada dispositivo tiene Endpoint 0, que se usa para control y estado. Un dispositivo puede tener puntos finales adicionales para los datos de la aplicación. Cada punto final se comporta como un búfer FIFO.
Los datos se transfieren en un punto final ya sea en forma masiva (como TCP / IP, garantizado que llegue cada byte y en el orden correcto), o isócrono (como UDP / IP, garantizado que es nuevo pero puede descartar paquetes). Hay un tipo de transferencia " Interrumpir " engañosamente llamado , que en realidad solo es sondeado por el host.
USB 2.0 utiliza un par diferencial para el enlace de datos. No voy a entrar en muchos detalles ya que esto está cubierto por el capítulo 7 de especificaciones de USB 2.0. Generalmente, en el diseño de PCB, tratamos esto como un par diferencial de longitud coincidente, y colocamos las resistencias en serie requeridas por cualquier USB PHY (físico Interfaz) se está utilizando. El periférico USB utiliza una resistencia de alto valor en una de las líneas D + o D- para notificar al host que es un periférico de alta o baja velocidad.
Poco después de que el host USB descubre que hay un dispositivo presente, el host solicita un montón de descriptores del dispositivo. El chip FTDI se encarga de esto detrás de escena. Los descriptos se describen en el Capítulo 9.5 . Estos incluyen dispositivos de descriptores , de configuración de descriptores , Interfaz de descriptores , punto final descriptores , Cadena descriptores , tal vez incluso HID Informe descriptores .
El Descriptor de dispositivo incluye los números USB VID (identificación del proveedor) y PID (identificación del producto). El sistema operativo utiliza este par de números, VID_PID, para determinar qué controlador de dispositivo se utilizará para este dispositivo. Tenga en cuenta que el número VID se emite al ser miembro del foro de implementadores USB, por lo que es un problema si es un inventor individual.
Además, existe el controlador de clase HID (Dispositivo de interfaz humana), que proporciona una entrada algo genérica para teclado / mouse / etc, así como cualquier entrada / salida genérica. Una ventaja de HID es que no requiere proporcionar un controlador de dispositivo personalizado, pero su rendimiento es algo limitado en comparación con un controlador masivo personalizado. Existe otro documento de especificación sobre los descriptores HID; y un documento de la tabla de uso de HID que detalla todos los números de código que describen las diversas funciones disponibles en un dispositivo con interfaz humana dado.
El chip FTDI como la hoja de datos FT220X proporciona el "motor de interfaz en serie" USB (que no debe confundirse con el serial SPI o el serial RS232). Esto se encarga de la mayoría de las cosas de bajo nivel descritas en los capítulos 6, 7 y 8.
FTDI usa una EEPROM (chip en el FT2232H, en chip en el FT220X) para contener un poco de la información que entra en los descriptores. Puede personalizar los valores VID / PID y proporcionar cadenas de descripción personalizadas.