Win(Phone)10开发第(10)弹,Raspberry Pi 2 引脚映射

Posted by baicai on December 4, 2015

RPi2 排针

*使用 Fritzing 制作的图像* Raspberry Pi 2 的硬件接口通过开发板上的 40 排针 J8 公开。功能包括:
  • 13x - GPIO 引脚
  • 2x - SPI 总线
  • 1x - I2C 总线
  • 2x - 5V 电源引脚
  • 2x - 3.3V 电源引脚
  • 8x - 接地引脚

GPIO 引脚

以下 GPIO 引脚可通过 API 访问:
GPIO# Power-on Pull Header Pin
4 PullUp 7
5 PullUp 29
6 PullUp 31
12 PullDown 32
13 PullDown 33
16 PullDown 36
17 PullDown 11
18 PullDown 12
19 PullDown 35
20 PullDown 38
21 PullDown 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
using Windows.Devices.Gpio;例如,以下代码将 GPIO 5 作为输出打开,并在该引脚上写出数字“<strong>1</strong>”:
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 
}
当你打开引脚时,它将处于其通电状态。若要断开拉电阻的连接并获取高阻抗输入,请将驱动程序模式设置为 GpioPinDriveMode.Input:
pin.SetDriveMode(GpioDriveMode.Input);
当关闭引脚时,它将还原到其通电状态。

I2C 总线

排针上公开了一个 I2C 控制器 I2C1,带有 SDASCL 两条线。用于此总线的 1.8KΩ 内部上拉电阻已安装在开发板上。
  • 引脚 3 - I2C1 SDA
  • 引脚 5 - I2C1 SCL
下面的示例将初始化 I2C1 并将数据写入地址为 0x40 的 I2C 设备:
using Windows.Devices.Enumeration;
using Windows.Devices.I2c;

public async void I2C()
{
    // Get a selector string for bus "I2C1"
    string aqs = I2cDevice.GetDeviceSelector("I2C1");
    
    // Find the I2C bus controller with our selector string
    var dis = await DeviceInformation.FindAllAsync(aqs);
    if (dis.Count == 0)
        return; // bus not found
    
    // 0x40 is the I2C device address
    var settings = new I2cConnectionSettings(0x40);
    
    // Create an I2cDevice with our selected bus controller and I2C settings
    using (I2cDevice device = await I2cDevice.FromIdAsync(dis[0].Id, settings))
    {
        byte[] writeBuf = { 0x01, 0x02, 0x03, 0x04 };
        device.Write(writeBuf);
    }
}

SPI 总线

RPi2 上有 2 个 SPI 总线控制器可用: SPI0SPI1SPI0 具有标准的 MOSI、<strong>MISO</strong> 和 SCLK 线,并且可以配置为使用 SPI0 CS0SPI0 CS1 两种芯片选择线之一。
  • 引脚 19 - SPI0 MOSI
  • 引脚 21 - SPI0 MISO
  • 引脚 23 - SPI0 SCLK
  • 引脚 24 - SPI0 CS0
  • 引脚 26 - SPI0 CS1
SPI1 包括 MOSI、<strong>MISO</strong> 和 SCLK 线,并且只有 SPI1 CS0 一种芯片选择线。
  • 引脚 38 - SPI1 MOSI
  • 引脚 35 - SPI1 MISO
  • 引脚 40 - SPI1 SCLK
  • 引脚 11 - SPI1 CS0
有关如何在总线 SPI0 上执行 SPI 写入的示例如下所示:
using Windows.Devices.Enumeration;
using Windows.Devices.Spi;

public async void SPI()
{
    // Get a selector string for bus "SPI0"
    string aqs = SpiDevice.GetDeviceSelector("SPI0");
    
    // Find the SPI bus controller device with our selector string
    var dis = await DeviceInformation.FindAllAsync(aqs);
    if (dis.Count == 0);
        return; // "SPI0" not found on this system
    
    // Use chip select line CS0
    var settings = new SpiConnectionSettings(0);
    
    // Create an SpiDevice with our bus controller and SPI settings
    using (SpiDevice device = await SpiDevice.FromIdAsync(dis[0].Id, settings))
    {
        byte[] writeBuf = { 0x01, 0x02, 0x03, 0x04 };
        device.Write(writeBuf);
    }
}