SpiDevice 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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 API의 기본 기능을 보여 줍니다.
// 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 API를 사용하여 기본 연결 설정이 아닌 SPI 디바이스를 초기화하는 방법을 보여 줍니다. 8채널 10비트 ADC108S102 A/D 컨버터에 연결된 아날로그 포토셀에서 광강도를 읽어 이 작업을 수행합니다.
// 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 |
디바이스와 연결된 고유 ID를 가져옵니다. |
메서드
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[]) |
연결된 디바이스에 씁니다. |