0

我尝试在运行 Windows 10 IOT build 14376 内部人员的树莓派 3 和此处使用 I2C 协议的 T-REX手册之间进行通信。DeviceInformation.FinAllAsync(..)问题是它总是崩溃,所以经过一些调试过程后,我发现它似乎没有从ArgumentOutOfRangeException. 它应该有一些我不明白的东西,可能在设备功能或权限中,微软教程在这里没有提到

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最后一行产生 a

4

1 回答 1

2

您可能启用了“直接内存映射驱动程序”。您需要切换回“收件箱驱动程序”。

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

按照本教程使用“Lightning”库,设置 I2c 控制器的方式如下所示,

        if (LightningProvider.IsLightningEnabled)
        {
            LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider();
        }

        var i2cProvider = LightningI2cProvider.GetI2cProvider();
        var i2cControllers = await I2cController.GetControllersAsync(i2cProvider);
        var i2cController = i2cControllers[0];
        var i2cDevice = i2cController.GetDevice(new I2cConnectionSettings(0x07));

请注意,您需要包括

<iot:Capability Name="lowLevelDevices"/>
<DeviceCapability Name="109b86ad-f53d-4b76-aa5f-821e2ddf2141"/>

在您的包清单文件中,否则您无权访问所有串行外围设备。

按照本教程在“Inbox Driver”和“Direct Memory Mapped Driver”之间切换您的设备驱动程序。

于 2016-07-17T14:44:47.220 回答