PIC18F4550 USB-Modul: Funktionen und Konfiguration

Gesendet von Javi und eingeordnet in Elektronik

Geschrieben am in Deutsch mit einer Größe von 34,72 KB

USB-Modul Funktionen (Features)

  • Übertragungsrate: Unterstützt Low Speed (1,5 Mbit/s) oder Full Speed (12 Mbit/s).
  • Unterstützung von Interrupts: Jedes Mal, wenn Daten über den Bus übertragen oder empfangen werden, wird ein Interrupt erzeugt. Dieser erfordert eine Routinepflege durch den PIC, um alle Aspekte der USB-Spezifikation auf niedriger Ebene zu verwalten. Für die Hauptanwendung auf dem Mikrocontroller ist die Protokollverarbeitung transparent.
  • Endpunkte: Ermöglicht die Nutzung von bis zu 32 Endpunkten (16 bidirektionale Wege), wobei in der Regel nur 3 verwendet werden (Endpunkt 0, 1 und 2). Ein Endpunkt ist ein Puffer, der Daten im Gerät speichert. Jeder Endpunkt hat eine eindeutige Kennung, die einem bestimmten Zweck und einer Datenflussrichtung (IN/OUT) zugewiesen wird. Alle Geräte müssen Endpunkt 0 besitzen, der für die Konfiguration verwendet wird.
  • 1 KByte Dual-Access-RAM: Die Bänke 4 bis 7 des Datenspeichers sind einem speziellen Dual-Port-RAM zugeordnet. Wenn das USB-Modul deaktiviert ist, werden die GPRs (General Purpose Registers) in diesen Bänken wie jeder andere Datenspeicher verwendet. Wenn das USB-Modul aktiviert ist, werden diese Speicherbänke als Puffer-RAM für den USB-Betrieb zugewiesen. Dieser Bereich wird zwischen dem Mikrocontroller-Kern und der Serial Interface Engine (SIE) geteilt und dient zur direkten Datenübertragung zwischen beiden.
  • SIE (Serial Interface Engine): Die SIE ist verantwortlich für die Erzeugung der CRC, die Synchronisation der Signale D+ und D- und die reibungslose Kommunikation zwischen dem USB-Modul und dem PIC. Das USB-Modul kann entweder direkt über den internen Transceiver an die USB-Schnittstelle angeschlossen werden oder über einen externen Transceiver.

Einstellungen

USBEN Bit (UCON Register)

Das USBEN-Bit ist ein wichtiges Konfigurationsbit. Es aktiviert oder deaktiviert das USB-Modul und ignoriert alle Kontroll- und Status-Bits, wenn es auf Null gesetzt ist. Dieses Bit aktiviert auch den internen Spannungsregler des Chips und verbindet die Pull-up-Widerstände (falls erlaubt). Über das USBEN-Bit kann die Software die USB-Verbindung herstellen oder trennen. Dieses Bit befindet sich im UCON-Register.

Einstellung der Taktfrequenz

Für die USB-Kommunikation ist die Konfiguration der Taktfrequenz des PIC ein wesentlicher Bestandteil. Je nachdem, ob wir das Modul im Full-Speed-Modus (12 Mbit/s) oder Low-Speed-Modus (1,5 Mbit/s) betreiben, benötigt das Modul eine Taktfrequenz von 48 MHz oder 6 MHz.

In diesem Beispiel werden die Einstellungen für USB 2.0 (Full Speed) mit einem 4-MHz-Quarzoszillator am PIC verwendet.

Z

Beispielhafte Takteinstellungen (4 MHz Quarz)

  • USBDIV = 1: Der Takt durchläuft den PLL-Prescaler.
  • PLL1: Bei einer FOSC von 4 MHz wird die Ausgabe des PLLDIV-Multiplexers auf 4 MHz gehalten.
  • CPUDIV1: Beibehaltung der 4 MHz für den Systemtakt.

Wie Sie sehen, schließen wir unseren Quarz an OSC1 und OSC2 mit 4 MHz an. Es könnten jedoch auch 8 MHz, 12 MHz, 16 MHz, 20 MHz, 24 MHz, 40 MHz oder 48 MHz verwendet werden, die mit Windows kompatibel sind. Beachten Sie, dass dieser Quarz zur Erzeugung der gewünschten 48 MHz für USB 2.0 und des Takts für den PIC dient. Der PIC-Takt kann, je nach Konfiguration, derselbe sein oder nicht. Das bedeutet, dass der USB-Takt 48 MHz betragen kann, während das Programm im PIC beispielsweise mit 12 MHz läuft.

Der primäre Oszillator (Schmitt-Trigger) liefert drei parallele Leitungen, die zu verschiedenen Modulen mit unterschiedlichen Möglichkeiten führen.

