When you buy a Beagleboard Black (a.k.a. BBB), it comes with a pre-installed version of debian with more or less everything you need to get started. I purchased the board for another purpose and develop seL4 components on top of it. But before starting to develop on seL4, it is useful to know exactly how the board works: once you know how the board works, you can start to write your code and know for sure that the bug comes from your code.
In this article, I will explain quickly how to set up a simple circuit to test the GPIO of the beaglebone.
Mapping between pin numbers and GPIO ID from bone 101
Setting up the circuit
To test the circuit, you need only a breadboard, a resistance and a LED. Simple.
Connect the PIN 14 (which is mapped to GPIO id 50, see table) from bank P9 (green cable on the picture) on the breadboard. Connect it to a resistance and a LED. The other pin of the LED is then connected to the ground (last PIN of P9).
Wiring scheme of the example
Controlling the GPIO in Linux
In Linux, the GPIO can be controlled using the SysFS abstraction layer. You can access it through /sys/class/gpio. I am using the pre-installed debian software on the board.
To control a particular pin, you must export it. You do it by writing the value of the pin you want to export into /sys/class/gpio/export. Then, a new directory is /sys/class/gpio/gpio<PIN-NUMBER> is created with many different files to control the pin (direction, value, etc.).
In our example, the pin 14 from the bank P9 correspond to GPIO 50. You can see the corresponding mapping between the pin and GPIO number in the beaglebone 101 document.
So, let's start by exporting this pin:
echo 50 > /sys/class/gpio/export
Then, a new directory /sys/class/gpio/gpio50 is created.
Let's set its direction to out
echo out > /sys/class/gpio/gpio50/direction
And let's set its value to 1
echo 1 > /sys/class/gpio/gpio50/value
And finally, if you want to make the LED blinks every second, you can use this command:
while [ 1 ]; do echo 1 > /sys/class/gpio/gpio50/value ; sleep 1 ; echo 0 > /sys/class/gpio/gpio50/value ; sleep 1 ; done
- How to use GPIO as outputs http://www.dummies.com/how-to/content/setting-beaglebone-gpios-as-outputs.html
- GPIO programming on the beaglebone: http://elinux.org/images/3/33/GPIO_Programming_on_the_Beaglebone.pdf
- BeagleBone 101: http://beagleboard.org/support/bone101