Comprensión de los requisitos para USB 2.0 de alta velocidad

Estoy un poco confundido acerca de los requisitos de USB 2.0 de alta velocidad.

USB 2.0. la tasa de transferencia máxima de alta velocidad es de 480 Mbit/s. Entonces, según tengo entendido, para utilizar completamente esta velocidad de datos, se debe usar IC (uC o FPGA) con una frecuencia de al menos 480 MHz.

Pero, por ejemplo, el microcontrolador de la serie STM32 F4 proporciona soporte USB 2.0 de alta velocidad, aunque la frecuencia máxima en la que se ejecutan es de 180 MHz.
También Atmel SAM3U admite USB de alta velocidad, a pesar de la frecuencia máxima absoluta de 192 MHz.
¿Como es eso?

Para Atmel noté que tienen un reloj adicional de 480 MHz solo para USB. Esto es aún más confuso, ya que si el microcontrolador solo tiene capacidad para 192 MHz, ¿cómo debería comunicarse con el periférico USB interno que funciona en 480 MHz?

Para STM32 también es raro, en su software CubeMX parece que ejecutan USB desde un reloj de 48 MHz. Buscando hoja de datos, la única mención que encontré fue

Bit 15 PHYLPCS:
PHY Selección de reloj de baja potencia Este bit selecciona el modo PHY de 480 MHz o 48 MHz (baja potencia). En los modos FS y LS, el PHY generalmente puede funcionar con un reloj de 48 MHz para ahorrar energía.
0: reloj PLL interno de 480 MHz
1: reloj externo de 48 MHz
En el modo de 480 MHz, la interfaz UTMI funciona a 60 o 30 MHz, dependiendo de si se selecciona el ancho de datos de 8 o 16 bits. En el modo de 48 MHz, la interfaz UTMI funciona a 48 MHz en los modos FS y LS.

Así que supongo que usa un reloj de 48 MHz para generar 480 MHz a través de PLL. Pero, de nuevo, si el microcontrolador solo puede llegar a 180 MHz, ¿cuál es el punto de USB de 480 MHz?

Los FPGA son aún más confusos (muchos se ejecutan por debajo de 480 MHz), pero aún no he investigado mucho sobre FPGA, por lo que no preguntaré nada (pero si puede dar algún consejo / educar sobre FPGA - de nada, estoy interesado).

La pregunta es: si usamos un microcontrolador de 180 MHz y queremos transferir datos con un periférico USB de 480 MHz, ¿cómo coincide con la frecuencia? ¿Cuál es el proceso?

Los procesadores manejan más de un bit a la vez.
No mezcle el reloj del procesador y el reloj del transceptor.
OK, la respuesta de Ali Chen lo deja claro.
También tenga en cuenta que el procesamiento de datos no siempre lo realiza la CPU, hay DMA y otro personal. Un ejemplo es que un controlador de unidad flash USB3.0 solo contiene una CPU 8051 y aún puede manejar una velocidad de 5 Gbps.

Respuestas (1)

Tenga en cuenta que el USB es de 480 M bits por segundo, mientras que los ups tienen sus datos generalmente de 8 o 32 bits de ancho. Por lo tanto, la tasa de transferencia de datos del sistema se reduce a 60MHz o 15Mhz solamente. Los controladores USB utilizan el acceso de hardware a la memoria uP (también conocido como acceso directo a la memoria o "masterización de bus") para transferir bloques de datos entre la memoria del sistema y USB PHY (transceptor de capa física). Las transferencias se realizan en formato paralelo de 8 o 16 bits, y el PHY realiza la conversión de paralelo a serie. El sistema generalmente tiene muchos búferes de "elasticidad" (FIFO) para proporcionar paquetes USB coherentes en pleno acuerdo con las velocidades de datos especificadas.

La velocidad a la que un sistema puede preparar los búferes de memoria de lectura/escritura depende del rendimiento general del procesador, por lo que es posible que los procesadores de bajo rendimiento no alcancen el máximo rendimiento USB.

¿Estoy entendiendo correctamente: ponemos 32 bits en algún registro USB y USB PHY luego los envía uno por uno? Pero también necesitamos hacer coincidir los ciclos, por lo que cuando se envía el bit 32, uC debe colocar los siguientes 32 bits en el registro. Entonces necesitamos escribir en ese registro a un reloj de 15 MHz para mantener la estabilidad. ¿Lo conseguí?
No, es más complicado. El sistema prepara una lista vinculada de bloques con los datos que desea transferir e inicia la operación en el controlador USB. El controlador USB lee la lista automáticamente y comunica bloques de datos completos a PHY, y realiza todo el protocolo USB necesario (formando tokens de solicitud y respondiendo a/con ACk, etc.)
Creo que ahora lo entiendo mejor, gracias. Acepté la respuesta, investigaré más a fondo por mi cuenta. Si alguien quiere agregar algo, siéntase libre, lo votaré.
Que yo sepa, todos los UP modernos con función de host USB se adhieren a las especificaciones Intel EHCI, intel.com/content/dam/www/public/us/en/documents/… . Las implementaciones de dispositivos pueden diferir.
Solo para agregar algunas notas, 480mbps, deben dividirse por 10 (ya que los datos pasan por un bloque de 8b/10b en TX y 10b/8b en el lado de RX), lo que da el ancho de banda de datos máximo a 48 MByte/segundo, que es aproximadamente 11 millones de acceso por segundo para un procesador de 32 bits.
@FarhadA, para ser precisos, la capa física USB 2.0 no usa codificación 8b/10b, usa NRZI con relleno de bits. Significa que en el peor de los casos de todos los datos "11111...", el patrón agregará un bit sobre cada seis "1", por lo que la cadena de bits podría alargarse en 7/6 = 17%, y mucho menos en promedio. Con respecto al ancho de banda de datos real en USB 2.0, consulte esta publicación: electronics.stackexchange.com/a/363560/117785