Raspberry Pi 2 & 3 Pin マッピングRaspberry Pi 2 & 3 Pin Mappings

Raspberry Pi 2 & 3 ピンヘッダー

Raspberry Pi 2 および Raspberry Pi 3 のハードウェアインターフェイスは、ボード上の 40-ピンヘッダー J8 を介して公開されます。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 pin24x - GPIO pins
  • 1x -シリアル Uart (RPi3 にはミニ UART のみが含まれます)1x - Serial UARTs (RPi3 only includes mini UART)
  • 2 ~ SPI バス2x - SPI bus
  • 1x -I2C バス1x - I2C bus
  • 5Vの電源ピン2x - 5V power pins
  • 2 ~ 3.3 v の電源ピン2x - 3.3V power pins
  • 8x -グラウンドピン8x - Ground pins

GPIO ピンGPIO Pins

このデバイスで使用できる GPIO を見てみましょう。Let's look at the GPIO available on this device.

GPIO Pin の概要GPIO Pin Overview

次の GPIO ピンは Api を使用してアクセスできます。The following GPIO pins are accessible through APIs:

GPIO#GPIO# 電源オンプルPower-on Pull 代替関数Alternate Functions ヘッダーの PinHeader Pin
22 PullUpPullUp I2C1 SDAI2C1 SDA 33
33 PullUpPullUp I2C1 SCLI2C1 SCL 55
44 PullUpPullUp 77
55 PullUpPullUp 2929
66 PullUpPullUp 3131
77 PullUpPullUp SPI0 CS1SPI0 CS1 2626
88 PullUpPullUp SPI0 CS0SPI0 CS0 2424
99 ドロップPullDown SPI0 の誤 OSPI0 MISO 2121
1010 ドロップPullDown SPI0 MOSISPI0 MOSI 1919
1111 ドロップPullDown SPI0 SCLKSPI0 SCLK 2323
1212 ドロップPullDown 3232
1313 ドロップPullDown 3333
1616 ドロップPullDown SPI1 CS0SPI1 CS0 3636
1717 ドロップPullDown 1111
1818 ドロップPullDown 1212
1919 ドロップPullDown SPI1 の誤 OSPI1 MISO 3535
2020 ドロップPullDown SPI1 MOSISPI1 MOSI 3838
2121 ドロップPullDown SPI1 SCLKSPI1 SCLK 4040
2222 ドロップPullDown 1515
2323 ドロップPullDown 1616
2424 ドロップPullDown 1818
2525 ドロップPullDown 2222
2626 ドロップPullDown 3737
2727 ドロップPullDown 1313
35 *35* PullUpPullUp 赤の電源 LEDRed Power LED
47 *47* PullUpPullUp 緑色のアクティビティ LEDGreen Activity LED

* = Raspberry Pi 2 のみ。* = Raspberry Pi 2 ONLY. Raspberry Pi 3 では、GPIO 35 & 47 は使用できません。GPIO 35 & 47 are not available on Raspberry Pi 3.

GPIO サンプルGPIO Sample

例として、次のコードでは、 GPIO 5 を出力として開き、デジタル "1" を pin に書き込みます。As an example, the following code opens GPIO 5 as an output and writes a digital '1' out on the pin:

using Windows.Devices.Gpio;

public void GPIO()
{
    // Get the default GPIO controller on the system
    GpioController gpio = GpioController.GetDefault();
    if (gpio == null)
        return; // GPIO not available on this system

    // Open GPIO 5
    using (GpioPin pin = gpio.OpenPin(5))
    {
        // Latch HIGH value first. This ensures a default value when the pin is set as output
        pin.Write(GpioPinValue.High);

        // Set the IO direction as output
        pin.SetDriveMode(GpioPinDriveMode.Output);

    } // Close pin - will revert to its power-on state
}

Pin を開くと、そのピンは電源オン状態になります。これには、プルの抵抗が含まれる場合があります。When you open a pin, it will be in its power-on state, which may include a pull resistor. プル抵抗器を切断し、高いインピーダンスの入力を取得するには、ドライブモードを GpioPinDriveMode に設定します。To disconnect the pull resistors and get a high-impedance input, set the drive mode to GpioPinDriveMode.Input:

    pin.SetDriveMode(GpioPinDriveMode.Input);

Pin を閉じると、電源オン状態に戻ります。When a pin is closed, it reverts to its power-on state.

ピン留めマルチプレキシングPin Muxing

一部の GPIO ピンでは、複数の機能を実行できます。Some GPIO pins can perform multiple functions. 既定では、pin は GPIO 入力として構成されます。By default, pins are configured as GPIO inputs. またはを呼び出すことによって代替関数を開くと、 I2cDevice.FromIdAsync() SpiDevice.FromIdAsync() 関数に必要なピンが自動的に適切な関数に切り替わるようになります ("muxed")。When you open an alternate function by calling I2cDevice.FromIdAsync() or SpiDevice.FromIdAsync() , the pins required by the function are automatically switched ("muxed") to the correct function. またはを呼び出すことによってデバイスを閉じると I2cDevice.Dispose() SpiDevice.Dispose() 、ピンが既定の機能に戻ります。When the device is closed by calling I2cDevice.Dispose() or SpiDevice.Dispose(), the pins revert back to their default function. 2つの異なる関数に対して一度に pin を使用しようとすると、競合している関数を開こうとすると例外がスローされます。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,

var controller = GpioController.GetDefault();
var gpio2 = controller.OpenPin(2);      // open GPIO2, shared with I2C1 SDA

var dis = await DeviceInformation.FindAllAsync(I2cDevice.GetDeviceSelector());
var i2cDevice = await I2cDevice.FromIdAsync(dis[0].Id, new I2cConnectionSettings(0x55)); // exception thrown because GPIO2 is open

gpio2.Dispose(); // close GPIO2
var i2cDevice = await I2cDevice.FromIdAsync(dis[0].Id, new I2cConnectionSettings(0x55)); // succeeds because gpio2 is now available

var gpio2 = controller.OpenPin(2); // throws exception because GPIO2 is in use as SDA1

i2cDevice.Dispose(); // release I2C device
var gpio2 = controller.OpenPin(2); // succeeds now that GPIO2 is available

シリアル UARTSerial UART

RPi2/3 で使用可能なシリアル UART が1つあります: UART0There is one Serial UART available on the RPi2/3: UART0

  • ピン 8- UART0 TXPin 8 - UART0 TX
  • ピン 10- UART0 RXPin 10 - UART0 RX

次の例では、 UART0 を初期化し、書き込みの後に読み取りを実行します。The example below initializes UART0 and performs a write followed by a read:

using Windows.Storage.Streams;
using Windows.Devices.Enumeration;
using Windows.Devices.SerialCommunication;

public async void Serial()
{
    string aqs = SerialDevice.GetDeviceSelector("UART0");                   /* Find the selector string for the serial device   */
    var dis = await DeviceInformation.FindAllAsync(aqs);                    /* Find the serial device with our selector string  */
    SerialDevice SerialPort = await SerialDevice.FromIdAsync(dis[0].Id);    /* Create an serial device with our selected device */

    /* Configure serial settings */
    SerialPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);
    SerialPort.ReadTimeout = TimeSpan.FromMilliseconds(1000);
    SerialPort.BaudRate = 9600;                                             /* mini UART: only standard baudrates */
    SerialPort.Parity = SerialParity.None;                                  /* mini UART: no parities */  
    SerialPort.StopBits = SerialStopBitCount.One;                           /* mini UART: 1 stop bit */
    SerialPort.DataBits = 8;

    /* Write a string out over serial */
    string txBuffer = "Hello Serial";
    DataWriter dataWriter = new DataWriter();
    dataWriter.WriteString(txBuffer);
    uint bytesWritten = await SerialPort.OutputStream.WriteAsync(dataWriter.DetachBuffer());

    /* Read data in from the serial port */
    const uint maxReadLength = 1024;
    DataReader dataReader = new DataReader(SerialPort.InputStream);
    uint bytesToRead = await dataReader.LoadAsync(maxReadLength);
    string rxBuffer = dataReader.ReadString(bytesToRead);
}

