MinnowBoard 最大引脚映射
注意
要将此引脚映射与较新版本的 Minnowboard 进行比较,请访问此处的文档。
概述
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 引脚
可通过 API 访问以下 GPIO 引脚:
GPIO# 标头引脚 0 21 1 23 2 25 3 14 4 16 5 18 6 20 7 22 8 24 9 26
注意:MinnowBoard Max 使用 GPIO 4 和 GPIO 5 作为 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
- Pin 8 - UART1 RX
- 引脚 10 - UART1 CTS
- 引脚 12 - UART1 RTS
UART1 在内部版本 10240 中不起作用。 请使用 UART2 或 USB 串行转换器。
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);
}
请注意,必须将以下功能添加到 UWP 项目中的 Package.appxmanifest 文件以运行串行 UART 代码:
Visual Studio 2017 的清单设计器(用于 appxmanifest 文件的可视化编辑器)中存在影响 serialcommunication 功能的已知 bug。 如果 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
- 引脚 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 级移位器有关,这可能会由于线路上的电压峰值而过早触发。 当前的解决方案是插入一个与 I2C SCK 线串联的 100 欧姆电阻,这有助于消除尖脉冲。 并非所有设备都受到影响,因此只有在遇到总线响应时遇到问题时,才需要此解决方法。 已知需要此解决方法的一个设备是 HTU21D。
SPI 总线
让我们看看此设备上提供的 SPI 总线。
SPI 概述
MBM 上有一个 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);
}
}