Die drei Taktleitungen

  1. Erste Leitung (Direkte Injektion): Diese Leitung geht direkt zum Schalter. Wenn USBDIV Null ist, wird die ursprüngliche Grundfrequenz des Quarzes direkt in das USB-Modul eingespeist, vorausgesetzt, das FSEN-Bit ist ebenfalls auf 1 gesetzt. Dieser Schalter wählt zwischen dem primären Takt, der PLL oder der CPU. Die Option der direkten Injektion der Quarzfrequenz ist nur möglich, wenn ein 48-MHz-Quarz verwendet wird, da dies die erforderliche Frequenz für USB ist. Alle anderen Quarze müssen verarbeitet werden, um die erforderlichen 48 MHz zu erreichen.
  2. Zweite Leitung (Über PLL): Diese Leitung durchläuft einen PLL-Prescaler (Frequenzteiler). Die FOSC kann durch 1, 2, 3, 4, 5, 6, 10 oder 12 geteilt werden. Mit dem PLLDIV-Multiplexer wählen wir den gewünschten Teiler. Wenn unser Quarz 4 MHz beträgt und wir PLLDIV auf 000 setzen, wird der Wert durch 1 geteilt, sodass wir 4 MHz am Ausgang des MUX erhalten. Dieser MUX-Ausgang wird verwendet, um die 96-MHz-PLL zu speisen. Wenn wir 4 MHz einspeisen, erzeugt die PLL 96 MHz. Da wir für USB 48 MHz benötigen (die Hälfte von 96 MHz), verwenden wir sofort einen Teiler von 2. Dies ist die zweite Möglichkeit, bei der wir USBDIV auf 1 setzen, um das Signal der PLL zu verwenden.
  3. Dritte Leitung: Der Rest der Schaltung ist mit der Konfiguration und Zuordnung der Taktfrequenz für die ALU verbunden.

Transceiver und Spannungsregler

Interner Transceiver

Die USB-Peripherie verfügt über einen internen Low-Speed-Transceiver, der mit der SIE verbunden ist. Diese Funktion ist nützlich für kostengünstigere Anwendungen. Das UTRDIS-Bit (im UCFG-Register) steuert den Transceiver. Standardmäßig ist der interne Transceiver aktiviert (UTRDIS = 0).

Externer Transceiver

Dieses Modul bietet Unterstützung für die Verwendung eines externen Transceivers. Externe Transceiver werden in Anwendungen eingesetzt, bei denen die physikalischen Bedingungen eine räumliche Trennung des Transceivers von der SIE erfordern. Transaktionen mit einem externen Transceiver sind erlaubt, wenn das UTRDIS-Bit = 1 gesetzt ist.

Interner 3,3 V Regler

Der PIC18F4550 verfügt über einen eingebauten 3,3 V Regler, der den internen Transceiver versorgt und eine Quelle für die internen Pull-up-Widerstände sowie für externe 5V-Anwendungen bereitstellt. Für einen stabilen Betrieb benötigt der Regler einen externen Kondensator von 220 nF (± 20 %). Der Regler ist standardmäßig aktiviert und kann über das Konfigurations-Bit VREG (ON/OFF) deaktiviert werden. Wenn er aktiviert ist, ist die Spannung am VUSB-Pin sichtbar. Wenn der Regler deaktiviert ist, muss eine externe 3,3 V Quelle an den VUSB-Pin angeschlossen werden, um den internen Transceiver zu versorgen.

Die USB-Spezifikationen verlangen 3,3 V in der Kommunikation, während der Rest des Chips mit einer höheren Spannung betrieben werden kann. Daher ist die Energiequelle des Transceivers eine separate Quelle (VUSB).

Bus-Geschwindigkeit und Pull-Up Widerstände

Das Modul kann im Full-Speed-Modus (12 Mbit/s) oder Low-Speed-Modus (1,5 Mbit/s) betrieben werden. Das UCFG-Register ist für die Konfiguration der Pull-up-Widerstände verantwortlich. Die internen oder externen Pull-up-Widerstände sind so konzipiert, dass sie die Anforderungen für Low Speed und Full Speed erfüllen.

Um den Full-Speed-Modus (USB 2.0) zu betreiben, muss das FSEN-Bit im UCFG-Register aktiviert werden. Sobald FSEN aktiviert ist, wird der Pull-up-Widerstand am D+-Pin mit Strom versorgt. Dies ermöglicht es dem Host, das Peripheriegerät als Full-Speed-Gerät zu erkennen.

Im Low-Speed-Modus muss das FSEN-Bit deaktiviert werden. Der Pull-up-Widerstand, der dann versorgt wird, liegt am D--Pin. Dies führt zur automatischen Erkennung des Low-Speed-Modus.

Wichtige Bits im UCFG-Register

FSEN (Full-Speed Enable)

  • 1: Full-Speed-Gerät und Pull-up an D+ (Benötigt 48 MHz).
  • 0: Low-Speed-Gerät und Pull-up an D- (Benötigt 6 MHz).

UPUEN (Pull-Up Enable)

  • 1: Pull-up-Widerstände des Chips aktiviert.
  • 0: Pull-up-Widerstände des Chips deaktiviert.

