MinnowBoard Max のピン マッピング

Note

このピン マッピングを Minnowboard の新しいバージョンと比較するには、こちらのドキュメントを参照してください。

概要

MinnowBoard Max のピン ヘッダー

MinnowBoard Max のハードウェア インターフェイスは、ボード上の 26 ピン ヘッダー JP1 を介して公開されます。 以下の機能があります。

  • 10x - GPIO ピン
  • 2x - シリアル UART
  • 1x - SPI バス
  • 1x - I2C バス
  • 1x - 5V 電源ピン
  • 1x - 3.3V 電源ピン
  • 2x - グラウンド ピン

MinnowBoard Max では、すべての IO ピンで 3.3V のロジック レベルが使用されます。 さらに、電源ピンとグラウンド ピンを除くすべてのピンは、TXS0104E レベル シフターによってバッファーされます。 これらのレベル シフターは、10KΩ の抵抗プルアップを使用したオープン コレクター出力として表され、プルアップは、IO が入力と出力のどちらに設定されているかに関係なく存在します。

レベル シフターのオープン コレクターの性質は、ピンで "0" を強く出力できる一方で、"1" は弱くしか出力できないことを意味します。 ピンから電流を引き出すデバイス (LED など) を取り付ける場合、このことに注意することが重要です。 インターフェイスによって LED を MinnowBoard Max に取り付ける正しい方法については、「Blinky サンプル」を参照してください。

GPIO ピン

次の GPIO ピンは、API でアクセスできます。

GPIO# ヘッダー ピン
0 21
1 23
2 25
3 14
4 16
5 18
6 20
7 22
8 24
9 26

注:GPIO 4GPIO 5 は、BIOS のブートストラップ構成ピンとして MinnowBoard Max で使用されます。 接続されているデバイスが、起動中にこれらの GPIO Low を動作させないことを確認してください。これは、これによって MBM が起動できなくなる可能性があるためです。 MBM が BIOS の後に起動した後、これらの GPIO を通常通り使用できます。

GPIO サンプル

たとえば、次のコードでは、GPIO 5 を出力として開き、デジタルの「1」をピンに書き出します。

using Windows.Devices.Gpio;

public void GPIO()
{
    GpioController Controller = GpioController.GetDefault(); /* Get the default GPIO controller on the system */

    GpioPin Pin = Controller.OpenPin(5);        /* Open GPIO 5                      */
    Pin.SetDriveMode(GpioPinDriveMode.Output);  /* Set the IO direction as output   */
    Pin.Write(GpioPinValue.High);               /* Output a digital '1'             */
}

シリアル UART

MBM には、使用可能な 2 つのシリアル UART (UART1UART2) があります

UART1 には、フロー制御シグナルの UART1 CTSUART1 RTS に加えて、標準の UART1 TX および UART1 RX ラインがあります。

  • ピン 6 - UART1 TX
  • ピン 8 - UART1 RX
  • ピン 10 - UART1 CTS
  • ピン 12 - UART1 RTS

ビルド 10240 以降、UART1 は動作しません。 UART2 または USB シリアル コンバーターを使用してください。

UART2 には、UART2 TX および UART2 RX ラインのみ含まれます。

  • ピン 17 - UART2 TX
  • ピン 19 - UART2 RX

UART2 ではフロー制御がサポートされていないため、SerialDevice の次のプロパティにアクセスすると、例外がスローされる場合があります。

  • BreakSignalState
  • IsDataTerminalReadyEnabled
  • IsRequestToSendEnabled
  • Handshake - SerialHandshake.None のみサポートされています

次の例では、UART2 を初期化し、書き込みを実行し、その後読み取りを実行します。

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

public async void Serial()
{
    string aqs = SerialDevice.GetDeviceSelector("UART2");                   /* 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;
    SerialPort.Parity = SerialParity.None;         
    SerialPort.StopBits = SerialStopBitCount.One;
    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 ファイルに次の機能を追加する必要があることに注意してください。

Visual Studio 2017 のマニフェスト デザイナーには、シリアル通信機能に影響する (appxmanifest ファイルのビジュアル エディター) 既知のバグがあります。 appxmanifest によってシリアル通信機能が追加された場合、デザイナーを使用して appxmanifest を変更すると、appxmanifest が破損します (デバイス xml 子は失われます)。 この問題を回避するには、appxmanifest を右クリックし、コンテキスト メニューから [コードの表示] を選択して、appxmanifest を手動で編集します。

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

I2C バス

このデバイスで使用できる I2C バスを見てみしましょう。

I2C の概要

SDASCL の 2 つのラインがあるピン ヘッダーでは、1 つの I2C コントローラー I2C5 が公開されています。 これらのラインには、10KΩ の内部プルアップ抵抗が既に存在します。

  • ピン 15 - I2C5 SDA
  • ピン 13 - I2C5 SCL

I2C サンプル

次の例では、I2C5 を初期化し、アドレスが 0x40である I2C デバイスにデータを書き込みます。

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);
    }

}

I2C の問題

MinnowBoard Max には、I2C バスに関する既知の問題があります。これが原因で特定の I2C デバイスとの通信で問題が発生します。 通常、I2C デバイスは、バス要求時にそのアドレスを認識します。 ただし、特定の条件下では、この認識がレベル シフターから MBM に伝達されず、その結果、CPU はデバイスが応答しなかったと見なし、バス トランザクションを取り消します。 この問題は、IO ピン上の TXS0104E レベル シフターに関連している可能性があり、ラインでの電圧の急上昇が原因で早々に発生する場合があります。 現在の対処法は、100 オームの抵抗を I2C SCK ラインと直列に挿入することで、これにより、急上昇が抑えられます。 すべてのデバイスが影響を受けるわけではないので、この対処法は、バス応答の取得に問題がある場合にのみ必要です。 この対処法が必要なことが判明しているデバイスの 1 つが HTU21D です。

SPI バス

このデバイスで使用できる SPI バスを見てみしましょう。

SPI の概要

MBM には、使用可能な 1 つの SPI コントローラー SPI0 があります。

  • ピン 9 - SPI0 MOSI
  • ピン 7 - SPI0 MISO
  • ピン 11 - SPI0 SCLK
  • ピン 5 - SPI0 CS0

SPI サンプル

バス SPI0 で SPI 書き込みを実行する方法の例を次に示します。

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;

    // Create an SpiDevice with the specified Spi settings
    var controller = await SpiController.GetDefaultAsync();

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