我尝试使用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
答案 0 :(得分:2)
您可能正在使用"直接内存映射驱动程序"启用。您需要切换回"收件箱驱动程序"。
您的代码应该与"收件箱驱动程序"一起使用。但是,使用"直接内存映射驱动程序",您必须使用" Microsoft.IoT.Lightning"打包与您的物联网设备通信。
按照tutorial使用" Lightning"库,你设置I2c控制器的方式如下所示,
nil
请注意,您需要包含
init(texture:color:size:)
在您的包manifest文件中,否则您无法访问所有串行外围设备。
按照此tutorial在"收件箱驱动程序"之间切换设备驱动程序和"直接内存映射驱动程序"。