The Rpi allows peripherals and expansion boards to access the CPU by exposing the in and outputs. The production board has a 26-pin 2.54mm (100mil)[1] expansion header, arranged in a 2x13 strip. They provide 8 GPIO pins plus access to I2C, SPI, UART), as well as +3V3, +5V and GND supply lines. Pin one is column 0 on the bottom row. [2]

Voltage levels are 3v3. There is no over-voltage protection on the board - the intention is that people interested in serious interfacing will use an external board with buffers, level conversion and analog I/O rather than soldering directly onto the main board.

It is also possible to reconfigure some of the pins to provide a second I2C interface. [no-ref]

Contents

Power pins

Maximum permitted current draw from the 5v pin is the USB input current (usually 1A) minus any current draw from the rest of the board.[3]

Model A: 1000mA - 500mA -> max power draw: 500mA

Model B: 1000mA - 700mA -> max power draw: 300mA

General Purpose Input/Output (GPIO)

General Purpose Input/Output (a.k.a. GPIO) is a generic pin on a chip whose behavior (including whether it is an input or output pin) can be controlled (programmed) through software. For more information see:the wikipedia article.

On the production board, all the UART, SPI and I2C pins can be reconfigured as GPIO pins, to provide a total of 17 GPIO pins.[4]

It is also possible to reconfigure some of the pins to provide an ARM JTAG interface.[7]

It is also possible to reconfigure some of the pins to provide an I2S or PCM interface.[8]

Driver support

The Foundation will not include a GPIO driver in the initial release, standard linux GPIO drivers should work with minimal modification.[9]
The Foundation will not include a SPI driver in the initial release, we hope the community might write one.[10]
The Foundation will not include an I2C driver in the initial release, we hope the community might provide one, standard linux I2C drivers should work with minimal modification.[11]

Code examples

Gert van Loo & Dom, has provided some tested code which accesses the GPIO pins through direct GPIO register manipulation in C-code.
(Thanks to Dom for doing the difficult work of finding and testing the mapping.)
Example GPIO code: