bpi-r2:gpio
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
bpi-r2:gpio [2018/03/08 19:07] – [Pin-Belegung] frank | bpi-r2:gpio [2023/06/08 17:06] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== GPIO ====== | ||
+ | ===== Grundlagen ===== | ||
+ | https:// | ||
+ | |||
+ | ==== Pin-Belegung ==== | ||
+ | {{: | ||
+ | Bild aus den BPI-R2 Schematics | ||
+ | |||
+ | |||
+ | ^ Nebenfunktion ^ Hauptfunktion ^ pin# ^ xxxxxxxxxxxxxxxxxxxxx ^ pin# ^ Hauptfunktion | ||
+ | | | | | {{ : | ||
+ | | - | 3V3 | ||
+ | | I2C_SDA0 | ||
+ | | I2C_SCL0 | ||
+ | | PWM3 | GPIO 206 | | ||
+ | | - | GND | ||
+ | | UART0 TX | GPIO 80 | ||
+ | | UART0 RX | GPIO 79 | ||
+ | | PWM2 | GPIO 205 | 15 | ::: | 16 | GPIO 25 / INT3 | URTS1 | | ||
+ | | - | 3V3 | ||
+ | | SPI0_MO | ||
+ | | SPI0_MI | ||
+ | | SPI0_CK | ||
+ | | - | GND | ||
+ | | I2C_SDA1 | ||
+ | | | GPIO 126 | 29 | ::: | 30 | GND | - | | ||
+ | | I2S0_BCK | ||
+ | | I2S0_LRCK | ||
+ | | I2S0_DATA | ||
+ | | SPDIF_IN1 | ||
+ | | - | GND | ||
+ | | | | | ::: | | | | | ||
+ | |||
+ | < | ||
+ | | ^ main ^ spare ^ | ||
+ | ^ Pin 1 | 3V3 | - | | ||
+ | ^ Pin 2 | 5V | - | | ||
+ | ^ Pin 3 | GPIO 75 | I2C_SDA0 | | ||
+ | ^ Pin 4 | 5V | - | | ||
+ | ^ Pin 5 | GPIO 76 | I2C SCL0 | | ||
+ | ^ Pin 6 | GND | - | | ||
+ | ^ Pin 7 | GPIO 206 | PWM3 | | ||
+ | ^ Pin 8 | GPIO 82 | UART1 TX | | ||
+ | ^ Pin 9 | GND | - | | ||
+ | ^ Pin 10 | GPIO 81 | UART1 RX | | ||
+ | ^ Pin 11 | GPIO 80 | UART0 TX | | ||
+ | ^ Pin 12 | Int2 | GPIO 24 (*) / UCTS1 | | ||
+ | ^ Pin 13 | GPIO 79 | UART0 RX | | ||
+ | ^ Pin 14 | GND | - | | ||
+ | ^ Pin 15 | GPIO 205 | PWM2 | | ||
+ | ^ Pin 16 | GPIO 25 / Int3 | URTS1 | | ||
+ | ^ Pin 17 | 3V3 | - | | ||
+ | ^ Pin 18 | GPIO 21 | PCM_TX | | ||
+ | ^ Pin 19 | GPIO 56 | SPI0_MO | | ||
+ | ^ Pin 20 | GND | - | | ||
+ | ^ Pin 21 | GPIO 55 | SPI0_MI | | ||
+ | ^ Pin 22 | GPIO 18 | PCM_CLK | | ||
+ | ^ Pin 23 | GPIO 54 | SPI0_CK | | ||
+ | ^ Pin 24 | GPIO 53 | SPI0_CSN | | ||
+ | ^ Pin 25 | GND | - | | ||
+ | ^ Pin 26 | GPIO 20 | PCM_RX | | ||
+ | ^ Pin 27 | GPIO 57 | I2C_SDA1 | | ||
+ | ^ Pin 28 | GPIO 58 | I2C_SCL1 | | ||
+ | ^ Pin 29 | GPIO 126 | I2S0_MCLK | ||
+ | ^ Pin 30 | GND | - | | ||
+ | ^ Pin 31 | GPIO 74 | I2S0_BCK | | ||
+ | ^ Pin 32 | GPIO 72 | I2S0_DATA_IN | | ||
+ | ^ Pin 33 | GPIO 73 (?) | I2S0_LRCK | | ||
+ | ^ Pin 34 | GND | - | | ||
+ | ^ Pin 35 | GPIO 49 (M) | I2S0_DATA | | ||
+ | ^ Pin 36 | GPIO 19 | PCM_SYNC | | ||
+ | ^ Pin 37 | GPIO 202 | SPDIF_IN1 | | ||
+ | ^ Pin 38 | INT0 | GPIO 22 (*) / PCM_RST_IN | | ||
+ | ^ Pin 39 | GND | - | | ||
+ | ^ Pin 40 | GPIO 200 | SPDIF_OUT | | ||
+ | </ | ||
+ | (*) Spezial-GPIO benötigen Speicher-Patch und Mode-Einstellung (4.4.70) | ||
+ | (?) GPIO getested, noch nicht funktionsfähig | ||
+ | (M) Mode=0 erforderlich | ||
+ | |||
+ | ==== Schaltungen ==== | ||
+ | {{https:// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | {{ : | ||
+ | |||
+ | https:// | ||
+ | |||
+ | ===== Kernel 4.4.70 ===== | ||
+ | ==== Standard GPIO ==== | ||
+ | |||
+ | <code bash> | ||
+ | root@bpi-iot-ros-ai: | ||
+ | root@bpi-r2: | ||
+ | root@bpi-r2: | ||
+ | root@bpi-r2: | ||
+ | </ | ||
+ | funktioniert mit LED an Pin 14 (-) und Pin 16 (+), inkl. Vorwiderstand (220 Ohm) | ||
+ | |||
+ | ==== Spezial GPIO ==== | ||
+ | |||
+ | für die GPIOs 22/ | ||
+ | |||
+ | <code bash> | ||
+ | root@bpi-iot-ros-ai: | ||
+ | ./mwrite offset : 10005b10, val : 00000038 | ||
+ | b6f03b10 | ||
+ | root@bpi-r2: | ||
+ | root@bpi-r2: | ||
+ | root@bpi-r2: | ||
+ | root@bpi-r2: | ||
+ | </ | ||
+ | zusätzlich musste ich beim GPIO24 (pin 12) den mode noch auf 0 setzen | ||
+ | |||
+ | |||
+ | ===== Kernel 4.14 ===== | ||
+ | GPIO_SYSFS und CONFIG_DEBUG_GPIO müssen in Kernel-Config gesetzt sein (.config) | ||
+ | |||
+ | ==== Standard GPIO ==== | ||
+ | |||
+ | <code bash> | ||
+ | root@bpi-r2# | ||
+ | root@bpi-r2# | ||
+ | GPIO ranges handled: | ||
+ | 0: 1000b000.pinctrl GPIOS [232 - 511] PINS [0 - 279] | ||
+ | root@bpi-r2# | ||
+ | root@bpi-r2# | ||
+ | 257 | ||
+ | root@bpi-r2# | ||
+ | </ | ||
+ | |||
+ | Pin 14=GND/ | ||
+ | |||
+ | === GPIO als Ausgang === | ||
+ | <code bash> | ||
+ | root@bpi-r2# | ||
+ | root@bpi-r2# | ||
+ | root@bpi-r2# | ||
+ | </ | ||
+ | |||
+ | schaltet LED (inkl. Vorwiderstand) an Pin 14=GND/ | ||
+ | |||
+ | === GPIO als Eingang === | ||
+ | |||
+ | high-active Taster-Schaltung an GPIO 200 (Pin 40 zwischen Schalter und Widerstand, Pin 39 als GND [Widerstand] und Pin 17 als 3v3-vcc) | ||
+ | |||
+ | <code bash> | ||
+ | [10:54] root@bpi-r2: | ||
+ | [10:56] root@bpi-r2: | ||
+ | 0 #Taster nicht gedrückt | ||
+ | [10:56] root@bpi-r2: | ||
+ | 1 #Taster gedrückt | ||
+ | [10:56] root@bpi-r2: | ||
+ | 0 #Taster nicht gedrückt | ||
+ | |||
+ | #dauerhaft alle 1/4s abfragen | ||
+ | watch -n 0.25 cat / | ||
+ | </ | ||
+ | |||
+ | ==== Special GPIO ==== | ||
+ | |||
+ | Speicher-hack (wie in 4.4.70) nicht notwendig | ||
+ | |||
+ | Beispiel für GPIO24 (pin12): | ||
+ | |||
+ | <code bash> | ||
+ | root@bpi-r2# | ||
+ | root@bpi-r2# | ||
+ | root@bpi-r2# | ||
+ | root@bpi-r2# | ||
+ | </ | ||
+ | |||
+ | LED geht an :) | ||
+ | ==== on-board LEDs ==== | ||
+ | |||
+ | Die On-Board-LEDs welche hier angesteuert werden befinden sich nahe der Netzteil-Buchse (nicht neben der GPIO-Leiste) | ||
+ | |||
+ | http:// | ||
+ | |||
+ | an => | ||
+ | |||
+ | echo 1 > / | ||
+ | |||
+ | aus => | ||
+ | |||
+ | echo 0 > / | ||
+ | |||
+ | blinken (erstellt delay_on/ | ||
+ | |||
+ | echo timer > / | ||
+ | |||
+ | ändern der Blink Frequenz (an/ | ||
+ | |||
+ | echo 100 > / | ||
+ | echo 100 > / | ||
+ | |||
+ | |||
+ | in meinen Tests, grün blinkt beim anschalten (rot+blau gehen einfach an/aus), bisher weis ich noch nicht, wie man das Blinken der grünen LED deaktivieren kann | ||
+ | |||
+ | < | ||
+ | echo 0 > $L: | ||
+ | echo 1 > $L: | ||
+ | echo 0 > $L: | ||
+ | echo 1 > $L: | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | [16:08] root@bpi-r2: | ||
+ | [17:41] root@bpi-r2: | ||
+ | [17:42] root@bpi-r2: | ||
+ | [17:42] root@bpi-r2: | ||
+ | [17:42] root@bpi-r2: | ||
+ | [17:42] root@bpi-r2: | ||
+ | </ | ||
+ | ===== UART ===== | ||
+ | |||
+ | ==== DTS(i) anpassen ==== | ||
+ | |||
+ | unter Kernel 4.4.x fehlen die DeviceTree-Abschnitte, | ||
+ | |||
+ | definition in der mt7623.dtsi: | ||
+ | |||
+ | nun in der bananapi.dts den uart noch auf " | ||
+ | |||
+ | bei uart muss darauf geachtet werden, dass in der mt7623.dtsi erst uart2 und dann die anderen kommen, da sonst nach der uboot-Meldung " | ||
+ | |||
+ | Uart3 kann auf [[http:// | ||
+ | |||
+ | ==== Einstellungen des Ports ==== | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | stty -F /dev/ttyS2 -a | ||
+ | |||
+ | #Das setzt die Baudrate auf 9600, 8 bits, 1 stop bit, keine parität: | ||
+ | stty -F /dev/ttyS2 9600 cs8 -cstopb -parenb | ||
+ | |||
+ | # | ||
+ | stty -F /dev/ttyS2 -opost | ||
+ | |||
+ | #raw Modus | ||
+ | stty -F /dev/ttyS2 raw | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Nutzung ==== | ||
+ | |||
+ | pin 8/10 = uart1 (tx/rx) = 11003000 | ||
+ | pin 11/13 = uart0 (tx/rx) = 11002000 | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | DEV=/ | ||
+ | #stty -F ${DEV} sane | ||
+ | #stty -F ${DEV} 9600 cs8 -cstopb -parenb -crtscts -echo | ||
+ | stty -F ${DEV} 9600 cs8 -cstopb -parenb raw -echo | ||
+ | |||
+ | dmesg | grep " | ||
+ | |||
+ | echo " | ||
+ | echo " | ||
+ | |||
+ | echo "using $DEV" | ||
+ | echo "send data using \"echo \" | ||
+ | |||
+ | while read line; do | ||
+ | # if [[ -n " | ||
+ | echo " | ||
+ | # fi | ||
+ | done < <(cat $DEV) | ||
+ | </ | ||
+ | <code bash> | ||
+ | echo " | ||
+ | </ | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | < | ||
+ | PI | ||
+ | 1 (3V3) ------- | ||
+ | 6 (GND) --------- | ||
+ | 8 (TX) | ||
+ | 10 (RX) ------- LV1 HV1 -------- TX | ||
+ | </ | ||
+ | |||
+ | ===== PWM ===== | ||
+ | |||
+ | Kernel-Option PWM_MEDIATEK muss gesetzt sein (Modul möglich), benötigt PWM(=y) | ||
+ | |||
+ | gpio 206 (pin 7) als pwm3 verwenden | ||
+ | < | ||
+ | echo 3 >/ | ||
+ | echo 200000 >/ | ||
+ | echo 100000 >/ | ||
+ | echo 1 >/ | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | < | ||
+ | period The total period of the PWM signal (read/ | ||
+ | duty_cycle The active time of the PWM signal (read/ | ||
+ | </ | ||
+ | < | ||
+ | period=200000ns=200ms=5Hz | ||
+ | duty_cycle=100000ns=1/ | ||
+ | </ | ||
+ | |||
+ | aktuell ist aber die Ausgangsfrequenz nicht korrekt (statt 5kHz kommt 1kHz raus) siehe [[http:// | ||
+ | |||
+ | seit 2.3.2018 ist die Frequenz richtig: [[https:// | ||
+ | |||
+ | ===== SPI ===== | ||
+ | |||
+ | http:// | ||
+ | |||
+ | ===== I2C ===== | ||
+ | [[http:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ggf. < | ||
+ | |||
+ | |||
+ | < | ||
+ | [17:13] root@bpi-r2: | ||
+ | [17:14] root@bpi-r2: | ||
+ | </ | ||
+ | |||
+ | |||
+ | Realtime-Clock DS1307 (mit entfernten pullup-Widerständen) an i2c0 (I2C_SDA0=pin3, | ||
+ | |||
+ | < | ||
+ | #!/bin/bash | ||
+ | modprobe i2c-dev | ||
+ | modprobe rtc-ds1307 | ||
+ | echo ds1307 0x68 > / | ||
+ | #cat / | ||
+ | #read rtc | ||
+ | hwclock -r | ||
+ | #set system-clock to rtc-value | ||
+ | #hwclock -s | ||
+ | #set rtc to system-time | ||
+ | #hwclock -w | ||
+ | </ |
bpi-r2/gpio.txt · Zuletzt geändert: 2023/06/08 17:06 von 127.0.0.1