Сопоставления контактов Dragonboard

Заголовок закрепления Dragonboard

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

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

Обратите внимание, что Dragonboard использует уровни логики 1.8V для всех контактов ввода-вывода.

Контакты GPIO

Давайте рассмотрим GPIO, доступные на этом устройстве.

Таблица закрепления GPIO

Следующие контакты GPIO доступны через API:

GPIO # Закрепление заголовка
36 23
12 24
13 25
69 26
115 27
24 29
25 30
35 31
34 32
28 33
33 34
21 Индикатор пользователя 1
120 Пользовательский светодиодный индикатор 2

Например, следующий код открывает GPIO 35 в качестве выходных данных и записывает цифровое "1" на контакт:

using Windows.Devices.Gpio;

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

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

Проблемы с GPIO

  • Выходные данные не работают в GPIO 24. Входные данные работают нормально.
  • Пин-коды настраиваются как InputPullDown при загрузке, но при первом открытии будут изменены на Входные данные (плавающие)
  • Закрепление не отменить изменения в состояние по умолчанию при закрытии
  • При включении прерываний на нескольких контактах могут возникать сомнительные прерывания.

Последовательный интерфейс UART

На dragonboard UART0 и UART1 доступны два серийных UARTS.

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

  • Контакт 5 — UART0 TX
  • Контакт 7 — UART0 RX
  • Контакт 3 — UART0 CTS
  • Закрепление 9 — UART0 RTS

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

  • Контакт 11 — UART1 TX
  • Контакт 13 — UART1 RX

В приведенном ниже примере выполняется инициализация UART1 и запись с последующим чтением:

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

public async void Serial()
{
    string aqs = SerialDevice.GetDeviceSelector("UART1");                   /* 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);
}

Примечание

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

Чтобы запустить последовательный код UART, необходимо добавить следующую возможность в файл Package.appxmanifest проекта UWP:

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

Шина I2C

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

Контакты I2C

I2C0 предоставляется в заголовке контакта с двумя строками SDA и SCL

  • Pin 17 — I2C0 SDA
  • Pin 15 — I2C0 SCL

I2C1 предоставляется в заголовке контакта с двумя строками SDA и SCL

  • Контакт 21 — I2C1 SDA
  • Контакт 19 — I2C1 SCL

Пример I2C

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

    // Get a selector string that will return our wanted I2C controller
    string aqs = I2cDevice.GetDeviceSelector("I2C0");

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

    // 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

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

Контакты SPI

В базе данных доступен один контроллер SPI0.

  • Контакт 10 — SPI0 MISO
  • Контакт 14 — SPI0 MOSI
  • Закрепление 8 — SPI0 SCLK
  • Контакт 12 — SPI0 CS0

Проблемы SPI

Часы SPI зафиксированы на 4,8 мГц. Запрошенные часы SPI будут игнорироваться.

Пример 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);

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