SpiDevice Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет устройство, подключенное через шину SPI.
public ref class SpiDevice sealed : IClosable
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Devices.DevicesLowLevelContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class SpiDevice final : IClosable
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Devices.DevicesLowLevelContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class SpiDevice : System.IDisposable
Public NotInheritable Class SpiDevice
Implements IDisposable
- Наследование
- Атрибуты
- Реализации
Требования к Windows
Семейство устройств |
Windows IoT Extension SDK (появилось в 10.0.10240.0)
|
API contract |
Windows.Devices.DevicesLowLevelContract (появилось в v1.0)
|
Примеры
В следующем примере показано, как открыть шину SPI по понятному имени с помощью параметров подключения по умолчанию, иллюстрирует основные функциональные возможности этого и других API SPI.
// Arduino SPIDigialPot example: http://arduino.cc/en/Tutorial/SPIDigitalPot
// using digital potentiometer AD5206 the 50kohm variance
async void Digipot_AD5206()
{
// Get a device selector query that will select buses with SP10
// property set on them (we expect only 1 SP10 bus at the end)
var spi0Aqs = SpiDevice.GetDeviceSelector("SPI0");
// Find all buses using the AQS query formed above
var devicesInfo = await DeviceInformation.FindAllAsync(spi0Aqs);
// Construct time settings beforehand which can't be changed
// once a SPI device is created
const Int32 DigipotChipSelectLine = 0;
var settings = new SpiConnectionSettings(DigipotChipSelectLine);
// Ask the SPI bus to open a device with the connection settings
// provided. Once we go out of scope, the device will be released
using (var spiDev = await SpiDevice.FromIdAsync(devicesInfo[0].Id, settings))
{
// data[0] is the channel address
// data[1] is the resistance step (0 - 255)
// 0 is max digipot resistance, and 255 is no resistance
byte[] data = { 0x0, 0x0 };
// Go over the 6 channels of the digipot
for (byte channel = 0; channel < 6; ++channel)
{
data[0] = channel;
// Step the resistance on this channel from max to min
for (byte r = 0; r <= 255; ++r)
{
data[1] = r;
spiDev.Write(data);
await Task.Delay(100);
}
// Step the resistance on this channel from min to max
for (byte r = 255; r >= 0; --r)
{
data[1] = r;
spiDev.Write(data);
await Task.Delay(100);
}
}
}
}
В следующем примере показано, как использовать этот и другие API SPI для инициализации устройства SPI с параметрами подключения, не заданными по умолчанию. Это делается путем считывания интенсивности света из аналогового фотоэлемента, подключенного к 8-канальным 10-разрядным ADC108S102 A/D Converter.
// Knowing that an SPI bus with 'spiBusId' exist, and has the ADC connected
// on 'chipSelectLine', read a digital sample from some sensor wired to 'channel'
async Task<int> AnalogRead_ADC108S102(string spiBusId, Int32 chipSelectLine, byte channel)
{
var settings = new SpiConnectionSettings(chipSelectLine);
// The defaults (4MHz, 8-bit, Mode0) will not work here according
// to the datasheet.
// e.g The datasheet specifies a clock freq range (8MHz - 16MHz)
settings.ClockFrequency = 8000000;
// CPOL=1, CPHA=1
settings.Mode = SpiMode.Mode3;
// Conversion happens on a 16-bit frame
settings.DataBitLength = 16;
// The ADC108S102 has 8 input analog channels, where each can be
// connected to a specific analog sensor and each sensor is
// used by a different application independently
// The IO requests to the SPI bus are implicitly synchronized
// by the driver model, plus that the ADC configuration is per
// 1 sampling read
settings.SharingMode = SpiSharingMode.Shared;
// Ask the SPI bus to open a shared device with the connection settings
// provided.
using (var spiDev = await SpiDevice.FromIdAsync(spiBusId, settings))
{
if (spiDev == null)
return -1;
// Set up control register to get a conversion on a specific
// channel address
byte[] write16bitData = { (byte)(channel << 3), 0 };
byte[] read16bitData = new byte[2];
// The transfer is guaranteed to be atomic according to SpbCx model
spiDev.TransferFullDuplex(write16bitData, read16bitData);
ushort result = BitConverter.ToUInt16(read16bitData, 0);
// Get rid of the 2 LSB zeros and mask the 10-bit sampled value
return (int)((result >> 2) & 0x3ff);
}
}
Свойства
ConnectionSettings |
Возвращает параметры подключения для устройства. |
DeviceId |
Возвращает уникальный идентификатор, связанный с устройством. |
Методы
Close() |
Закрывает подключение к устройству. |
Dispose() |
Выполняет определяемые приложением задачи, связанные с удалением, высвобождением или сбросом неуправляемых ресурсов. |
FromIdAsync(String, SpiConnectionSettings) |
Открывает устройство с указанными параметрами подключения. |
GetBusInfo(String) |
Извлекает сведения об определенной шине. |
GetDeviceSelector() |
Возвращает все шины SPI, найденные в системе. |
GetDeviceSelector(String) |
Возвращает все шины SPI, найденные в системе, которые соответствуют входным параметрам. |
Read(Byte[]) |
Считывает данные с подключенного устройства. |
TransferFullDuplex(Byte[], Byte[]) |
Передача данных с помощью полнодуплексной системы связи. Полная дуплексная связь позволяет одновременно взаимодействовать между узлом и периферийным устройством. Определения узла и периферийного устройства см. в разделе Пространство имен Windows.Devices.Spi. |
TransferSequential(Byte[], Byte[]) |
Передача данных на устройство последовательно. |
Write(Byte[]) |
Записывает данные на подключенное устройство. |