シリアル UART コードを実行するには、UWP プロジェクトの package.appxmanifest ファイルに次の機能を追加する必要があることに注意してください。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 には、serialcommunication 機能に影響を与えるマニフェストデザイナー (package.appxmanifest ファイルのビジュアルエディター) の既知のバグがあります。Visual Studio 2017 has a known bug in the Manifest Designer (the visual editor for appxmanifest files) that affects the serialcommunication capability. Package.appxmanifest が serialcommunication 機能を追加すると、デザイナーで package.appxmanifest を変更すると、package.appxmanifest が破損します (デバイスの xml 子は失われます)。If your appxmanifest adds the serialcommunication capability, modifying your appxmanifest with the designer will corrupt your appxmanifest (the Device xml child will be lost). この問題を回避するには、package.appxmanifest を右クリックし、コンテキストメニューから [コードの表示] を選択して、package.appxmanifest を手動で編集します。You can work around this problem by hand editing the appxmanifest by right-clicking your appxmanifest and selecting View Code from the context menu.

  <Capabilities>
    <DeviceCapability Name="serialcommunication">
      <Device Id="any">
        <Function Type="name:serialPort" />
      </Device>
    </DeviceCapability>
  </Capabilities>

I2C バスI2C Bus

このデバイスで使用可能な I2C バスを見てみましょう。Let's look at the I2C bus available on this device.

I2C の概要I2C Overview

SDASCLの2行のピンヘッダーで公開されている I2C コントローラー I2C1が1つあります。There is one I2C controller I2C1 exposed on the pin header with two lines SDA and SCL. 1.8 kΩ 内部のプルアップの抵抗器は、このバスのボードに既にインストールされています。1.8KΩ internal pull-up resistors are already installed on the board for this bus.

シグナル名Signal Name ヘッダーの Pin 番号Header Pin Number Gpio 番号Gpio Number
SDASDA 33 22
SCLSCL 55 33

次の例では、 I2C1 を初期化し、アドレス 0x40の I2C デバイスにデータを書き込みます。The example below initializes I2C1 and writes data to an I2C device with address 0x40:

using Windows.Devices.Enumeration;
using Windows.Devices.I2c;

public async void I2C()
{
    // 0x40 is the I2C device address
    var settings = new I2cConnectionSettings(0x40);
    // FastMode = 400KHz
    settings.BusSpeed = I2cBusSpeed.FastMode;

    // Create an I2cDevice with the specified I2C settings
    var controller = await I2cController.GetDefaultAsync();

    using (I2cDevice device = controller.GetDevice(settings))
    {
        byte[] writeBuf = { 0x01, 0x02, 0x03, 0x04 };
        device.Write(writeBuf);
    }
}

SPI バスSPI Bus

RPi2/3 で利用できる SPI バスコントローラーは2つあります。There are two SPI bus controllers available on the RPi2/3.

SPI0SPI0

シグナル名Signal Name ヘッダーの Pin 番号Header Pin Number Gpio 番号Gpio Number
MOSIMOSI 1919 1010
誤 oMISO 2121 99
SCLKSCLK 2323 1111
CS0CS0 2424 88
CS1CS1 2626 77

SPI1SPI1

シグナル名Signal Name ヘッダーの Pin 番号Header Pin Number Gpio 番号Gpio Number
MOSIMOSI 3838 2020
誤 oMISO 3535 1919
SCLKSCLK 4040 2121
CS0CS0 3636 1616

SPI のサンプルSPI Sample

チップ選択0を使用してバス SPI0 で SPI 書き込みを実行する方法の例を次に示します。An example of how to perform a SPI write on bus SPI0 using chip select 0 is shown below:

using Windows.Devices.Enumeration;
using Windows.Devices.Spi;

public async void SPI()
{
    // Use chip select line CS0
    var settings = new SpiConnectionSettings(0);
    // Set clock to 10MHz
    settings.ClockFrequency = 10000000;

    // Get a selector string that will return our wanted SPI controller
    string aqs = SpiDevice.GetDeviceSelector("SPI0");

    // Find the SPI bus controller devices with our selector string
    var dis = await DeviceInformation.FindAllAsync(aqs);

    // Create an SpiDevice with our selected bus controller and Spi settings
    using (SpiDevice device = await SpiDevice.FromIdAsync(dis[0].Id, settings))
    {
        byte[] writeBuf = { 0x01, 0x02, 0x03, 0x04 };
        device.Write(writeBuf);
    }
}