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 層級移位器緩衝,但電源和地面針腳除外。 無論 IO 設定為輸入或輸出,這些層級移位器會顯示為具有 10K1K 抗拒性提取的開放式收集器輸出 ,而且不論 IO 是否設定為輸入或輸出,都會存在提取。
層級移位器的開啟收集器本質表示,針腳可以強烈輸出 『0』,但只弱式輸出 『1』。 連接從針腳繪製電流的裝置時,請務必記住這點(例如LED)。 如需將LED介面至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
注意: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
- Pin 10 - UART1 CTS
- Pin 12 - UART1 RTS
UART1 無法在組建 10240 中運作。 請使用 UART2 或 USB 序列轉換器。
UART2 只包含 UART2 TX 和 UART2 RX 行。
- Pin 17 - UART2 TX
- Pin 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 在指令清單設計工具中有已知的 Bug(appxmanifest 檔案的可視化編輯器),會影響串行通訊功能。 如果您的 appxmanifest 新增了 serialcommunication 功能,使用設計工具修改 appxmanifest 將會損毀 appxmanifest (Device xml 子系將會遺失)。 您可以在 appxmanifest 上按下滑鼠右鍵,然後從操作功能表中選取 [檢視程序代碼],藉以手動編輯 appxmanifest 來解決此問題。
<Capabilities>
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
</Capabilities>
I2C Bus
讓我們看看此裝置上可用的I2C 總線。
I2C 概觀
針腳標頭上公開了一個 I2C 控制器 I2C5 ,並具有兩行 SDA 和 SCL。 這些線路上已經存在 10K00 內部拉力電壓。
- Pin 15 - I2C5 SDA
- Pin 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 Bus
讓我們看看此裝置上可用的 SPI 總線。
SPI 概觀
MBM 上有一個 SPI 控制器 SPI0 :
- 針腳 9 - SPI0 MOSI
- Pin 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);
}
}