Difference between revisions of "GPIOlib"

From ArmadeusWiki
Jump to: navigation, search
(LED -> SWITCH)
Line 58: Line 58:
 
* Define envt variable (for portability):
 
* Define envt variable (for portability):
 
<pre class="apf">
 
<pre class="apf">
# export LED=175    (APF27Dev)
+
# export SWITCH=175    (APF27Dev)
 
or
 
or
# export LED=3    (APF51Dev)
+
# export SWITCH=3    (APF51Dev)
 
</pre>
 
</pre>
 
* Ask kernel to export the GPIO:
 
* Ask kernel to export the GPIO:
 
<pre class="apf">
 
<pre class="apf">
# echo $LED > /sys/class/gpio/export
+
# echo $SWITCH > /sys/class/gpio/export
 
</pre>
 
</pre>
 
* Access functions are created:
 
* Access functions are created:
 
<pre class="apf">
 
<pre class="apf">
# ls /sys/class/gpio/gpio$LED/
+
# ls /sys/class/gpio/gpio$SWITCH/
 
active_low  edge        subsystem  value
 
active_low  edge        subsystem  value
 
direction  power      uevent
 
direction  power      uevent
Line 74: Line 74:
 
* Check GPIO direction and put in output:
 
* Check GPIO direction and put in output:
 
<pre class="apf">
 
<pre class="apf">
# cat /sys/class/gpio/gpio$LED/direction
+
# cat /sys/class/gpio/gpio$SWITCH/direction
 
in
 
in
 
</pre>
 
</pre>
 
* Get switch status:
 
* Get switch status:
 
<pre class="apf">
 
<pre class="apf">
# cat /sys/class/gpio/gpio$LED/value
+
# cat /sys/class/gpio/gpio$SWITCH/value
 
1    (released)
 
1    (released)
 
...
 
...
# cat /sys/class/gpio/gpio$LED/value
+
# cat /sys/class/gpio/gpio$SWITCH/value
 
0    (pressed)
 
0    (pressed)
 
</pre>
 
</pre>

Revision as of 13:39, 24 May 2011

With recent Linux kernel (> 2.6.3x), there is an abstraction layer meant to ease GPIO usage: gpiolib. We will explain here how to use it.

Installation

  • If not already done:
$ make linux26-menuconfig
Device Drivers  --->
    -*- GPIO Support  --->
        [*]   /sys/class/gpio/... (sysfs interface)
$ make
  • reflash your kernel (if needed)

Usage

Blink APFxxDev i.MX LED

  • Find the GPIO number connected to the LED, eg:
    • for APF27Dev: PF14 -> PortF (n°6) pin 14 -> (6-1)*32 + 14 -> GPIO n°174
    • for APF51Dev: GPIO1_2 -> Port 1 pin 2 -> GPIO n° 2
  • Define envt variable (for portability):
# export LED=174    (APF27Dev)
or
# export LED=2    (APF51Dev)
  • Ask kernel to export the GPIO:
# echo $LED > /sys/class/gpio/export
  • Access functions are created:
# ls /sys/class/gpio/gpio$LED/
active_low  edge        subsystem   value
direction   power       uevent
  • Check GPIO direction and put in output:
# cat /sys/class/gpio/gpio$LED/direction
in
# echo out > /sys/class/gpio/gpio$LED/direction
# cat /sys/class/gpio/gpio$LED/direction
out
  • Play with GPIO value to blink LED:
# echo 1 > /sys/class/gpio/gpio$LED/value
# echo 0 > /sys/class/gpio/gpio$LED/value

Get APFxxDev i.MX switch status

  • Find the GPIO number connected to the switch, eg:
    • for APF27Dev: PF15 -> PortF (n°6) pin 15 -> (6-1)*32 + 15 -> GPIO n°175
    • for APF51Dev: GPIO1_3 -> Port 1 pin 3 -> GPIO n°3 ((1-1)*32 + 3)
  • Define envt variable (for portability):
# export SWITCH=175    (APF27Dev)
or
# export SWITCH=3    (APF51Dev)
  • Ask kernel to export the GPIO:
# echo $SWITCH > /sys/class/gpio/export
  • Access functions are created:
# ls /sys/class/gpio/gpio$SWITCH/
active_low  edge        subsystem   value
direction   power       uevent
  • Check GPIO direction and put in output:
# cat /sys/class/gpio/gpio$SWITCH/direction
in
  • Get switch status:
# cat /sys/class/gpio/gpio$SWITCH/value
1    (released)
...
# cat /sys/class/gpio/gpio$SWITCH/value
0    (pressed)

Links