MinnowBoard Max
  • Cover
  • Introduction
  • Getting Started
  • Hardware
    • Processor
    • Peripherals
    • Interfaces
    • PCIe
  • Customization
    • Lures
  • Build Systems
    • Yocto
  • BIOS
  • Operating Systems
  • Linux
    • Installation
    • Kernel
    • Subsystems
      • UART
      • Camera
      • Audio
      • General Purpose Input Output
      • I2C
      • Pwm
      • Serial Peripheral Interface
      • Led
    • Package Management
    • Libraries
      • MRAA
      • UPM
  • Programming Languages
    • Python
      • Calamari Lure
        • Main
        • 7 Segments
        • Buttons
        • Pulse Width Modulation
        • Red Green Blue
  • SandBox
Powered by GitBook
On this page
  • General Purpose Input Output
  • GPIO, Kernel Driver Tests
  • GPIO, Kernel Drivers Enablement
  • GPIO, Kernel Modules Tests
  • GPIO, Userspace Tests
  • GPIO, Online Resources
  • End of File
  1. Linux
  2. Subsystems

General Purpose Input Output

PreviousAudioNextI2C

Last updated 7 years ago

General Purpose Input Output

GPIO, Kernel Driver Tests

Let's find if GPIOs are found under Sysfs

user@Minnowboard:~$ ls /sys/kernel/gpio
ls: cannot access /sys/kernel/gpio: No such file or directory

GPIO, Kernel Drivers Enablement

One way to enable GPIOs is to follow

Compile your kernel, once compiled we enable all needed drivers via menuconfig:

user@Minnowboard:~$ cd linux
user@Minnowboard:~$ make menuconfig

Processor type and features  --->

  [*] Intel Low Power Subsystem Support
      Symbol: X86_INTEL_LPSS [=y]
      Prompt: Intel Low Power Subsystem Support

Device Drivers  --->
  Pin controllers  --->

[*] Intel Baytrail GPIO pin control
Symbol: PINCTRL_BAYTRAIL [=y]
Prompt: Intel Baytrail GPIO pin control

Device Drivers  --->
  -*- GPIO Support  --->
  Symbol: GPIOLIB [=y]
  Prompt: GPIO Support

[*]   Debug GPIO calls
Symbol: DEBUG_GPIO [=y]
Prompt: Debug GPIO calls

[*]   /sys/class/gpio/... (sysfs interface)
Symbol: GPIO_SYSFS [=y]
Prompt: /sys/class/gpio/... (sysfs interface)

Once configured, we save the changes, compile and reboot

GPIO, Kernel Modules Tests

Ready! We test that our GPIOs are enabled in dmesg, sysfs y debugfs

user@Minnowboard:~$ dmesg | grep gpio
[    0.222366] gpiochip_find_base: found new base at 410
[    0.222466] gpiochip_add: registered GPIOs 410 to 511 on device: INT33FC:00
[    0.223202] gpiochip_find_base: found new base at 382
[    0.223285] gpiochip_add: registered GPIOs 382 to 409 on device: INT33FC:01
[    0.223683] gpiochip_find_base: found new base at 338
[    0.223777] gpiochip_add: registered GPIOs 338 to 381 on device: INT33FC:02
[    7.823125] acpi 80860F16:00: GPIO: looking up 80860F16:00 cd-gpios
[    7.823138] acpi 80860F16:00: GPIO: looking up 80860F16:00 cd-gpio
[    7.823415] sdhci-acpi 80860F16:00: failed to setup card detect gpio
user@Minnowboard:~$ ls /sys/class/gpio
export  gpiochip338  gpiochip382  gpiochip410  unexport
root@Minnowboard:~# mount -t debugfs none /sys/kernel/debug
root@Minnowboard:~# cat gpio
GPIOs 338-381, platform/INT33FC:02, INT33FC:02:
gpio-0   (Unrequested         ) in     hi pad-29  offset:0x1d0 mux:0                  up   20k
...
gpio-43  (Unrequested         ) in out lo pad-40  offset:0x280 mux:0                          
...
GPIOs 382-409, platform/INT33FC:01, INT33FC:01:
gpio-0   (Unrequested         ) in     lo pad-19  offset:0x130 mux:2                          
...
gpio-27  (Unrequested         )        lo pad-7   offset:0x070 mux:0                  down 20k
GPIOs 410-511, platform/INT33FC:00, INT33FC:00:
gpio-0   (Unrequested         ) in     lo pad-85  offset:0x550 mux:1                           
...                        
gpio-101 (Unrequested         ) in out lo pad-100 offset:0x640 mux:0                      

To know the GPIO values let's look at the Minnowboard Elinux Wikipage

or we use the following script

user@Minnowboard:~$ wget https://raw.githubusercontent.com/MinnowBoard/minnow-max-extras/master/lse/what_gpio_num.sh
user@Minnowboard:~$ chmod +x what_gpio_num.sh
root@Minnowboard:~# ./what_gpio_num.sh

GPIO, Userspace Tests

A very simple test is to enable a GPIO as output and use a multimeter to check the voltage, Minnowboard MAX Pin 1 (Ground | Gnd) and Pin 21 (GPIO / Wakeup | GPIO_S5_0) are connected to the negative y positive terminales of our multimeter.

The next commands will give us the configuration and output of 0 and 3.3 Volts respectively:

root@Minnowboard:~# echo 338 > /sys/class/gpio/export
root@Minnowboard:~# echo out > /sys/class/gpio/gpio338/direction
root@Minnowboard:~# echo 0 > /sys/class/gpio/gpio338/value
root@Minnowboard:~# echo 1 > /sys/class/gpio/gpio338/value
root@Minnowboard:~# echo 0 > /sys/class/gpio/gpio338/value 
root@Minnowboard:~# echo 1 > /sys/class/gpio/gpio338/value

GPIO, Online Resources

End of File

ELinux MinnowMax Linux Kernel
Minnowboard Elinux Wikipage
Linux Kernel Documentation GPIO
Martin's Atelier: Kernel Munging Cookbook
ELinux General Purpose Input Output