Raspberry Pi 2 & 3 Pin Mappings
- 5 minutes to read
Hardware interfaces for the Raspberry Pi 2 and Raspberry Pi 3 are exposed through the 40-pin header J8 on the board. Functionality includes:
- 24x - GPIO pins
- 1x - Serial UARTs (RPi3 only includes mini UART)
- 2x - SPI bus
- 1x - I2C bus
- 2x - 5V power pins
- 2x - 3.3V power pins
- 8x - Ground pins
Let's look at the GPIO available on this device.
GPIO Pin Overview
The following GPIO pins are accessible through APIs:
GPIO# Power-on Pull Alternate Functions Header Pin 2 PullUp I2C1 SDA 3 3 PullUp I2C1 SCL 5 4 PullUp 7 5 PullUp 29 6 PullUp 31 7 PullUp SPI0 CS1 26 8 PullUp SPI0 CS0 24 9 PullDown SPI0 MISO 21 10 PullDown SPI0 MOSI 19 11 PullDown SPI0 SCLK 23 12 PullDown 32 13 PullDown 33 16 PullDown SPI1 CS0 36 17 PullDown 11 18 PullDown 12 19 PullDown SPI1 MISO 35 20 PullDown SPI1 MOSI 38 21 PullDown SPI1 SCLK 40 22 PullDown 15 23 PullDown 16 24 PullDown 18 25 PullDown 22 26 PullDown 37 27 PullDown 13 35* PullUp Red Power LED 47* PullUp Green Activity LED
* = Raspberry Pi 2 ONLY. GPIO 35 & 47 are not available on Raspberry Pi 3.
As an example, the following code opens GPIO 5 as an output and writes a digital '1' out on the pin:
When you open a pin, it will be in its power-on state, which may include a pull resistor. To disconnect the pull resistors and get a high-impedance input, set the drive mode to GpioPinDriveMode.Input:
When a pin is closed, it reverts to its power-on state.
Some GPIO pins can perform multiple functions. By default, pins are configured as GPIO inputs. When you open an alternate function by calling or , the pins required by the function are automatically switched ("muxed") to the correct function. When the device is closed by calling or , the pins revert back to their default function. If you try to use a pin for two different functions at once, an exception will be thrown when you try to open the conflicting function. For example,
There is one Serial UART available on the RPi2/3: UART0
- Pin 8 - UART0 TX
- Pin 10 - UART0 RX
The example below initializes UART0 and performs a write followed by a read:
Note that you must add the following capability to the Package.appxmanifest file in your UWP project to run Serial UART code:
Visual Studio 2017 has a known bug in the Manifest Designer (the visual editor for appxmanifest files) that affects the serialcommunication capability. If your appxmanifest adds the serialcommunication capability, modifying your appxmanifest with the designer will corrupt your appxmanifest (the Device xml child will be lost). You can workaround this problem by hand editting the appxmanifest by right-clicking your appxmanifest and selecting View Code from the context menu.
Let's look at the I2C bus available on this device.
There is one I2C controller I2C1 exposed on the pin header with two lines SDA and SCL. 1.8KΩ internal pull-up resistors are already installed on the board for this bus.
Signal Name Header Pin Number Gpio Number SDA 3 2 SCL 5 3
The example below initializes I2C1 and writes data to an I2C device with address 0x40:
There are two SPI bus controllers available on the RPi2/3.
Signal Name Header Pin Number Gpio Number MOSI 19 10 MISO 21 9 SCLK 23 11 CS0 24 8 CS1 26 7
Signal Name Header Pin Number Gpio Number MOSI 38 20 MISO 35 19 SCLK 40 21 CS0 36 16
An example of how to perform a SPI write on bus SPI0 using chip select 0 is shown below:
Short answer: It is a reset.
Here is why:
From the ARM information center - Cortex-A7 MPCore Technical Reference Manual
This is the normal mode of operation where all of the processor functionality is available. The Cortex-A7 MPCore processor uses gated clocks and gates to disable inputs to unused functional blocks. Only the logic in use to perform an operation consumes any dynamic power.
Basically, the BCM2835/BCM2836 runs normally when this RUN pin to the IC is held to a logical HIGH.
From the Raspberry Pi Foundation's website - Released RPi Model B Schematics
It might be a bit difficult to see, but off to the left of this schematic is the wiring for P6, which you see as RUN when you look at the physical board.
During normal operation (leaving that connection open), PIN D15 (RUN) to the BCM IC (IC2) is held to a logical HIGH by R15 (pull-up resistor). When the P6 connection is closed, that same pin is pulled to a logical LOW (electricity likes to take the path of least resistance), effectively clearing that state to IC2 and resetting your system.