MinnowBoard Max Pin-Zuordnungen
Hinweis
Um diese Pinzuordnung mit neueren Versionen des Minnowboards zu vergleichen, besuchen Sie bitte die Dokumentation hier.
Übersicht
Hardwareschnittstellen für minnowBoard Max werden über den 26-Pin-Header JP1 auf dem Board verfügbar gemacht. Zu den Funktionen gehören:
- 10x - GPIO-Pins
- 2x - Serielle UARTs
- 1x - SPI Bus
- 1x - I2C Bus
- 1x - 5V Power Pin
- 1x - 3,3V Netzstecker
- 2x - Gemahlene Pins
MinnowBoard Max verwendet 3.3V-Logikebenen für alle IO-Pins. Darüber hinaus werden alle Pins von TXS0104E Ebenenverschiebungen gepuffert, mit Ausnahme von Strom- und Gemahlenstiften. Diese Ebenenverschiebungen werden als offene Sammelausgabe mit einem 10KΩ-Widerstandszieher angezeigt, und der Pull-Up ist vorhanden, unabhängig davon, ob die E/A auf Eingabe oder Ausgabe festgelegt ist.
Die Art der Ebenenverschieber bedeutet, dass die Pins eine "0" stark ausgeben können, aber nur schwach einen "1" ausgeben können. Dies ist wichtig, wenn Sie Geräte anfügen, die Strom von den Pins (z. B. einer LED) zeichnen. Sehen Sie sich das Blinky-Beispiel an, um eine LED an das MinnowBoard Max zu interfaceieren.
GPIO-Pins
Auf die folgenden GPIO-Pins kann über APIs zugegriffen werden:
GPIO# Kopfzeilen-Pin 0 21 1 23 2 25 3 14 4 16 5 18 6 20 7 22 8 24 9 26
Hinweis: GPIO 4 und GPIO 5 werden von MinnowBoard Max als Bootstrap-Konfigurations-Pins für das BIOS verwendet. Stellen Sie sicher, dass die angeschlossenen Geräte diese GPIO nicht während des Starts niedrig steuern, da dadurch verhindert werden kann, dass MBM gestartet wird. Nachdem mbM über das BIOS gestartet wurde, kann diese GPIO normal verwendet werden.
GPIO-Beispiel
Als Beispiel öffnet der folgende Code GPIO 5 als Ausgabe und schreibt ein digitales "1" auf dem Pin aus:
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' */
}
Serielle UART
Es stehen zwei serielle UARTS auf dem MBM zur Verfügung: UART1 und UART2
UART1 verfügt über die Standardlinien UART1 TX und UART1 RX sowie Flusssteuerungssignale UART1 CTS und UART1 RTS.
- Pin 6 - UART1 TX
- Pin 8 - UART1 RX
- Pin 10 - UART1 CTS
- Pin 12 - UART1 RTS
UART1 funktioniert nicht ab Build 10240. Verwenden Sie UART2 oder einen USB-seriellen Konverter.
UART2 umfasst nur die UART2 TX - und UART2 RX-Linien .
- Pin 17 – UART2 TX
- Pin 19 – UART2 RX
UART2 unterstützt keine Flusssteuerung, sodass der Zugriff auf die folgenden Eigenschaften von SerialDevice zu einer Ausnahme führen kann, die ausgelöst wird:
- BreakSignalState
- IsDataTerminalReadyEnabled
- IsRequestToSendEnabled
- Handshake – nur SerialHandshake.None wird unterstützt
Das folgende Beispiel initialisiert UART2 und führt einen Schreibvorgang gefolgt von einem Lesevorgang aus:
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);
}
Beachten Sie, dass Sie der Datei "Package.appxmanifest " in Ihrem UWP-Projekt die folgende Funktion hinzufügen müssen, um seriellen UART-Code auszuführen:
Visual Studio 2017 hat einen bekannten Fehler im Manifest-Designer (der visuelle Editor für Appxmanifest-Dateien), der sich auf die serielle Kommunikationsfähigkeit auswirkt. Wenn Ihre appxmanifest die serialcommunication-Funktion hinzufügt, beschädigt das Ändern Ihrer appxmanifest mit dem Designer Ihre appxmanifest (das untergeordnete Device XML-Element geht verloren). Sie können dieses Problem umgehen, indem Sie das Appxmanifest manuell bearbeiten, indem Sie mit der rechten Maustaste auf Ihr appxmanifest klicken und im Kontextmenü "Code anzeigen" auswählen.
<Capabilities>
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
</Capabilities>
I2C-Bus
Sehen wir uns den auf diesem Gerät verfügbaren I2C-Bus an.
I2C-Übersicht
Es gibt einen I2C-Controller I2C5 , der auf der Pin-Kopfzeile mit zwei Linien SDA und SCL verfügbar gemacht wird. Auf diesen Linien sind bereits 10KΩ interne Pull-Up-Widerstände vorhanden.
- Pin 15 - I2C5 SDA
- Pin 13 - I2C5 SCL
I2C-Beispiel
Das folgende Beispiel initialisiert I2C5 und schreibt Daten auf ein I2C-Gerät mit Adresse 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-Probleme
Das MinnowBoard Max hat ein bekanntes Problem mit dem I2C-Bus, der Kommunikationsprobleme mit bestimmten I2C-Geräten verursacht. Normalerweise erkennt ein I2C-Gerät seine Adresse während einer Busanfrage an. Unter bestimmten Bedingungen kann diese Bestätigung jedoch nicht durch die Levelverschiebungen an mbM weitergegeben werden, und daher glaubt die CPU, dass das Gerät nicht reagierte und die Bustransaktion abbricht. Das Problem scheint mit den TXS0104E Ebenenverschiebern auf den E/A-Pins zu tun, die aufgrund von Spannungsspitzen auf der Linie vorzeitig auslösen können. Die aktuelle Problemumgehung besteht darin, einen 100-ω-Widerstand in Serie mit der I2C-SCK-Linie einzufügen, wodurch Spitzen unterdrückt werden. Nicht alle Geräte sind betroffen, daher ist diese Problemumgehung nur erforderlich, wenn Sie Probleme beim Abrufen einer Busantwort haben. Ein Gerät, das bekannt ist, dass diese Problemumgehung erforderlich ist, ist die HTU21D.
SPI-Bus
Sehen wir uns den SPI-Bus an, der auf diesem Gerät verfügbar ist.
SPI Übersicht
Es gibt einen SPI Controller SPI0 auf dem MBM:
- Pin 9 - SPI0 MOSI
- Pin 7 - SPI0 MISO
- Pin 11 - SPI0 SCLK
- Pin 5 - SPI0 CS0
SPI-Beispiel
Ein Beispiel zum Ausführen eines SPI-Schreibvorgangs auf Bus SPI0 ist unten dargestellt:
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);
}
}