Сопоставления контактов 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);
}
}