Die USB-Geschwindigkeit, Übertragung und Pull-up-Widerstände dürfen nur während der Aktivierung des Moduls konfiguriert werden. Diese Einstellungen sollten nicht geändert werden, während das Modul in Betrieb ist.

USB-Interrupts

Der PIC18F4550 verfügt über mehrere Interrupt-Quellen und ein Prioritätssystem. Jeder Interrupt-Quelle kann eine hohe oder niedrige Priorität zugewiesen werden. Der Vektor für hohe Priorität liegt bei 000008h und der Vektor für niedrige Priorität bei 000018h. Jede Interrupt-Quelle wird durch drei Bits gesteuert:

  • Das Flag-Bit, das anzeigt, dass ein Interrupt aufgetreten ist.
  • Das Enable-Bit, um den Interrupt zu aktivieren.
  • Das Prioritäts-Bit, um hohe oder niedrige Priorität zuzuweisen.

PIR2 Register (Interrupt Flag)

PIR2 enthält das Flag für den USB-Interrupt.

BIT 7 | BIT 6 | BIT 5 | BIT 4 | BIT 3 | BIT 2 | BIT 1 | BIT 0
OSCIF | CMIF | USBIF | EEIF | BCLIF | HLVIF | TMR3IF | CCP2IF

USBIF (USB Interrupt Flag):

  • 1: Das USB-Modul hat einen Interrupt ausgelöst (muss per Software gelöscht werden).
  • 0: Das USB-Modul erfordert keinen Interrupt.

PIE2 Register (Interrupt Enable)

PIE2 enthält das Enable-Bit für den USB-Interrupt.

BIT 7 | BIT 6 | BIT 5 | BIT 4 | BIT 3 | BIT 2 | BIT 1 | BIT 0
CMIE | OSCIE | USBI | EEIE | BCLIE | HLVIE | TMR3IE | CCP2IE

USBI (USB Interrupt Enable):

  • 1: Interrupt aktiviert.
  • 0: Interrupt deaktiviert.

IPR2 Register (Interrupt Priority)

IPR2 enthält das Prioritäts-Bit für den USB-Interrupt.

BIT 7 | BIT 6 | BIT 5 | BIT 4 | BIT 3 | BIT 2 | BIT 1 | BIT 0
CMIP | OSCIP | USBIP | EEIP | BCLIP | HLVIP | TMR3IP | CCP2IP

USBIP (USB Interrupt Priority):

  • 1: Hohe Priorität.
  • 0: Niedrige Priorität.

Hinweis: Sobald ein Interrupt-Flag gesetzt ist, muss es durch Schreiben einer '0' per Software gelöscht werden.

Steuerung der USB-Endpunkte

Alle USB-Geräte bestehen aus einer Reihe von Endpunkten und erhalten eine eindeutige Adresse vom System. Ein Endpunkt ist ein Puffer, der Daten innerhalb des Gerätes speichert. Jeder Endpunkt hat eine eindeutige Kennung, die einem bestimmten Zweck und einer Datenflussrichtung (IN, OUT) zugewiesen wird. Alle Geräte müssen Endpunkt 0 besitzen, der für die Konfiguration verwendet wird. Die logischen Verbindungen zwischen den Endpunkten eines Gerätes und dem Host werden als Pipes bezeichnet. Pipes ermöglichen die Datenübertragung zwischen der Host-Software und dem Geräte-Endpunkt. Jede Pipe wird durch den Diensttyp, die Endpunktnummer, die Paketgröße, die Adresse usw. definiert.

Es gibt vier verschiedene Arten von Endpunkten, die jeweils für einen bestimmten Übertragungstyp verwendet werden:

  • Control (Steuerung)
  • Bulk (Massenübertragung)
  • Isochronous (Isochron)
  • Interrupt (Unterbrechung)

Endpunkt-Kontrollregister (UEPn)

Jeder der 16 möglichen bidirektionalen Endpunkte im PIC18F4550 verfügt über ein separates Kontrollregister, UEPn ("n" steht für die Endpunktnummer). Jedes Register enthält die gleichen Kontroll-Bits.

Wichtige Kontroll-Bits

  • EPHSHK (UEPn): Steuert das Handshake-Protokoll der Endpunkte. Die Aktivierung dieses Bits ermöglicht das USB-Handshake-Protokoll. Normalerweise ist dieses Bit immer gesetzt, außer bei der Verwendung von isochronen Endpunkten.
  • EPCONDIS (UEPn): Wird verwendet, um das USB-Steuerungssystem (SETUP-Transaktionen) für den Endpunkt zu aktivieren oder zu deaktivieren. Das Löschen dieses Bits erlaubt SETUP-Transaktionen.
  • EPINEN (UEPn) und EPOUTEN (UEPn): Diese Bits müssen aktiviert sein, um IN- (Eingangs-) und OUT- (Ausgangs-) Transaktionen zu ermöglichen. Für Endpunkt 0 sollten diese Bits gemäß den USB-Spezifikationen immer gelöscht sein, da Endpunkt 0 als Standard-Control-Endpunkt definiert ist.

Verwandte Einträge: