HummingBoard Pro/Base GPIOs
Description
[HB GPIO] GPIO, or General-Purpose Input/Output is a mechanism that allows a computing board to provide electrical contacts for signalling to a wide range of external devices. These pins allow commerical and hobbyist projects to do things like communicate with a “breakout board”, or individual physical modules – like a motor.
GPIO interfaces are different than other capabilities on a circuit board (like LVDS or the RTC integration) in that they provide a non-specific electrical interface. While these other interfaces have a set specification and set capability for an intended use (connecting to an LCD panel or a real-time clock, in the cited examples respectively) GPIO pins are used at the developer’s discretion. You could connect a motor. Or a temperature sensor. Or a lock solenoid. Or any one of millions of other device combinations for bringing information into the system – or sending information out from the HummingBoard device.
Pin header schematics
26 pin header
GPIO Header Pinout
Header Pin | Signal | Pad Name | GPIO Name | Linux GPIO Number (*) |
---|---|---|---|---|
J2 [pin 1] | 3.3V | - | - | - |
J2 [pin 2] | 5V | - | - | - |
J2 [pin 3] | I2C_SDA | EIM_D18 | GPIO3_IO18 | 82 |
J2 [pin 4] | 5V | - | - | - |
J2 [pin 5] | I2C_SCL | EIM_D17 | GPIO3_IO17 | 81 |
J2 [pin 6] | GND | - | - | - |
J2 [pin 7] | GPIO 1 | GPIO_1 | GPIO1_IO01 | 1 |
J2 [pin 8] | UART TX | - | - | - |
J2 [pin 9] | GND | - | - | - |
J2 [pin 10] | UART RX | - | - | - |
J2 [pin 11] | GPIO 73 | EIM_DA9 | GPIO3_IO09 | 73 |
J2 [pin 12] | GPIO 72 | EIM_DA8 | GPIO3_IO08 | 72 |
J2 [pin 13] | GPIO 71 | EIM_DA7 | GPIO3_IO07 | 71 |
J2 [pin 14] | GND | - | - | - |
J2 [pin 15] | GPIO 70 | EIM_DA6 | GPIO3_IO06 | 70 |
J2 [pin 16] | GPIO 194 | SD3_CMD | GPIO7_IO02 | 194 |
J2 [pin 17] | 3.3V | - | - | - |
J2 [pin 18] | GPIO 195 | SD3_CLK | GPIO7_IO03 | 195 |
J2 [pin 19] | SPI_MOSI | EIM_CS1 | GPIO2_IO24 | 56 |
J2 [pin 20] | GND | - | - | - |
J2 [pin 21] | SPI_MISO | EIM_OE | GPIO2_IO25 | 57 |
J2 [pin 22] | GPIO 67 | EIM_DA3 | GPIO3_IO03 | 67 |
J2 [pin 23] | SPI_SCLK | EIM_CS0 | GPIO2_IO23 | 55 |
J2 [pin 24] | ECSPI2_SS0 | EIM_RW | GPIO2_IO26 | 58 |
J2 [pin 25] | GND | - | - | - |
J2 [pin 26] | ECSPI2_SS1 | EIM_LBA | GPIO2_IO27 | 59 |
Pins 16 and 18 are actually SD3_CMD and SD3_CLK signals that can be muxed to support flex can TX/RX interface (i.e. those can be connected to an external CAN).
(*) SPI and I2C can also be muxed to be GPIO
Serial UART port access
The UART port for debug can be accessed on the 26 pin header as follows –
Pin 6/9/14/20/25 GND
Pin 1 3.3V
Pin 8 buffered i.MX6 UART TX – pulled up to 3.3v
Pin 10 buffered i.MX6 UART RX – pulled up to 3.3v
Notice that the pin number starts as pin #1 on the edge of the board, towards the micro-USB connector; then number #2 is the one towards the corner of the board.
Accessing GPIO from Linux user space
General
Please have a look at WiringX, which also supports the Hummingboard:
Manual
The external GPIOs are available under the /sys/class/gpio folder in Linux.
To control on the GPIO pins you need to calculate the GPIO number XX (*) and run the commands below:
Get the current list of reserved GPIO
mount -t debugfs none /sys/kernel/debug
cat /sys/kernel/debug/gpio
Reserve GPIO pin
# Export GPIO XX
echo XX > /sys/class/gpio/export
Set GPIO pin Direction
echo "out" > /sys/class/gpio/gpioXX/direction
# or
echo "in" > /sys/class/gpio/gpioXX/direction
Set the value of an output pin
Get the value of an input pin
Free GPIO pin
To calculate the GPIO number XX:
XX = linux gpio number = (gpio_bank - 1) * 32 + gpio_bit
Example: To calculate the GPIO number of pin header J2 [pin 12] Pad Name GPIO3_IO08
GPIO Bank = 3, GPIO bit = 8
XX = (3 - 1) * 32 + 8 = 72
You can take the GPIO Number from the above table (*)
External Links and References
IMX6 Software Development/Drivers
IMX6 Som Documents
wiringHB
SolidRun Ltd.