MinnowBoard Max Pin Mappings

Примечание

Чтобы сравнить это сопоставление контактов с более новыми версиями Minnowboard, ознакомьтесь с документацией здесь.

Общие сведения

MinnowBoard Max Pin Header

Аппаратные интерфейсы minnowBoard Max предоставляются через 26-контактный заголовок JP1 на плате. Он поддерживает следующие функции:

  • 10x — контакты GPIO
  • 2x — последовательные UART
  • 1x — шина SPI
  • 1x — шина I2C
  • Штифт питания 1x –5 В
  • 1x - 3,3 В контакт питания
  • 2x — заземления

MinnowBoard Max использует уровни логики 3.3V для всех контактов ввода-вывода. Кроме того, все контакты буферизуются с помощью сдвига уровня TXS0104E , за исключением контактов питания и заземления. Эти сдвига уровня отображаются как открытые выходные данные сборщика с резистивным подтягиванием в 10 КБ, и подтягивание присутствует независимо от того, настроен ли ввод или вывод ввода-вывода.

Открытый сборщик характер сдвига уровней означает, что контакты могут выводить "0", но только слабо выводить "1". Это важно учитывать при присоединении устройств, которые черпают ток из контактов (например, светодиодных индикаторов). Правильный способ взаимодействия светодиода с 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 4 и GPIO 5 используются MinnowBoard Max в качестве контактов конфигурации начальной загрузки для BIOS. Убедитесь, что подключенные устройства не используют эти GPIO во время загрузки, так как это может помешать загрузке 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 доступны два серийных UARTS: UART1 и UART2.

UART1 имеет стандартные линии UART1 TX и UART1 RX , а также сигналы управления потоком UART1 CTS и UART1 RTS.

  • Закрепление 6 — UART1 TX
  • Контакт 8 — UART1 RX
  • Контакт 10 — UART1 CTS
  • Закрепление 12 — UART1 RTS

UART1 не работает в сборке 10240. Используйте UART2 или преобразователь USB-Serial.

UART2 включает только строки UART2 TX и UART2 RX .

  • Контакт 17 — UART2 TX
  • Контакт 19 — UART2 RX

UART2 не поддерживает управление потоком, поэтому доступ к следующим свойствам SerialDevice может привести к возникновению исключения:

  • BreakSignalState
  • IsDataTerminalReadyEnabled
  • IsRequestToSendEnabled
  • Подтверждение — поддерживается только 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 в файл Package.appxmanifest в проекте UWP необходимо добавить следующую возможность:

В Visual Studio 2017 обнаружена известная ошибка в конструкторе манифестов (визуальный редактор для файлов appxmanifest), которая влияет на возможность serialcommunication. Если приложение appxmanifest добавляет возможность serialcommunication, изменение appxmanifest с помощью конструктора приведет к повреждению приложения appxmanifest (дочерний xml-файл устройства будет потерян). Эту проблему можно обойти, вручную изменив appxmanifest, щелкнув правой кнопкой мыши appxmanifest и выбрав пункт Просмотреть код в контекстном меню.

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

Шина I2C

Давайте рассмотрим шину I2C, доступную на этом устройстве.

Обзор I2C

В заголовке контакта имеется один контроллер I2C I2C5 с двумя строками SDA и SCL. На этих линиях уже присутствуют внутренние подтягиваемые резисторы 10K.

  • Контакт 15 — I2C5 SDA
  • Pin 13 — I2C5 SCL

Пример I2C

В приведенном ниже примере выполняется инициализация I2C5 и запись данных на устройство I2C с адресом 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);
    }

}

Проблемы с I2C

MinnowBoard Max имеет известную проблему с шиной I2C, которая вызывает проблемы с связью с определенными устройствами I2C. Обычно устройство I2C подтверждает свой адрес во время запроса шины. Однако при определенных условиях это подтверждение не распространяется обратно через средства смены уровня на MBM, в результате чего ЦП считает, что устройство не ответило, и отменяет транзакцию шины. Проблема, по-видимому, связана с сдвигами уровня TXS0104E на контактах ввода-вывода, которые могут активироваться преждевременно из-за скачков напряжения на линии. В настоящее время обходным решением является вставка резистора 100 Ом последовательно с линией I2C SCK, которая помогает подавлять пики. Это касается не всех устройств, поэтому это решение требуется только в том случае, если у вас возникли проблемы с получением ответа автобуса. Известно, что это обходное решение требуется для устройства HTU21D.

Шина SPI

Давайте рассмотрим шину SPI, доступную на этом устройстве.

Обзор SPI

На MBM доступен один контроллер SPI0 :

  • Закрепление 9 — SPI0 MOSI
  • Контакт 7 — SPI0 MISO
  • Контакт 11 — SPI0 SCLK
  • Закрепление 5 — SPI0 CS0

Пример SPI

Ниже приведен пример выполнения записи SPI в шине SPI0 :

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