Difference between revisions of "GPIOlib"

From ArmadeusWiki
Jump to: navigation, search
(Links)
m (Blink APFxxDev i.MX LED)
Line 22: Line 22:
 
** for APF27Dev: '''PF14 ->''' PortF (n°6) pin 14 -> (6-1)*32 + 14 -> GPIO n°'''174'''
 
** 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
 
** for APF51Dev: GPIO1_2 -> Port 1 pin 2 -> GPIO n° 2
 +
** for APF28Dev: Bank 0, pin 21 -> GPIO n° 21 (0*32 + 21)
 
* Define envt variable (for portability):
 
* Define envt variable (for portability):
 
<pre class="apf">
 
<pre class="apf">
Line 27: Line 28:
 
or
 
or
 
# export LED=2    (APF51Dev)
 
# export LED=2    (APF51Dev)
 +
or
 +
# export LED=21    (APF28Dev)
 
</pre>
 
</pre>
 
* Ask kernel to export the GPIO:
 
* Ask kernel to export the GPIO:

Revision as of 18:59, 14 February 2012

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
    • for APF28Dev: Bank 0, pin 21 -> GPIO n° 21 (0*32 + 21)
  • Define envt variable (for portability):
# export LED=174    (APF27Dev)
or
# export LED=2    (APF51Dev)
or
# export LED=21    (APF28Dev)
  • 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: PF13 -> PortF (n°6) pin 13 -> (6-1)*32 + 13 -> GPIO n°173
    • for APF51Dev: GPIO1_3 -> Port 1 pin 3 -> GPIO n°3 ((1-1)*32 + 3)
  • Define envt variable (for portability):
# export SWITCH=173    (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)
  • Block until an event occur:
# cat /sys/class/gpio/gpio$SWITCH/edge
none
# echo both > /sys/class/gpio/gpio$SWITCH/edge

Links