Confusión con la información de la hoja de datos de PIC32MX1XX/2xx (fuente de reloj para USB)

Tal vez haya algunos "lobos" experimentados que podrían ayudar a aclarar la confusión sobre las fuentes de reloj internas/externas. Particularmente, me perdí mientras leía el manual de referencia de la familia PIC32, "Sección 6. Osciladores".

En cuanto al hecho, sé que se recomienda el uso de osciladores externos para la estabilidad, precisión y flexibilidad. Sin embargo, estaba tratando de averiguar si estaría bien usando solo el oscilador interno de PIC32MX250F128D , tengo el requisito de establecer comunicación con la PC usando hardware USB interno.

En la impresión inicial parecía que estaría bien, luego comencé a leer con mayor detalle y noté que:

  1. Establece que el oscilador interno no se usa para el funcionamiento normal de USB:

6.3.4 Generación de reloj USB (USBCLK) El USBCLK puede derivarse del oscilador FRC interno de 8 MHz, del POSC de 48 MHz o del PLL de 96 MHz del POSC. Para un funcionamiento normal, el módulo USB requiere un reloj exacto de 48 MHz. Cuando se utiliza PLL de 96 MHz, la salida se divide internamente para obtener un reloj de 48 MHz. La fuente de reloj FRC se utiliza para detectar actividad USB y sacar el módulo USB del modo de suspensión. Una vez que el módulo USB está fuera del modo Suspender, debe usar un reloj de 48 MHz para realizar las transacciones USB. El oscilador FRC interno no se utiliza para el funcionamiento normal del módulo USB.

  1. Otro párrafo establece que se puede usar, aunque no muy claramente:

El oscilador FRC interno de 8 MHz está disponible como fuente de reloj para detectar cualquier actividad USB durante el modo de suspensión USB y sacar el módulo del modo de suspensión. Para habilitar FRC para el uso de USB, el bit UFRCEN (OSCCON<2>) debe establecerse en '1' antes de poner el módulo USB en modo de suspensión.

  1. Luego, desde el diagrama de bloques, podemos ver que para el USB necesitamos una señal de reloj de 48 MHz, sin embargo, el reloj interno es de solo 8 MHz, y no pasa por ningún multiplicador para el bloque USB:Diagrama de bloques del sistema oscilador

En realidad, una vez que escribí esta publicación, se hizo más claro. Todavía tengo preguntas como, si mi objetivo es usar esta MCU como dispositivo USB (clase CDC (para actuar como puerto serie virtual)), es posible que no necesite la velocidad máxima de USB, por lo tanto, puede ser suficiente con usar la fuente de reloj interna de 8MHz? De lo contrario, ¿podríamos concluir que no hay otra salida que usar un oscilador externo según mis requisitos?

Respuestas (1)

De su cita de la hoja de datos:

Para un funcionamiento normal, el módulo USB requiere un reloj exacto de 48 MHz

y

Una vez que el módulo USB está fuera del modo Suspender, debe usar un reloj de 48 MHz para realizar las transacciones USB

Esos prácticamente lo dicen todo. No puede usar el reloj interno de 8 MHz para realizar transacciones USB. El núcleo USB integrado en el PIC requiere un reloj de 48 MHz para funcionar como esclavo USB.

El enlace USB se ejecuta a una velocidad fija: tanto el host como el esclavo deben funcionar con relojes de aproximadamente la misma velocidad para poder funcionar, independientemente de si su rendimiento está utilizando todas las capacidades del enlace. Entonces, solo porque está utilizando CDC, que no requiere mucho rendimiento, aún necesita que su esclavo se ejecute a una frecuencia similar a la del host.

Debe usar un cristal externo para que el dispositivo funcione como esclavo USB.

Gracias, ahora está lo suficientemente claro. Creo que debería leer más sobre USB y su protocolo para obtener una mejor imagen general. ¡Gracias por su tiempo y esfuerzo, ayudó!