Verwechslung mit PIC32MX1XX/2xx-Datenblattinformationen (Taktquelle für USB)

Vielleicht gibt es ein paar erfahrene "Wölfe", die helfen könnten, die Verwirrung um interne/externe Clock-Quellen zu beseitigen. Insbesondere habe ich mich beim Lesen des Referenzhandbuchs der PIC32-Familie, "Section 6. Oscillators", verlaufen.

Ich weiß, dass die Verwendung externer Oszillatoren für Stabilität, Genauigkeit und Flexibilität empfohlen wird. Ich habe jedoch versucht herauszufinden, ob es mir gut geht, nur den internen Oszillator von PIC32MX250F128D zu verwenden . Ich muss die Kommunikation mit dem PC über interne USB-Hardware herstellen.

Beim ersten Eindruck sah es so aus, als würde es mir gut gehen, dann fing ich an, ausführlicher zu lesen und bemerkte Folgendes:

  1. Es besagt, dass der interne Oszillator nicht für den normalen USB-Betrieb verwendet wird:

6.3.4 Erzeugung des USB-Takts (USBCLK) Der USBCLK kann vom internen 8-MHz-FRC-Oszillator, vom 48-MHz-POSC oder vom 96-MHz-PLL des POSC abgeleitet werden. Für den normalen Betrieb benötigt das USB-Modul exakt 48 MHz Takt. Bei Verwendung von 96-MHz-PLL wird der Ausgang intern geteilt, um einen 48-MHz-Takt zu erhalten. Die FRC-Taktquelle wird verwendet, um USB-Aktivität zu erkennen und das USB-Modul aus dem Suspend-Modus zu bringen. Sobald das USB-Modul den Suspend-Modus verlassen hat, muss es einen 48-MHz-Takt verwenden, um die USB-Transaktionen durchzuführen. Der interne FRC-Oszillator wird nicht für den normalen Betrieb des USB-Moduls verwendet.

  1. Ein anderer Absatz besagt, dass es verwendet werden kann, auch wenn es nicht sehr klar ist:

Der interne 8-MHz-FRC-Oszillator steht als Taktquelle zur Verfügung, um jede USB-Aktivität während des USB-Suspend-Modus zu erkennen und das Modul aus dem Suspend-Modus zu bringen. Um FRC für die USB-Nutzung zu aktivieren, muss das UFRCEN-Bit (OSCCON<2>) auf „1“ gesetzt werden, bevor das USB-Modul in den Suspend-Modus versetzt wird.

  1. Dann können wir aus dem Blockdiagramm sehen, dass wir für den USB ein Taktsignal von 48 MHz benötigen, der interne Takt jedoch nur 8 MHz beträgt und nicht durch alle Multiplikatoren zum USB-Block geht:Blockdiagramm des Oszillatorsystems

Tatsächlich wurde es klarer, nachdem ich diesen Beitrag geschrieben hatte. Ich habe immer noch Fragen wie: Wenn es mein Ziel ist, diese MCU als USB-Gerät (CDC-Klasse (um als virtuelle serielle Schnittstelle zu fungieren)) zu verwenden, benötige ich möglicherweise nicht die volle USB-Geschwindigkeit, daher reicht es möglicherweise aus, nur die interne Taktquelle zu verwenden von 8 MHz? Könnten wir andernfalls zu dem Schluss kommen, dass es keinen anderen Ausweg gibt, als einen externen Oszillator basierend auf meinen Anforderungen zu verwenden.

Antworten (1)

Aus Ihrem Zitat des Datenblatts:

Für den normalen Betrieb benötigt das USB-Modul exakt 48 MHz Takt

Und

Sobald das USB-Modul den Suspend-Modus verlassen hat, muss es einen 48-MHz-Takt verwenden, um die USB-Transaktionen durchzuführen

Die sagen so ziemlich alles. Sie können den internen 8-MHz-Takt nicht verwenden, um USB-Transaktionen durchzuführen. Der in den PIC eingebaute USB-Kern benötigt einen 48-MHz-Takt, um als USB-Slave zu funktionieren.

Die USB-Verbindung läuft mit fester Geschwindigkeit – sowohl der Host als auch der Slave müssen mit ungefähr gleicher Taktfrequenz laufen, um zu funktionieren, unabhängig davon, ob Ihr Durchsatz die volle Leistungsfähigkeit der Verbindung nutzt. Nur weil Sie CDC verwenden, das nicht viel Durchsatz erfordert, muss Ihr Slave immer noch mit einer ähnlichen Frequenz wie der Host laufen.

Sie müssen einen externen Quarz verwenden, damit das Gerät als USB-Slave arbeiten kann.

Danke, jetzt ist es klar genug. Ich denke, ich sollte mehr über USB und sein Protokoll lesen, um ein besseres Gesamtbild zu bekommen. Danke für deine Zeit und Mühe, es hat geholfen!