第一次初始化
public async Task InitIO()
{
...
...
try
{
settings = new SpiConnectionSettings(SPI_CHIP_SELECT_LINE);
settings.ClockFrequency = 1000000;
settings.Mode = SpiMode.Mode0;
String spiDeviceSelector = SpiDevice.GetDeviceSelector();
IReadOnlyList<DeviceInformation> devices = await DeviceInformation.FindAllAsync(spiDeviceSelector);
_spi = await SpiDevice.FromIdAsync(devices[0].Id, settings);
}
catch (Exception ex)
{
throw new Exception("SPI Initialization Failed", ex);
}
...
...
}
第二次初始化:
public async Task ReInitSpi()
{
_spi.Dispose(); //Here is important.
try
{
if (settings.ChipSelectLine == 0)
{
settings = new SpiConnectionSettings(1); //CS1
}
else
{
settings = new SpiConnectionSettings(SPI_CHIP_SELECT_LINE); //CS0
}
settings.ClockFrequency = 1000000;
settings.Mode = SpiMode.Mode0;
String spiDeviceSelector = SpiDevice.GetDeviceSelector();
IReadOnlyList<DeviceInformation> devices = await DeviceInformation.FindAllAsync(spiDeviceSelector);
_spi = await SpiDevice.FromIdAsync(devices[0].Id, settings);
}
/* If initialization fails, display the exception and stop running */
catch (Exception ex)
{
throw new Exception("SPI Initialization Failed", ex);
}
}
每次你使用它,例如,像這樣做:
await mfrc.ReInitSpi();
var writeBuffer = new byte[] { 0x55, 0xaa };
mfrc._spi.Write(writeBuffer);
該作品爲了我。我希望它對你有幫助。
0號線映射到Rpi2上的物理引腳號24(CS0),1號線映射到物理引腳號26(CS1)。由於芯片選擇線在初始化時綁定到SPI器件。您可以「處理」已初始化的SPI器件並更改其芯片選擇線並重新初始化它。 –
它不起作用。在下一次初始化過程中停止。 – Jarek