Freigeben über


SpiDevice Klasse

Definition

Stellt ein Gerät dar, das über den SPI-Bus verbunden ist.

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
Vererbung
Object Platform::Object IInspectable SpiDevice
Attribute
Implementiert

Windows-Anforderungen

Gerätefamilie
Windows IoT Extension SDK (eingeführt in 10.0.10240.0)
API contract
Windows.Devices.DevicesLowLevelContract (eingeführt in v1.0)

Beispiele

Im folgenden Beispiel wird die grundlegende Funktionalität dieser und anderer SPI-APIs veranschaulicht, indem gezeigt wird, wie ein SPI-Bus mithilfe der Standardverbindungseinstellungen nach Anzeigename geöffnet wird.

// 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); 
            } 
        } 
    } 
} 

Das folgende Beispiel zeigt, wie Sie diese und andere SPI-APIs verwenden, um ein SPI-Gerät mit nicht standardmäßigen Verbindungseinstellungen zu initialisieren. Dazu wird die Lichtstärke von einer analogen Photozelle gelesen, die mit einem 8-Kanal-10-Bit-ADC108S102-A/D-Konverter verbunden ist.

// 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); 
    } 
} 

Eigenschaften

ConnectionSettings

Ruft die Verbindungseinstellungen für das Gerät ab.

DeviceId

Ruft die dem Gerät zugeordnete eindeutige ID ab.

Methoden

Close()

Schließt die Verbindung mit dem Gerät.

Dispose()

Führt anwendungsspezifische Aufgaben durch, die mit der Freigabe, der Zurückgabe oder dem Zurücksetzen von nicht verwalteten Ressourcen zusammenhängen.

FromIdAsync(String, SpiConnectionSettings)

Öffnet ein Gerät mit den angegebenen Verbindungseinstellungen.

GetBusInfo(String)

Ruft die Informationen zu einem bestimmten Bus ab.

GetDeviceSelector()

Ruft alle im System gefundenen SPI-Busse ab.

GetDeviceSelector(String)

Ruft alle SPI-Busse ab, die auf dem System gefunden werden und dem Eingabeparameter entsprechen.

Read(Byte[])

Liest vom verbundenen Gerät.

TransferFullDuplex(Byte[], Byte[])

Übertragen Sie Daten mit einem vollduplexen Kommunikationssystem. Vollduplex ermöglicht es sowohl dem Host als auch dem Peripheriegerät, gleichzeitig zu kommunizieren.

Definitionen von Host und Peripheriegerät finden Sie unter Windows.Devices.Spi-Namespace.

TransferSequential(Byte[], Byte[])

Übertragen Sie Daten sequenziell an das Gerät.

Write(Byte[])

Schreibt auf das verbundene Gerät.

Gilt für:

Weitere Informationen