Anmerkung: Dieser Treiber wird nicht in disk images (Dateien, die auf eine Festplatte/USB-stick 1:1 kopiert werden können, um damit den Rechner zu starten) zusammengestellt, die auf nicht-ARM CPUS abzielen. Es ist nur wirklich beabsichtigt, mit dem Raspberry Pi zu arbeiten. Sie kann (oder auch nicht) an ähnlichen boards oder direkten Klonen arbeiten.
1. Zweck
Dieser Treiber ermöglicht die Verwendung der Rapberry Pi GPIO Pins in einer Weise analog zum Parallelport-Treiber auf x86 PCs. Es kann die gleichen Schrittgeneratoren, Encoder-Zähler und ähnliche Komponenten verwenden.
2. Anwendung
loadrt hal_pi_gpio dir=0x13407 exclude=0x1F64BF8
Die "dir"-Maske (engl. dir mask) bestimmt, ob die Pins Eingänge oder Ausgänge sind, die Ausschluss-Maske (engl. exclude mask) verhindert, dass der Treiber die Pins verwendet (und ermöglicht so, dass sie für ihre normalen RPi-Zwecke wie SPI oder UART verwendet werden können).
Die Maske kann in Dezimal oder Hexadezimal (Hex kann einfacher sein da kein Übertrag von niederen zu höheren Ziffern stattfindet).
Um den Wert der Maskierungeen zu ermitteln, summieren Sie die (Hexa-)Dezimalwerte für alle Pins, die als Ausgabe konfiguriert werden sollen, und analog für alle Pins, die gemäß der folgenden Tabelle ausgeschlossen werden sollten.
GPIO Nummer | Dezimal | Hexadezimal | Pin-Nummer |
---|---|---|---|
2 |
1 |
0x00000001 |
3 |
3 |
2 |
0x00000002 |
5 |
4 |
4 |
0x00000004 |
7 |
5 |
8 |
0x00000008 |
29 |
6 |
16 |
0x00000010 |
31 |
7 |
32 |
0x00000020 |
26 |
8 |
64 |
0x00000040 |
24 |
9 |
128 |
0x00000080 |
21 |
10 |
256 |
0x00000100 |
19 |
11 |
512 |
0x00000200 |
23 |
12 |
1024 |
0x00000400 |
32 |
13 |
2048 |
0x00000800 |
33 |
14 |
4096 |
0x00001000 |
8 |
15 |
8192 |
0x00002000 |
10 |
16 |
16384 |
0x00004000 |
36 |
17 |
32768 |
0x00008000 |
11 |
18 |
65536 |
0x00010000 |
12 |
19 |
131072 |
0x00020000 |
35 |
20 |
262144 |
0x00040000 |
38. |
21 |
524288 |
0x00080000 |
40 |
22 |
1048576 |
0x00100000 |
15 |
23 |
2097152 |
0x00200000 |
16 |
24 |
4194304 |
0x00400000 |
18 |
25 |
8388608 |
0x00800000 |
22 |
26 |
16777216 |
0x01000000 |
37 |
27 |
33554432 |
0x02000000 |
13 |
Note: Bei der Berechnung der Masken werden GPIO-Nummern verwendet, der individuelle Maskenwert eines Pins ergibt sich hierbei als 2^(GPIO number - 2), während bei der Benennung der HAL Pins es die Raspberry Pi Header Pin Zahlen sind.
So, wenn Sie zum Beispiel GPIO 17 als Ausgang aktivieren (dir=0x8000), dann wird dieser Ausgang von dem HAL Pin hal_pi_gpio.pin-11-out gesteuert.
3. Pins
-
hal_pi_gpio.pin-NN-out
-
hal_pi_gpio.pin-NN-in
Abhängig von den "dir" und Ausschluss (engl. exclude) Maskierungen.
4. Parameter
Es existieren nur die Standard-Takt (engl. timing)-Parameter, die für alle Komponenten erstellt werden.
*hal_pi_gpio.read.tmax *hal_pi_gpio.read.tmax-increased *hal_pi_gpio.write.tmax *hal_pi_gpio.write.tmax-increased
Aus unbekannten Gründen erstellt der Treiber auch HAL pins, um Timing anzuzeigen
*hal_pi_gpio.read.time *hal_pi_gpio.write.time
5. Funktionen
-
hal_pi_gpio.read - Fügen Sie dies dem base thread hinzu, um die HAL-Pin-Werte zu aktualisieren und physikalische Eingangswerte anzupassen.
-
hal_pi_gpio.write - Fügen Sie dies dem base thread hinzu, um die physikalischen Pins zu aktualisieren indem sie sich den HAL-Werten anpassen.
Typischerweise wird die read Funktion früh in der Callliste (engl. call list) stehen, vor irgendwelchen Encoder-Zählern, und die write Funktion nachfolgend in der call list, wohl auch nach stepgen.make-pulses.
6. Pin-Nummerierung
Der GPIO-Steckverbinder und der Pinout sind seit rund 2015 konsistent. Diese ältere Pi-Modelle sind wahrscheinlich ohnehin eine schlechte Wahl für LinuxCNC. Dieser Treiber ist jedoch dazu ausgelegt, mit diesen zu arbeiten, wird die beiden alternativen Pinouts entsprechend erkennen und korrekt konfigurieren.
Die aktuelle Pinout-Mapping zwischen GPIO-Nummern und Pin-Nummern ist in der obigen Tabelle beschrieben.
Beachten Sie, dass die config string GPIO-Nummern verwendet, aber sobald der Treiber geladen ist, beziehen sich die HAL-Pin-Namen auf Stecker-Pin-Nummern.
Dies kann logischer sein, als es zunächst erscheint. Bei der Einrichtung müssen Sie genug Pins jeden Typs konfigurieren, während Sie vermeiden wollen, andere Funktionen zu überschreiben, die Ihr System benötigt. Dann, wenn der Treiber geladen wird, in der HAL-Schicht, wollen Sie nur wissen, womit Sie die Drähte für jeden HAL-Pin verbinden.
7. Bekannte Probleme
Derzeit (2023-07-16) scheint dieser Treiber nur auf Raspbian zu arbeiten, da das generische Debian-Image die richtigen Schnittstellen in /dev/gpiomem nicht einrichtet und den Zugriff auf die /sys/mem-Schnittstelle einschränkt.