I2C windows iOT找不到DeviceInformation

时间:2016-07-16 21:26:49

标签: c# win-universal-app iot i2c windowsiot

我尝试使用I2C协议在运行Windows 10 IOT build 14376内部人员和使用I2C协议的T-REX Manual here之间进行通信。问题是它总是崩溃,所以在一些调试过程之后我发现它似乎没有从DeviceInformation.FinAllAsync(..)检索任何东西并且导致ArgumentOutOfRangeException之后的原因。它应该有一些我不明白的东西,可能是设备功能或权限,Microsoft教程没有提及here

var settings = new I2cConnectionSettings(0x07);
settings.BusSpeed = I2cBusSpeed.StandardMode;
var aqs = I2cDevice.GetDeviceSelector("I2C1");
var dis = await DeviceInformation.FindAllAsync(aqs);
int a = dis.Count; //is always equal to 0

然后我的using (I2cDevice device = await I2cDevice.FromIdAsync(dis[0].Id, settings)){...}

之前提到ArgumentOutOfRangeException而失败

我尝试的另一种方法是使用此代码:

I2CDevice device;
var settings = new I2cConnectionSettings(0x07);
settings.BusSpeed = I2cBusSpeed.StandardMode;

var controller = await Windows.Devices.I2c.I2cController.GetDefaultAsync();
device = controller.GetDevice(settings);

使用最后一行产生NullReferenceException

1 个答案:

答案 0 :(得分:2)

您可能正在使用"直接内存映射驱动程序"启用。您需要切换回"收件箱驱动程序"。

您的代码应该与"收件箱驱动程序"一起使用。但是,使用"直接内存映射驱动程序",您必须使用" Microsoft.IoT.Lightning"打包与您的物联网设备通信。

按照tutorial使用" Lightning"库,你设置I2c控制器的方式如下所示,

nil

请注意,您需要包含

init(texture:color:size:)
在您的包manifest文件中

,否则您无法访问所有串行外围设备。

按照此tutorial在"收件箱驱动程序"之间切换设备驱动程序和"直接内存映射驱动程序"。