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

1

Tal vez hay algunos "lobos" con experiencia, que podrían ayudar a aclarar la confusión sobre las fuentes de reloj internas / externas. Particularmente, me perdí al leer 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 intentando averiguar si estaría bien usando solo el oscilador interno de PIC32MX250F128D , tengo el requisito de establecer comunicación con la PC usando un hardware USB interno.

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

  1. Indica que el oscilador interno no se usa para el funcionamiento normal del USB:
  

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

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

El oscilador FRC interno de 8 MHz está disponible como una fuente de reloj para detectar cualquier actividad de USB durante el modo de suspensión de 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 configurarse en "1" antes de poner el módulo USB en el modo Suspender.

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

En realidad, una vez que escribí este post se hizo más claro. Todavía tengo preguntas como: si mi objetivo es usar este MCU como dispositivo USB (clase CDC (para actuar como puerto serie virtual)) Es posible que no necesite la velocidad completa del USB, por lo tanto, puede ser suficiente con usar la fuente del reloj interno de 8MHz? De lo contrario, podríamos llegar a la conclusión de que no hay otra salida excepto el uso de un oscilador externo basado en mis requisitos.

    

1 respuesta

3

De su cotización de la hoja de datos:

  

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

y

  

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

Esas palabras lo dicen todo. No puede utilizar el reloj interno de 8MHz para realizar transacciones USB. El núcleo USB integrado en el PIC requiere un reloj de 48MHz para funcionar como un esclavo USB.

El enlace USB se ejecuta a una velocidad fija: tanto el host como el esclavo deben funcionar desde relojes de aproximadamente la misma velocidad para funcionar, independientemente de si su rendimiento utiliza las capacidades completas del enlace. Así que 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.

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas