Buffl uses cookies to provide you with a better experience. You can find more information in our privacy policy.
Wie funktioniert die Ansteurung von GPIOs in Embedded Linux ?
Über vom Kernel bereitgestellte schnittstellen wie:
Aber:
Wie ist das Vorgehen bei der Nutzung des veralteten Zugriffs über /sys?
Vorausgesetzt die Pins sind schon als digitale I/Os konfigureiert.
Steuerdatei analgen:
Nummer der I/O Leitung in Datei /sys/class/export schreiben
ACHTUNG: die Nummer entspricht nicht der Nummer des Pins am BBB sondern Pin-Nummer am Ausgabeport. (Jede Ausgabeeinheit ist für 32 I/O Bits zuständing.)
Nach schreiben des Pins in export wird eine Schnittstelle in /sys/class/gpio erstell Namens gipioPINNr
Dort stehen die (active_low, direction, edge, power, subsystem, uevent, und value) Datein
Richtung des Pins angegeben (direction)
Werte schreiben/lesen (value)
Beispiel: Nutze das alte GPIO verfahren über /sys und erzeuge eine Schnittstelle für Pin P8_13(GPIO 0.23)
und lese die drection aus in die er konfiguriert ist und schreibe eine 1 auf diesen Pin
Wie läuft die GPIO Steuerung mittels Character-Device ABI?
Die Hardwareeinheiten stehen bei entsprechend moderenen Kernelversionen als character device zuir Vefügung (z.B /dev/gpiochipX).
Bedienung der Schnittstellen über ioctl bei diesen Gerätedatein.
Weiter Kommandozeilenprogramme wie:
gpiodetect, gpioinfo, gpioset, gpioget, gpiofind und gpiomon
Was ist ein Vorteil bei der nutzung des Character devices ür GPIO im Gegensatz zu /sys?
Was gibt es in C/C++ programmen für eine Möglichkeit die Gpios mit character devices anzsprechen und so kontrollieren?
Was muss getan werden, um diese. Lib in Programmen zu nutzen?
Verwendung der libgpiod
installieren des Pakets libgpiod-dev
Kernel muss Character-Device-ABI unterstützen
linken mit -lgpiod
Was ist das grundlegende Problem von Peripherie auf Embedded devices? Wie lautet das Konzept das dieses Problem zu lösen versucht? (Nur Namen keine erklärung)
Bei Embedded keine Standartisierten Schnittstellen die automatisch von treibern erkannt werden.
Daher meistens spezielle Peripherie mit speziellen Registern
Häufige Wechselwirkung der Peripherie (z.B PWM-> Timer und Pin konfiguerieren)
Versuchte Lösung über Boardfiles aber bei Änderungen neu-compilierung des Kernels notwendig.
Lösung über den Device Tree
Erklärung des Device Tree Konzepts?
Grundlegendes Konzept:
Systemstart eingelesen und HWkomponenten entsprechend vom Kernel konfiguriert.
Wie ist der Ablauf mit Device Trees?
In der Device Tree Structure (.dts) wird die ganze Hardware spezifiziert.
Sobald der Kernel bottet wird diese mittels dtc (Device tree compiler) in eine binäredatei gebracht und vom Kernel verwendet.
Was sind Overlays und wofür werden sie verwendet?
Was ist State of the Art?
Rekonfiguration während Laufzeit
Durch UniversalCape erstellung einzelner Overlays eliminiert, da Einstellungen über der Pin_Multiplexer zur Laufzeit über Kernel interface einstellbar sind.
Wie kann man die PinKonfiguaration mit Universalcapes ändern?
Was ist der Bootloader, der eingesetzt wurde?
Was macht dieser?
Wie erfolgt die Konfiguration des Bootloaders?
Uboot
Vorinitialisierung des Systems und laden des Betriebssystems aus z.B einer EXT-Partition
Konfiguration über die /boot/UEnv.txt Datei, in der man z.B UniversalCape deaktiviert oder eine andere Variante spezifiziert, die z.B den Hdmi port deaktiviert
Wie wird der ADC verwendet?
Erzeugung eines PWM Signals ?
Was muss man tun?
Wie bei Gpio über die Export datei in /sys/class/pwm/pwmchipX/export den jeweiligen PWM Kanal exportieren.
Dan befindet sich ein Verzechnis /sys/class/pwm/pwm-0:0
erste 0: chip0 z.B.
zweite 0: Kanal 0 oder 1 (bei EHRPWM)
das Verzeichnis hat dann folgende Datein:
Diese werden dann zur weiteren Konfiguration verwendet.
Verwendung I2C Schnittstellen
Keine einfache Bedienung über eine Dateischnittstelle, da auch auf Fehler reagiert werden muss etc.
Programmierung in C notwendig
ioctl, write, ..
Wie kann der Bus nach vorhandene Busteilnehmern abgescuht werden?
Wie kann ein ganzer Satz an transaktionen in geschrieben werden? Welche Flags?
Verwendung der SPI Schnittstelle?
Configuration der Pins
Last changed2 years ago