Skip to content

expansion header

Frank Bauernöppel edited this page Jan 29, 2019 · 25 revisions

The expansion header features many hardware interfaces connecting to other hardware.

Always power off the RasPi before wiring. If possible, use the four-eyes principle for review. All signal pins are for 3.3V signals only. Applying higher voltage may damage the RasPi.

overview

raspi expansion header

Image: https://elinux.org/RPi_Low-level_peripherals

Many pins can be reconfigured. On a running Pi use the following command to identify the current configuration:

root@raspberrypi2:~# gpio readall
 +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 | ALT0 | 1 |  3 || 4  |   |      | 5V      |     |     |
 |   3 |   9 |   SCL.1 | ALT0 | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT5 | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | ALT5 | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI | ALT0 | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO | ALT0 | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK | ALT0 | 0 | 23 || 24 | 1 | OUT  | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | OUT  | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+

The gpio utility comes with the wiringpi recipe and package. It shows different pin numberings:

  • Physical: the pin numbering on the expansion header J8
  • BCM: the BCM2837 SoC pad number routed to the header pin, see hardware docs,
  • wPi: the wiringPi numbering which we do not use to avoid a greater state of confusion.

We do not use the gpio command for serious stuff , only for checking the current settings. Instead, there is a generic Linux GPIO interface which is implemented on nearly all boards running Linux. This interface uses the BCM GPIO pads in a linear numbering fashion. See GPIO.

alternate pad modes

Most BCM pads can be reconfigured to particular mode. For example, the above output shows that

  • BCM pad 2 has the alternative mode 0 (ALT0) which is SDA.1 and
  • BCM pad 3 has the alternative mode 0 (ALT0) which is SCL.1

Both together function as an I2C bus. If I2C is not needed in your design, you may use those pins as additional GPIOs or something different by changing the pad mode.

for a complete list of all available alternate modes see https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2835/BCM2835-ARM-Peripherals.pdf or http://elinux.org/RPi_BCM2835_GPIOs

There are several way to change the pad mode:

device tree

The device tree method is the preferred method, because it is the standard way for all modern Linux kernels. Device tree configuration is read during booting.

using the gpio utility

With the gpio utility, pad modes can be changed from the command line on a running RasPi. We consider this a "quick and dirty" way, because attached hardware should not be changed while power is on. Moreover, this is a RasPi specifiy way, because that utility is RasPi specific.

using C code

Expansion boards

For an example, see sense hat.

Clone this wiki locally