Heim >häufiges Problem >Was macht die GPIO-Schnittstelle?

Was macht die GPIO-Schnittstelle?

WBOY
WBOYOriginal
2022-08-26 11:34:3439203Durchsuche

Die GPIO-Schnittstelle wird für die Dateninteraktion mit Hardware verwendet. GPIO ist die Abkürzung für „General Purpose I/O Ports“, was bedeutet, dass die Pins für allgemeine Zwecke von Benutzern unter Programmsteuerung verwendet werden können Über die Schnittstelle können High- und Low-Pegel ausgegeben bzw. abgelesen werden, ob der Zustand des Pins High oder Low ist.

Was macht die GPIO-Schnittstelle?

Die Betriebsumgebung dieses Tutorials: Windows 10-System, DELL G3-Computer.

Wozu dient die GPIO-Schnittstelle?

GPIO, die Abkürzung für General Input und Output, hat ähnliche Funktionen wie P0-P3 von 8051. Seine Pins können vom Benutzer durch Programmsteuerung frei verwendet werden als allgemeiner Eingang (GPI) basierend auf praktischen Überlegungen) oder allgemeiner Ausgang (GPO) oder allgemeiner Eingang und Ausgang (GPIO), wie z. B. CLK-Generator, Chip-Auswahl usw.

GPIO (Allzweck-E/A-Ports). ) bedeutet allgemeine Ein-/Ausgangsports, es handelt sich um einen Pin, über den man hohe und niedrige Pegel ausgeben oder den Status des Pins ablesen kann – egal, ob es sich um einen hohen oder einen niedrigen Pegel handelt.

GPIO-Port eins ist ein wichtiges Konzept. Benutzer können über den GPIO-Port mit Hardware interagieren, um Daten zu interagieren (z. B. UART), die Hardware-Funktion zu steuern (z. B. LED, Summer usw.) und Hardware-Betriebsstatussignale zu lesen (z. B Interrupt-Signale) )warten. GPIO-Ports sind weit verbreitet.

So verwenden Sie die GPIO-Schnittstelle

Um GPIO zu verwenden, muss das System zunächst einen GPIO zuweisen und gpio_request() verwenden, um dem System einen GPIO zuzuweisen.

Als nächstes müssen Sie die Richtung des GPIO markieren, normalerweise, wenn Sie GPIO zum Erstellen eines Plattformgeräts verwenden (befindet sich im Setup-Code des Boards):

  /* set as input or output, returning 0 or negative errno */
  int gpio_direction_input(unsigned gpio);
  int gpio_direction_output(unsigned gpio, int value);

 Geben Sie 0 zurück, um einen Erfolg anzuzeigen, oder einen negativen Fehlercode „Errno“. . Dies sollte überprüft werden, da Get/Set-Aufrufe keine Fehler zurückgeben und es zu Fehlkonfigurationen kommen kann. Sie sollten diese Aufrufe im Allgemeinen in einem Thread-Kontext verwenden. Für Spinlock-sicheres GPIO ist es jedoch auch möglich, es vor der Aktivierung des Taskings als frühen Single-Board-Build zu verwenden.

 Für den Ausgabe-GPIO liefert der Wertparameter den anfänglichen Ausgabewert. Dies hilft, Signalstörungen während des Systemstarts zu vermeiden.

 Um mit der frühen GPIO-Schnittstelle kompatibel zu sein, erfordert das Festlegen einer GPIO-Richtung implizit die Beantragung von GPIO. Diese Kompatibilität wurde aus der optionalen gpiolib-Architektur entfernt.

 Wenn die GPIO-Nummer ungültig ist oder der angegebene GPIO nicht im entsprechenden Modus betrieben werden kann, schlägt die Einstellung der Richtung fehl. Normalerweise ist es keine gute Idee, sich beim Festlegen der GPIO-Richtung auf die Boot-Firmware zu verlassen, da die Boot-Funktionalität möglicherweise nicht überprüft wird (außer bei Boot-Linux). (In ähnlicher Weise muss der Single-Board-Setup-Code möglicherweise den Pin als GPIO multiplexen und den entsprechenden Pull-Up/Pull-Down konfigurieren.)

 Spinlock-sicherer GPIO-Zugriff

Die meisten GPIO-Controller können Speicherlese- und -schreibbefehle verwenden Zugang. Sie erfordern keinen Ruhezustand und können sicher über die interne Hardware-Interrupt-Verarbeitung (ohne Thread) und ähnliche Kontexte abgeschlossen werden.

Verwenden Sie den folgenden Aufruf, um auf diese GPIOs zuzugreifen. Zu diesem Zeitpunkt gibt gpio_cansleep immer einen Fehler zurück:

  /* GPIO INPUT: return zero or nonzero */
  int gpio_get_value(unsigned gpio);
  /* GPIO OUTPUT */
  void gpio_set_value(unsigned gpio, int value);

wobei der Wert ein boolescher Parameter ist, Null bedeutet niedrig und ein Wert ungleich Null bedeutet hoch. Beim Lesen des Werts eines Ausgangspins sollte der zurückgegebene Wert der Wert sein, der auf dem Pin angezeigt wird. . . Dies stimmt aufgrund von Open-Drain-Signalisierungs- und Ausgabeverzögerungsproblemen nicht immer mit dem angegebenen Ausgabewert überein.

Von get/set-Aufrufen werden keine Fehler zurückgegeben, da „ungültiger GPIO“ frühzeitig von gpio_direction_*() hätte gemeldet werden müssen. Allerdings können nicht alle Plattformen den Wert eines Ausgangspins lesen, und diejenigen, die das nicht können, sollten immer Null zurückgeben. Gleichzeitig ist es ein Fehler, diese Schnittstellen mit GPIOs zu verwenden, die Schlaf verursachen können.

Plattformspezifische Implementierungen werden empfohlen, diese beiden Aufrufe zu optimieren, um GPIO-Werte zu erhalten. In den Fällen, in denen die GPIO-Nummern konstant sind, erfolgt der Zugriff normalerweise mit nur einem Befehlspaar (Lesen oder Schreiben eines Hardwareregisters) und es ist kein Spinlock erforderlich. Solche Optimierungen können Bit-Splitting-Anwendungen (zeitlich und räumlich) effizienter machen (im Vergleich dazu, eine Menge Anweisungen für Unterprogrammaufrufe aufzuwenden).

Was macht die GPIO-Schnittstelle?

Wozu dient die GPIO-Schnittstelle?

Der Ausgabewert kann geschrieben werden (hoch=1, niedrig=0). Einige Chips können auch wählen, wie sie diese Werte ansteuern, um ein „Wired-OR“ oder ein ähnliches Schema (Open-Drain-Signalleitungen) zu unterstützen.

Der Eingabewert ist lesbar (1, 0). Einige Chips unterstützen das Zurücklesen des Ausgangspins, was in Wire-OR-Situationen nützlich ist (um bidirektionale Signalleitungen zu unterstützen). Der GPIO-Controller verfügt möglicherweise über eine Eingangs-Failsafe-/Anti-Bounce-Logik und manchmal über eine Softwaresteuerung.

Eingänge werden oft als Interrupt-Signale verwendet, normalerweise flankengetriggert, können aber auch pegelgetriggert sein. Diese Interrupts können als System-Reaktivierungsereignisse konfiguriert werden, um das System aus Energiesparmodi aufzuwecken.

Ein GPIO wird oft als bidirektionaler Eingang/Ausgang konfiguriert, abhängig von den Anforderungen verschiedener Produktplatinen, es gibt aber auch unidirektionale Situationen.

Auf die meisten GPIOs kann beim Erwerb des Spinlocks zugegriffen werden, auf diejenigen, auf die über den seriellen Bus zugegriffen wird, ist dies jedoch normalerweise nicht möglich (Gründe für den Ruhezustand). Einige Systeme verfügen über beide Formen von GPIO.

Auf einer bestimmten Platine wird jeder GPIO für einen bestimmten Zweck verwendet, z. B. zum Überwachen des Einsetzens/Entfernens von MMC/SD-Karten, zum Überprüfen des Schreibschutzstatus der Karte, zum Ansteuern von LEDs, zum Konfigurieren des Senders, zum Entfernen von seriellen Busbits, zum Auslösen eines Hardware-Watchdogs, zum Auslösen von a Schalter oder so.

Weitere Informationen zu diesem Thema finden Sie in der Rubrik „FAQ“!

Das obige ist der detaillierte Inhalt vonWas macht die GPIO-Schnittstelle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn